Skip to content

Commit

Permalink
Merge branch 'release/22.6.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
adlius committed Jun 22, 2022
2 parents 7cea5bc + 2bfb65b commit e2e5e7d
Show file tree
Hide file tree
Showing 151 changed files with 5,645 additions and 565 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [22.6.0] - 2022-6-22
### Added
- Files page redesign phase 2

## [22.5.0] - 2022-5-02
### Changed
- Misc bug fixes
Expand Down Expand Up @@ -1846,6 +1850,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Added
- Quick Files

[22.6.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.6.0
[22.5.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.5.0
[22.4.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.4.0
[22.3.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.3.0
Expand Down
1 change: 1 addition & 0 deletions app/guid-file/-components/file-detail-layout/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

.MainColumn {
flex-grow: 3;
z-index: 1;

h3 {
text-overflow: ellipsis;
Expand Down
7 changes: 7 additions & 0 deletions app/guid-file/controller.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Controller from '@ember/controller';
import { action } from '@ember/object';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { taskFor } from 'ember-concurrency-ts';
Expand All @@ -9,6 +10,7 @@ import Toast from 'ember-toastr/services/toast';
export default class GuidFile extends Controller {
@service media!: Media;
@service toast!: Toast;
@service router!: RouterService;

@tracked revisionsOpened = false;
@tracked tagsOpened = false;
Expand Down Expand Up @@ -76,4 +78,9 @@ export default class GuidFile extends Controller {
}
}
}

@action
onDelete() {
this.router.transitionTo('guid-node.files', this.model.fileModel.target.get('id'));
}
}
57 changes: 55 additions & 2 deletions app/guid-file/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@ import Analytics from 'ember-osf-web/services/analytics';
import MetaTags, { HeadTagDef } from 'ember-osf-web/services/meta-tags';
import Ready from 'ember-osf-web/services/ready';
import OsfStorageFile from 'ember-osf-web/packages/files/osf-storage-file';
import BitbucketFile from 'ember-osf-web/packages/files/bitbucket-file';
import BoxFile from 'ember-osf-web/packages/files/box-file';
import DataverseFile from 'ember-osf-web/packages/files/dataverse-file';
import DropboxFile from 'ember-osf-web/packages/files/dropbox-file';
import FigshareFile from 'ember-osf-web/packages/files/figshare-file';
import GithubFile from 'ember-osf-web/packages/files/github-file';
import GitlabFile from 'ember-osf-web/packages/files/gitlab-file';
import GoogleDriveFile from 'ember-osf-web/packages/files/google-drive-file';
import OneDriveFile from 'ember-osf-web/packages/files/one-drive-file';
import OwnCloudFile from 'ember-osf-web/packages/files/own-cloud-file';
import S3File from 'ember-osf-web/packages/files/s3-file';
import CurrentUserService from 'ember-osf-web/services/current-user';
import RegistrationModel from 'ember-osf-web/models/registration';

Expand Down Expand Up @@ -51,8 +62,50 @@ export default class GuidFile extends Route {
if (target.withdrawn === true) {
this.transitionTo('guid-registration', target.id);
}
const osfStorageFile = new OsfStorageFile(this.currentUser, file);
return osfStorageFile;
const provider = file.provider;
let storageFile;

switch(provider){
case 'osfstorage':
storageFile = new OsfStorageFile(this.currentUser, file);
break;
case 'bitbucket':
storageFile = new BitbucketFile(this.currentUser, file);
break;
case 'box':
storageFile = new BoxFile(this.currentUser, file);
break;
case 'dataverse':
storageFile = new DataverseFile(this.currentUser, file);
break;
case 'dropbox':
storageFile = new DropboxFile(this.currentUser, file);
break;
case 'figshare':
storageFile = new FigshareFile(this.currentUser, file);
break;
case 'github':
storageFile = new GithubFile(this.currentUser, file);
break;
case 'gitlab':
storageFile = new GitlabFile(this.currentUser, file);
break;
case 'googledrive':
storageFile = new GoogleDriveFile(this.currentUser, file);
break;
case 'onedrive':
storageFile = new OneDriveFile(this.currentUser, file);
break;
case 'owncloud':
storageFile = new OwnCloudFile(this.currentUser, file);
break;
case 's3':
storageFile = new S3File(this.currentUser, file);
break;
default:
this.transitionTo('not-found', guid);
}
return storageFile;
} catch (error) {
this.transitionTo('not-found', guid);
throw error;
Expand Down
130 changes: 69 additions & 61 deletions app/guid-file/template.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
({{t 'general.version'}}: {{this.viewedVersion}})
{{/if}}
</h2>
<FileActionsMenu @item={{this.model.fileModel}} />
<FileActionsMenu @item={{this.model}} @onDelete={{this.onDelete}} @allowRename={{false}} />
</div>
</:header>
<:body>
Expand All @@ -33,70 +33,78 @@
</div>
</:body>
<:right>
{{#if this.revisionsOpened}}
<section data-test-revisions-tab local-class='FileDetail__revisions'>
<h2 local-class='FileDetail__right-section-heading'>{{t 'general.revisions'}}</h2>
<ol local-class='FileDetail__revision-list' reversed>
<hr>
{{#if this.model.getRevisions.isRunning}}
<LoadingIndicator @dark={{true}} />
{{else}}
{{#each this.model.waterButlerRevisions as |version|}}
<FileVersion
@version={{version}}
@downloadUrl={{this.model.links.download}}
@changeVersion={{this.changeVersion}}
/>
<hr>
{{#if (or this.model.shouldShowTags this.model.shouldShowRevisions) }}
{{#if this.revisionsOpened}}
<section data-test-revisions-tab local-class='FileDetail__revisions'>
<h2 local-class='FileDetail__right-section-heading'>{{t 'general.revisions'}}</h2>
<ol local-class='FileDetail__revision-list' reversed>
<hr aria-hidden='true'>
{{#if this.model.getRevisions.isRunning}}
<LoadingIndicator @dark={{true}} />
{{else}}
{{t 'file_detail.no_revisions'}}
{{/each}}
{{/if}}
</ol>
</section>
{{/if}}
{{#if this.tagsOpened}}
<div local-class='RightContainer'>
<h2>{{t 'general.tags'}}</h2>
<TagsWidget
@taggable={{this.model.fileModel}}
@readOnly={{not this.model.userCanEditMetadata}}
@inline={{true}}
/>
</div>
{{#each this.model.waterButlerRevisions as |version|}}
<FileVersion
@version={{version}}
@downloadUrl={{this.model.links.download}}
@changeVersion={{this.changeVersion}}
/>
<hr aria-hidden='true'>
{{else}}
{{t 'file_detail.no_revisions'}}
{{/each}}
{{/if}}
</ol>
</section>
{{/if}}
{{#if this.tagsOpened}}
<div local-class='RightContainer'>
<h2>{{t 'general.tags'}}</h2>
<TagsWidget
@taggable={{this.model.fileModel}}
@readOnly={{not this.model.userCanEditMetadata}}
@inline={{true}}
/>
</div>
{{/if}}
{{/if}}
</:right>
<:rightButtons>
{{#if this.media.isMobile}}
<BsButton
data-test-file-renderer-button
data-analytics-name='File renderer button'
local-class='SlideButtons {{if this.rightColumnClosed 'Active'}}'
@size='lg'
@onClick={{this.toggleFileRenderer}}
>
<FaIcon @icon='file-alt' @fixedWidth={{true}}/>
</BsButton>
{{#if (or this.model.shouldShowTags this.model.shouldShowRevisions) }}
{{#if this.media.isMobile}}
<BsButton
data-test-file-renderer-button
data-analytics-name='File renderer button'
local-class='SlideButtons {{if this.rightColumnClosed 'Active'}}'
@size='lg'
@onClick={{this.toggleFileRenderer}}
>
<FaIcon @icon='file-alt' @fixedWidth={{true}}/>
</BsButton>
{{/if}}
{{#if this.model.shouldShowRevisions}}
<BsButton
aria-label={{if this.revisionsOpened (t 'file_detail.close_revisions') (t 'file_detail.view_revisions')}}
data-test-versions-button
data-analytics-name='Versions button'
local-class='SlideButtons {{if this.revisionsOpened 'Active'}}'
@size='lg'
@onClick={{this.toggleRevisions}}
>
<FaIcon @icon='history' @fixedWidth={{true}}/>
</BsButton>
{{/if}}
{{#if this.model.shouldShowTags}}
<BsButton
aria-label={{if this.tagsOpened (t 'file_detail.close_tags') (t 'file_detail.view_tags')}}
data-test-tags-button
data-analytics-name='Tags button'
local-class='SlideButtons {{if this.tagsOpened 'Active'}}'
@size='lg'
@onClick={{this.toggleTags}}
>
<FaIcon @icon='tags' @fixedWidth={{true}}/>
</BsButton>
{{/if}}
{{/if}}
<BsButton
aria-label={{if this.revisionsOpened (t 'file_detail.close_revisions') (t 'file_detail.view_revisions')}}
data-test-versions-button
data-analytics-name='Versions button'
local-class='SlideButtons {{if this.revisionsOpened 'Active'}}'
@size='lg'
@onClick={{this.toggleRevisions}}
>
<FaIcon @icon='history' @fixedWidth={{true}}/>
</BsButton>
<BsButton
aria-label={{if this.tagsOpened (t 'file_detail.close_tags') (t 'file_detail.view_tags')}}
data-test-tags-button
data-analytics-name='Tags button'
local-class='SlideButtons {{if this.tagsOpened 'Active'}}'
@size='lg'
@onClick={{this.toggleTags}}
>
<FaIcon @icon='tags' @fixedWidth={{true}}/>
</BsButton>
</:rightButtons>
</GuidFile::-Components::FileDetailLayout>
12 changes: 12 additions & 0 deletions app/guid-node/controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import Controller from '@ember/controller';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';


export default class GuidNode extends Controller {
@service router!: RouterService;

get shouldHideNodeNavbar() {
return this.router.currentRouteName === 'guid-node.files.provider';
}
}
7 changes: 7 additions & 0 deletions app/guid-node/files/index/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Route from '@ember/routing/route';

export default class GuidNodeFileIndexRoute extends Route.extend({}) {
beforeModel() {
return this.replaceWith('guid-node.files.provider', 'osfstorage');
}
}
11 changes: 11 additions & 0 deletions app/guid-node/files/provider/controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import Media from 'ember-responsive';

export default class GuidNodeFilesProvider extends Controller {
@service media!: Media;

get isDesktop() {
return this.media.isDesktop;
}
}
55 changes: 55 additions & 0 deletions app/guid-node/files/provider/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { waitFor } from '@ember/test-waiters';
import { task } from 'ember-concurrency';
import { taskFor } from 'ember-concurrency-ts';

import Intl from 'ember-intl/services/intl';
import Toast from 'ember-toastr/services/toast';
import FileProviderModel from 'ember-osf-web/models/file-provider';
import NodeModel from 'ember-osf-web/models/node';
import { Permission } from 'ember-osf-web/models/osf-model';
import { GuidRouteModel } from 'ember-osf-web/resolve-guid/guid-route';
import CurrentUser from 'ember-osf-web/services/current-user';
import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception';

export default class GuidNodeFilesProviderRoute extends Route.extend({}) {
@service currentUser!: CurrentUser;
@service intl!: Intl;
@service toast!: Toast;

@task
@waitFor
async fileProviderTask(guidRouteModel: GuidRouteModel<NodeModel>, fileProviderId: string) {
const node = await guidRouteModel.taskInstance;
try {
const fileProviders = await node.queryHasMany(
'files',
{
'page[size]': 20,
},
);
const provider = fileProviders.findBy('id', fileProviderId) as FileProviderModel;
const hasWritePermission = node.currentUserPermissions.includes(Permission.Write);
const isViewOnly = Boolean(this.currentUser.viewOnlyToken);
return {provider, fileProviders, node, hasWritePermission, isViewOnly};
} catch (e) {
const errorMessage = this.intl.t(
'osf-components.file-browser.errors.load_file_providers',
);
captureException(e, { errorMessage });
this.toast.error(getApiErrorMessage(e), errorMessage);
return {};
}
}

model(params: { providerId: string }) {
const node = this.modelFor('guid-node');
const fileProviderId = node.guid + ':' + params.providerId;
return {
node,
providerName: params.providerId,
providerTask: taskFor(this.fileProviderTask).perform(node, fileProviderId),
};
}
}
Loading

0 comments on commit e2e5e7d

Please # to comment.