diff --git a/designsafe/static/scripts/data-depot/components/data-depot-nav/data-depot-nav.component.js b/designsafe/static/scripts/data-depot/components/data-depot-nav/data-depot-nav.component.js index e541c66c9..60d0b70f5 100644 --- a/designsafe/static/scripts/data-depot/components/data-depot-nav/data-depot-nav.component.js +++ b/designsafe/static/scripts/data-depot/components/data-depot-nav/data-depot-nav.component.js @@ -45,6 +45,12 @@ class DataDepotNavCtrl { state: 'myData', description: 'Private directory for your data' }, + { + name: 'Scratch (Frontera)', + collapsible: false, + state: 'myDataScratch', + description: 'Scratch directory on Frontera for use with JupyterHub' + }, { name: 'My Projects', collapsible: false, diff --git a/designsafe/static/scripts/data-depot/components/data-depot-toolbar/data-depot-toolbar.component.js b/designsafe/static/scripts/data-depot/components/data-depot-toolbar/data-depot-toolbar.component.js index 7b08279d9..aa2d8c41e 100644 --- a/designsafe/static/scripts/data-depot/components/data-depot-toolbar/data-depot-toolbar.component.js +++ b/designsafe/static/scripts/data-depot/components/data-depot-toolbar/data-depot-toolbar.component.js @@ -16,6 +16,7 @@ class DataDepotToolbarCtrl { placeholder() { var stateNames = { 'myData': 'My Data', + 'myDataScratch': 'Scratch (Frontera)', 'projects.list': 'My Projects', 'sharedData': 'Shared Data', 'boxData': 'Box', diff --git a/designsafe/static/scripts/data-depot/index.js b/designsafe/static/scripts/data-depot/index.js index dec411eed..30255a151 100644 --- a/designsafe/static/scripts/data-depot/index.js +++ b/designsafe/static/scripts/data-depot/index.js @@ -83,6 +83,39 @@ function config( }, }, }) + .state('myDataScratch', { + url: '/agave/{systemId}/{filePath:any}/?query_string&offset&limit', + component: 'dataDepotBrowser', + params: { + systemId: 'designsafe.storage.frontera.scratch', + filePath: Django.user, + }, + resolve: { + apiParams: ()=> { + return { + fileMgr: 'agave', + }; + }, + path: ($stateParams, Django) => { + 'ngInject'; + if ($stateParams.filePath.replace(/^\/+/, '') === '') { + return Django.user; + } + return $stateParams.filePath; + }, + auth: ($q, Django) => { + 'ngInject'; + if (Django.context.authenticated) { + return true; + } + + return $q.reject({ + type: 'authn', + context: Django.context, + }); + }, + }, + }) .state('sharedData', { url: '/shared/{systemId}/{filePath:any}?query_string', component: 'dataDepotBrowser', diff --git a/designsafe/static/scripts/ng-designsafe/services/file-operation-service.js b/designsafe/static/scripts/ng-designsafe/services/file-operation-service.js index c0b54338f..5f9863a40 100644 --- a/designsafe/static/scripts/ng-designsafe/services/file-operation-service.js +++ b/designsafe/static/scripts/ng-designsafe/services/file-operation-service.js @@ -49,7 +49,7 @@ export class FileOperationService { getTests(files) { const externalDataStates = ['boxData', 'dropboxData', 'googledriveData']; - const agaveDataStates = ['myData', 'projects.view', 'projects.curation']; + const agaveDataStates = ['myData', 'myDataScratch', 'projects.view', 'projects.curation']; let isHazmapper = files.length > 0 ? files.some((e) => e.name.endsWith('hazmapper')) : false; const tests = { copy: this.Django.context.authenticated && !isHazmapper && files.length > 0, diff --git a/designsafe/static/scripts/workspace/components/workspace-data-browser/workspace-data-browser.component.js b/designsafe/static/scripts/workspace/components/workspace-data-browser/workspace-data-browser.component.js index 4a7811708..2f4399b7b 100644 --- a/designsafe/static/scripts/workspace/components/workspace-data-browser/workspace-data-browser.component.js +++ b/designsafe/static/scripts/workspace/components/workspace-data-browser/workspace-data-browser.component.js @@ -17,6 +17,7 @@ class WorkspaceDataBrowserCtrl { this.options = [ { name: 'myData', label: 'My Data' }, + { name: 'myDataScratch', label: 'Scratch (Frontera)' }, { name: 'myProjects', label: 'My Projects' }, { name: 'publications', label: 'Published' }, { name: 'nees', label: 'Published (NEES)' }, @@ -58,6 +59,17 @@ class WorkspaceDataBrowserCtrl { }); this.breadcrumbParams = this.FileListingService.fileMgrMappings.agave.breadcrumbParams; break; + case 'myDataScratch': + this.listingType = 'files'; + this.FileListingService.browse({ + section: 'main', + api: 'agave', + scheme: 'private', + system: 'designsafe.storage.frontera.scratch', + path: this.Django.user, + }); + this.breadcrumbParams = this.FileListingService.fileMgrMappings.agave.breadcrumbParams; + break; case 'myProjects': this.listingType = 'projects'; this.ProjectService.listProjects({ section: 'main' });