Skip to content

Commit e2e5e7d

Browse files
committed
Merge branch 'release/22.6.0'
2 parents 7cea5bc + 2bfb65b commit e2e5e7d

File tree

151 files changed

+5645
-565
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+5645
-565
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

7+
## [22.6.0] - 2022-6-22
8+
### Added
9+
- Files page redesign phase 2
10+
711
## [22.5.0] - 2022-5-02
812
### Changed
913
- Misc bug fixes
@@ -1846,6 +1850,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
18461850
### Added
18471851
- Quick Files
18481852

1853+
[22.6.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.6.0
18491854
[22.5.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.5.0
18501855
[22.4.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.4.0
18511856
[22.3.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.3.0

app/guid-file/-components/file-detail-layout/styles.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
.MainColumn {
88
flex-grow: 3;
9+
z-index: 1;
910

1011
h3 {
1112
text-overflow: ellipsis;

app/guid-file/controller.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Controller from '@ember/controller';
22
import { action } from '@ember/object';
3+
import RouterService from '@ember/routing/router-service';
34
import { inject as service } from '@ember/service';
45
import { tracked } from '@glimmer/tracking';
56
import { taskFor } from 'ember-concurrency-ts';
@@ -9,6 +10,7 @@ import Toast from 'ember-toastr/services/toast';
910
export default class GuidFile extends Controller {
1011
@service media!: Media;
1112
@service toast!: Toast;
13+
@service router!: RouterService;
1214

1315
@tracked revisionsOpened = false;
1416
@tracked tagsOpened = false;
@@ -76,4 +78,9 @@ export default class GuidFile extends Controller {
7678
}
7779
}
7880
}
81+
82+
@action
83+
onDelete() {
84+
this.router.transitionTo('guid-node.files', this.model.fileModel.target.get('id'));
85+
}
7986
}

app/guid-file/route.ts

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@ import Analytics from 'ember-osf-web/services/analytics';
1212
import MetaTags, { HeadTagDef } from 'ember-osf-web/services/meta-tags';
1313
import Ready from 'ember-osf-web/services/ready';
1414
import OsfStorageFile from 'ember-osf-web/packages/files/osf-storage-file';
15+
import BitbucketFile from 'ember-osf-web/packages/files/bitbucket-file';
16+
import BoxFile from 'ember-osf-web/packages/files/box-file';
17+
import DataverseFile from 'ember-osf-web/packages/files/dataverse-file';
18+
import DropboxFile from 'ember-osf-web/packages/files/dropbox-file';
19+
import FigshareFile from 'ember-osf-web/packages/files/figshare-file';
20+
import GithubFile from 'ember-osf-web/packages/files/github-file';
21+
import GitlabFile from 'ember-osf-web/packages/files/gitlab-file';
22+
import GoogleDriveFile from 'ember-osf-web/packages/files/google-drive-file';
23+
import OneDriveFile from 'ember-osf-web/packages/files/one-drive-file';
24+
import OwnCloudFile from 'ember-osf-web/packages/files/own-cloud-file';
25+
import S3File from 'ember-osf-web/packages/files/s3-file';
1526
import CurrentUserService from 'ember-osf-web/services/current-user';
1627
import RegistrationModel from 'ember-osf-web/models/registration';
1728

@@ -51,8 +62,50 @@ export default class GuidFile extends Route {
5162
if (target.withdrawn === true) {
5263
this.transitionTo('guid-registration', target.id);
5364
}
54-
const osfStorageFile = new OsfStorageFile(this.currentUser, file);
55-
return osfStorageFile;
65+
const provider = file.provider;
66+
let storageFile;
67+
68+
switch(provider){
69+
case 'osfstorage':
70+
storageFile = new OsfStorageFile(this.currentUser, file);
71+
break;
72+
case 'bitbucket':
73+
storageFile = new BitbucketFile(this.currentUser, file);
74+
break;
75+
case 'box':
76+
storageFile = new BoxFile(this.currentUser, file);
77+
break;
78+
case 'dataverse':
79+
storageFile = new DataverseFile(this.currentUser, file);
80+
break;
81+
case 'dropbox':
82+
storageFile = new DropboxFile(this.currentUser, file);
83+
break;
84+
case 'figshare':
85+
storageFile = new FigshareFile(this.currentUser, file);
86+
break;
87+
case 'github':
88+
storageFile = new GithubFile(this.currentUser, file);
89+
break;
90+
case 'gitlab':
91+
storageFile = new GitlabFile(this.currentUser, file);
92+
break;
93+
case 'googledrive':
94+
storageFile = new GoogleDriveFile(this.currentUser, file);
95+
break;
96+
case 'onedrive':
97+
storageFile = new OneDriveFile(this.currentUser, file);
98+
break;
99+
case 'owncloud':
100+
storageFile = new OwnCloudFile(this.currentUser, file);
101+
break;
102+
case 's3':
103+
storageFile = new S3File(this.currentUser, file);
104+
break;
105+
default:
106+
this.transitionTo('not-found', guid);
107+
}
108+
return storageFile;
56109
} catch (error) {
57110
this.transitionTo('not-found', guid);
58111
throw error;

app/guid-file/template.hbs

Lines changed: 69 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
({{t 'general.version'}}: {{this.viewedVersion}})
2222
{{/if}}
2323
</h2>
24-
<FileActionsMenu @item={{this.model.fileModel}} />
24+
<FileActionsMenu @item={{this.model}} @onDelete={{this.onDelete}} @allowRename={{false}} />
2525
</div>
2626
</:header>
2727
<:body>
@@ -33,70 +33,78 @@
3333
</div>
3434
</:body>
3535
<:right>
36-
{{#if this.revisionsOpened}}
37-
<section data-test-revisions-tab local-class='FileDetail__revisions'>
38-
<h2 local-class='FileDetail__right-section-heading'>{{t 'general.revisions'}}</h2>
39-
<ol local-class='FileDetail__revision-list' reversed>
40-
<hr>
41-
{{#if this.model.getRevisions.isRunning}}
42-
<LoadingIndicator @dark={{true}} />
43-
{{else}}
44-
{{#each this.model.waterButlerRevisions as |version|}}
45-
<FileVersion
46-
@version={{version}}
47-
@downloadUrl={{this.model.links.download}}
48-
@changeVersion={{this.changeVersion}}
49-
/>
50-
<hr>
36+
{{#if (or this.model.shouldShowTags this.model.shouldShowRevisions) }}
37+
{{#if this.revisionsOpened}}
38+
<section data-test-revisions-tab local-class='FileDetail__revisions'>
39+
<h2 local-class='FileDetail__right-section-heading'>{{t 'general.revisions'}}</h2>
40+
<ol local-class='FileDetail__revision-list' reversed>
41+
<hr aria-hidden='true'>
42+
{{#if this.model.getRevisions.isRunning}}
43+
<LoadingIndicator @dark={{true}} />
5144
{{else}}
52-
{{t 'file_detail.no_revisions'}}
53-
{{/each}}
54-
{{/if}}
55-
</ol>
56-
</section>
57-
{{/if}}
58-
{{#if this.tagsOpened}}
59-
<div local-class='RightContainer'>
60-
<h2>{{t 'general.tags'}}</h2>
61-
<TagsWidget
62-
@taggable={{this.model.fileModel}}
63-
@readOnly={{not this.model.userCanEditMetadata}}
64-
@inline={{true}}
65-
/>
66-
</div>
45+
{{#each this.model.waterButlerRevisions as |version|}}
46+
<FileVersion
47+
@version={{version}}
48+
@downloadUrl={{this.model.links.download}}
49+
@changeVersion={{this.changeVersion}}
50+
/>
51+
<hr aria-hidden='true'>
52+
{{else}}
53+
{{t 'file_detail.no_revisions'}}
54+
{{/each}}
55+
{{/if}}
56+
</ol>
57+
</section>
58+
{{/if}}
59+
{{#if this.tagsOpened}}
60+
<div local-class='RightContainer'>
61+
<h2>{{t 'general.tags'}}</h2>
62+
<TagsWidget
63+
@taggable={{this.model.fileModel}}
64+
@readOnly={{not this.model.userCanEditMetadata}}
65+
@inline={{true}}
66+
/>
67+
</div>
68+
{{/if}}
6769
{{/if}}
6870
</:right>
6971
<:rightButtons>
70-
{{#if this.media.isMobile}}
71-
<BsButton
72-
data-test-file-renderer-button
73-
data-analytics-name='File renderer button'
74-
local-class='SlideButtons {{if this.rightColumnClosed 'Active'}}'
75-
@size='lg'
76-
@onClick={{this.toggleFileRenderer}}
77-
>
78-
<FaIcon @icon='file-alt' @fixedWidth={{true}}/>
79-
</BsButton>
72+
{{#if (or this.model.shouldShowTags this.model.shouldShowRevisions) }}
73+
{{#if this.media.isMobile}}
74+
<BsButton
75+
data-test-file-renderer-button
76+
data-analytics-name='File renderer button'
77+
local-class='SlideButtons {{if this.rightColumnClosed 'Active'}}'
78+
@size='lg'
79+
@onClick={{this.toggleFileRenderer}}
80+
>
81+
<FaIcon @icon='file-alt' @fixedWidth={{true}}/>
82+
</BsButton>
83+
{{/if}}
84+
{{#if this.model.shouldShowRevisions}}
85+
<BsButton
86+
aria-label={{if this.revisionsOpened (t 'file_detail.close_revisions') (t 'file_detail.view_revisions')}}
87+
data-test-versions-button
88+
data-analytics-name='Versions button'
89+
local-class='SlideButtons {{if this.revisionsOpened 'Active'}}'
90+
@size='lg'
91+
@onClick={{this.toggleRevisions}}
92+
>
93+
<FaIcon @icon='history' @fixedWidth={{true}}/>
94+
</BsButton>
95+
{{/if}}
96+
{{#if this.model.shouldShowTags}}
97+
<BsButton
98+
aria-label={{if this.tagsOpened (t 'file_detail.close_tags') (t 'file_detail.view_tags')}}
99+
data-test-tags-button
100+
data-analytics-name='Tags button'
101+
local-class='SlideButtons {{if this.tagsOpened 'Active'}}'
102+
@size='lg'
103+
@onClick={{this.toggleTags}}
104+
>
105+
<FaIcon @icon='tags' @fixedWidth={{true}}/>
106+
</BsButton>
107+
{{/if}}
80108
{{/if}}
81-
<BsButton
82-
aria-label={{if this.revisionsOpened (t 'file_detail.close_revisions') (t 'file_detail.view_revisions')}}
83-
data-test-versions-button
84-
data-analytics-name='Versions button'
85-
local-class='SlideButtons {{if this.revisionsOpened 'Active'}}'
86-
@size='lg'
87-
@onClick={{this.toggleRevisions}}
88-
>
89-
<FaIcon @icon='history' @fixedWidth={{true}}/>
90-
</BsButton>
91-
<BsButton
92-
aria-label={{if this.tagsOpened (t 'file_detail.close_tags') (t 'file_detail.view_tags')}}
93-
data-test-tags-button
94-
data-analytics-name='Tags button'
95-
local-class='SlideButtons {{if this.tagsOpened 'Active'}}'
96-
@size='lg'
97-
@onClick={{this.toggleTags}}
98-
>
99-
<FaIcon @icon='tags' @fixedWidth={{true}}/>
100-
</BsButton>
101109
</:rightButtons>
102110
</GuidFile::-Components::FileDetailLayout>

app/guid-node/controller.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import Controller from '@ember/controller';
2+
import RouterService from '@ember/routing/router-service';
3+
import { inject as service } from '@ember/service';
4+
5+
6+
export default class GuidNode extends Controller {
7+
@service router!: RouterService;
8+
9+
get shouldHideNodeNavbar() {
10+
return this.router.currentRouteName === 'guid-node.files.provider';
11+
}
12+
}

app/guid-node/files/index/route.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Route from '@ember/routing/route';
2+
3+
export default class GuidNodeFileIndexRoute extends Route.extend({}) {
4+
beforeModel() {
5+
return this.replaceWith('guid-node.files.provider', 'osfstorage');
6+
}
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Controller from '@ember/controller';
2+
import { inject as service } from '@ember/service';
3+
import Media from 'ember-responsive';
4+
5+
export default class GuidNodeFilesProvider extends Controller {
6+
@service media!: Media;
7+
8+
get isDesktop() {
9+
return this.media.isDesktop;
10+
}
11+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import Route from '@ember/routing/route';
2+
import { inject as service } from '@ember/service';
3+
import { waitFor } from '@ember/test-waiters';
4+
import { task } from 'ember-concurrency';
5+
import { taskFor } from 'ember-concurrency-ts';
6+
7+
import Intl from 'ember-intl/services/intl';
8+
import Toast from 'ember-toastr/services/toast';
9+
import FileProviderModel from 'ember-osf-web/models/file-provider';
10+
import NodeModel from 'ember-osf-web/models/node';
11+
import { Permission } from 'ember-osf-web/models/osf-model';
12+
import { GuidRouteModel } from 'ember-osf-web/resolve-guid/guid-route';
13+
import CurrentUser from 'ember-osf-web/services/current-user';
14+
import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception';
15+
16+
export default class GuidNodeFilesProviderRoute extends Route.extend({}) {
17+
@service currentUser!: CurrentUser;
18+
@service intl!: Intl;
19+
@service toast!: Toast;
20+
21+
@task
22+
@waitFor
23+
async fileProviderTask(guidRouteModel: GuidRouteModel<NodeModel>, fileProviderId: string) {
24+
const node = await guidRouteModel.taskInstance;
25+
try {
26+
const fileProviders = await node.queryHasMany(
27+
'files',
28+
{
29+
'page[size]': 20,
30+
},
31+
);
32+
const provider = fileProviders.findBy('id', fileProviderId) as FileProviderModel;
33+
const hasWritePermission = node.currentUserPermissions.includes(Permission.Write);
34+
const isViewOnly = Boolean(this.currentUser.viewOnlyToken);
35+
return {provider, fileProviders, node, hasWritePermission, isViewOnly};
36+
} catch (e) {
37+
const errorMessage = this.intl.t(
38+
'osf-components.file-browser.errors.load_file_providers',
39+
);
40+
captureException(e, { errorMessage });
41+
this.toast.error(getApiErrorMessage(e), errorMessage);
42+
return {};
43+
}
44+
}
45+
46+
model(params: { providerId: string }) {
47+
const node = this.modelFor('guid-node');
48+
const fileProviderId = node.guid + ':' + params.providerId;
49+
return {
50+
node,
51+
providerName: params.providerId,
52+
providerTask: taskFor(this.fileProviderTask).perform(node, fileProviderId),
53+
};
54+
}
55+
}

0 commit comments

Comments
 (0)