Skip to content

Commit 8332ca5

Browse files
committed
Merge branch 'release/22.3.0'
2 parents e0b1520 + 51bcf79 commit 8332ca5

File tree

70 files changed

+21
-4545
lines changed

Some content is hidden

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

70 files changed

+21
-4545
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.3.0] - 2022-3-11
8+
### Removed
9+
- Sunset quickfiles
10+
711
## [22.2.0] - 2022-2-22
812
### Changed
913
- Misc bug fixes
@@ -1827,6 +1831,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
18271831
### Added
18281832
- Quick Files
18291833

1834+
[22.3.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.3.0
18301835
[22.2.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.2.0
18311836
[22.1.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/22.1.0
18321837
[21.11.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/21.11.0

app/const/service-links.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ const serviceLinks = {
55
exploreActivity: `${osfUrl}explore/activity/`,
66
meetingsHome: `${osfUrl}meetings/`,
77
myProjects: `${osfUrl}myprojects/`,
8-
myQuickFiles: `${osfUrl}quickfiles/`,
98
osfHome: osfUrl,
109
osfSupport: `${osfUrl}support/`,
1110
preprintsDiscover: `${osfUrl}preprints/discover/`,

app/guid-file/controller.ts

Lines changed: 0 additions & 191 deletions
Original file line numberDiff line numberDiff line change
@@ -1,191 +0,0 @@
1-
import { A } from '@ember/array';
2-
import Controller from '@ember/controller';
3-
import { action, computed } from '@ember/object';
4-
import { alias } from '@ember/object/computed';
5-
import { inject as service } from '@ember/service';
6-
import { waitFor } from '@ember/test-waiters';
7-
import { restartableTask, timeout } from 'ember-concurrency';
8-
import config from 'ember-get-config';
9-
import Intl from 'ember-intl/services/intl';
10-
import Toast from 'ember-toastr/services/toast';
11-
12-
import mimeTypes from 'ember-osf-web/const/mime-types';
13-
import File from 'ember-osf-web/models/file';
14-
import User from 'ember-osf-web/models/user';
15-
import Analytics from 'ember-osf-web/services/analytics';
16-
import CurrentUser from 'ember-osf-web/services/current-user';
17-
import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception';
18-
import pathJoin from 'ember-osf-web/utils/path-join';
19-
import $ from 'jquery';
20-
import mime from 'mime-types';
21-
22-
Object.assign(mime.types, mimeTypes);
23-
24-
const lookupTable: { [k: string]: { [s: string]: string} } = {
25-
edit: {
26-
revision: 'revision',
27-
view: 'view_edit',
28-
},
29-
revision: {
30-
edit: 'edit',
31-
revision: 'view',
32-
view: 'view',
33-
},
34-
view: {
35-
edit: 'view_edit',
36-
revision: 'revision',
37-
},
38-
view_edit: {
39-
edit: 'view',
40-
revision: 'revision',
41-
view: 'edit',
42-
},
43-
};
44-
45-
export default class GuidFile extends Controller {
46-
@service analytics!: Analytics;
47-
@service currentUser!: CurrentUser;
48-
@service intl!: Intl;
49-
@service toast!: Toast;
50-
51-
queryParams = ['show'];
52-
53-
deleteModalOpen = false;
54-
filter = '';
55-
sort = 'name';
56-
revision: null | number = null;
57-
show = 'view';
58-
59-
searchUrl = pathJoin(config.OSF.url, 'search');
60-
61-
@alias('canEdit') canDelete!: boolean;
62-
@alias('model.file') file!: File;
63-
@alias('model.file.links.download') downloadLink!: string;
64-
@alias('model.files') allFiles!: File[];
65-
@alias('model.user') user!: User;
66-
67-
@computed('currentUser.currentUserId', 'user.id')
68-
get canEdit(): boolean {
69-
const modelUserId = this.user.id;
70-
71-
return !!modelUserId && modelUserId === this.currentUser.currentUserId;
72-
}
73-
74-
@computed('revision', 'file.currentVersion')
75-
get mfrVersion(): number {
76-
return this.revision || this.file.currentVersion;
77-
}
78-
79-
// TODO: get this from the model
80-
@computed('downloadLink', 'file.currentVersion')
81-
get fileVersions(): Promise<any> {
82-
return (async () => {
83-
const { data } = await $.getJSON(`${this.downloadLink}?revisions=&`);
84-
return data;
85-
})();
86-
}
87-
88-
@computed('file.name')
89-
get isEditableFile(): boolean {
90-
const filename = this.file.name;
91-
const mimeType = mime.lookup(filename);
92-
return !!mimeType && /^text\//.test(mimeType);
93-
}
94-
95-
@computed('file.currentVersion')
96-
get fileText() {
97-
return Boolean(this.file) && this.file.getContents();
98-
}
99-
100-
@restartableTask
101-
@waitFor
102-
async updateFilter(filter: string) {
103-
await timeout(250);
104-
this.setProperties({ filter });
105-
this.analytics.track('list', 'filter', 'Quick Files - Filter file browser');
106-
}
107-
108-
@computed('allFiles.[]', 'filter', 'sort')
109-
get files() {
110-
let results: File[] = this.allFiles;
111-
112-
if (this.filter) {
113-
const filterLowerCase = this.filter.toLowerCase();
114-
results = results.filter(file => file.name.toLowerCase().includes(filterLowerCase));
115-
}
116-
117-
if (this.sort) {
118-
const reverse = this.sort.slice(0, 1) === '-';
119-
120-
results = A(results).sortBy(this.sort.slice(+reverse));
121-
122-
if (reverse) {
123-
results = results.reverse();
124-
}
125-
}
126-
127-
return results;
128-
}
129-
130-
@action
131-
download(version: number) {
132-
// To do: make this a link that looks like a button rather than calling this
133-
const url = `${this.downloadLink}?revision=${version}`;
134-
window.location.href = url;
135-
}
136-
137-
@action
138-
async delete() {
139-
this.set('deleteModalOpen', false);
140-
141-
try {
142-
await this.file.destroyRecord();
143-
this.transitionToRoute('guid-user.quickfiles', this.user.id);
144-
const message = this.intl.t('file_detail.delete_success');
145-
return this.toast.success(message);
146-
} catch (e) {
147-
const errorMessage = this.intl.t('file_detail.delete_fail');
148-
captureException(e, { errorMessage });
149-
return this.toast.error(getApiErrorMessage(e), errorMessage);
150-
}
151-
}
152-
153-
@action
154-
changeView(button: string) {
155-
const show = lookupTable[this.show][button];
156-
157-
if (show) {
158-
this.set('show', show);
159-
}
160-
}
161-
162-
@action
163-
async save(text: string) {
164-
this.analytics.click('button', 'Quick Files - Save');
165-
166-
try {
167-
await this.file.updateContents(text);
168-
return this.toast.success(this.intl.t('file_detail.save_success'));
169-
} catch (e) {
170-
const errorMessage = this.intl.t('file_detail.save_fail');
171-
captureException(e, { errorMessage });
172-
return this.toast.error(getApiErrorMessage(e), errorMessage);
173-
}
174-
}
175-
176-
@action
177-
async openFile() {
178-
this.set('revision', null);
179-
}
180-
181-
@action
182-
versionChange(version: number) {
183-
this.set('revision', +version);
184-
}
185-
}
186-
187-
declare module '@ember/controller' {
188-
interface Registry {
189-
'guid-file': GuidFile;
190-
}
191-
}

app/guid-file/route.ts

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +0,0 @@
1-
import { action } from '@ember/object';
2-
import Transition from '@ember/routing/-private/transition';
3-
import Route from '@ember/routing/route';
4-
import { inject as service } from '@ember/service';
5-
import { waitFor } from '@ember/test-waiters';
6-
import HeadTagsService from 'ember-cli-meta-tags/services/head-tags';
7-
import { task } from 'ember-concurrency';
8-
import { taskFor } from 'ember-concurrency-ts';
9-
import moment from 'moment';
10-
11-
import GuidFileController from 'ember-osf-web/guid-file/controller';
12-
import File from 'ember-osf-web/models/file';
13-
import Institution from 'ember-osf-web/models/institution';
14-
import User from 'ember-osf-web/models/user';
15-
import Analytics from 'ember-osf-web/services/analytics';
16-
import CurrentUser from 'ember-osf-web/services/current-user';
17-
import MetaTags, { HeadTagDef } from 'ember-osf-web/services/meta-tags';
18-
import Ready from 'ember-osf-web/services/ready';
19-
20-
export default class GuidFile extends Route {
21-
@service analytics!: Analytics;
22-
@service currentUser!: CurrentUser;
23-
@service('head-tags') headTagsService!: HeadTagsService;
24-
@service metaTags!: MetaTags;
25-
@service ready!: Ready;
26-
27-
headTags?: HeadTagDef[];
28-
29-
@task
30-
@waitFor
31-
async setHeadTags(model: any) {
32-
const blocker = this.ready.getBlocker();
33-
const dateCreated = model.file.get('dateCreated');
34-
const dateModified = model.file.get('dateModified');
35-
const institutions = await model.file.get('user').get('institutions');
36-
const metaTagsData = {
37-
title: model.file.get('name'),
38-
identifier: model.file.get('guid'),
39-
publishedDate: dateCreated ? moment(dateCreated).format('YYYY-MM-DD') : undefined,
40-
modifiedDate: dateModified ? moment(dateModified).format('YYYY-MM-DD') : undefined,
41-
institution: institutions.map((institution: Institution) => institution.get('name')),
42-
};
43-
this.set('headTags', this.metaTags.getHeadTags(metaTagsData));
44-
this.headTagsService.collectHeadTags();
45-
blocker.done();
46-
}
47-
48-
async model(params: { guid: string }) {
49-
const { guid } = params;
50-
try {
51-
let file = this.store.peekAll('file').findBy('guid', guid);
52-
if (!file) {
53-
file = await this.store.findRecord('file', guid);
54-
}
55-
const fileId = file.get('id');
56-
const fileUser: User = await file.get('user');
57-
const user: User = await fileUser.reload();
58-
const files: File[] = (await user.loadAll('quickfiles'))
59-
.map((item: File) => {
60-
item.set('isSelected', item.get('id') === fileId);
61-
return item;
62-
});
63-
64-
return {
65-
file,
66-
user,
67-
files,
68-
};
69-
} catch (error) {
70-
this.transitionTo('not-found', guid);
71-
throw error;
72-
}
73-
}
74-
75-
afterModel(model: any) {
76-
taskFor(this.setHeadTags).perform(model);
77-
}
78-
79-
resetController(controller: GuidFileController, isExiting: boolean, transition: Transition) {
80-
if (isExiting && transition.targetName !== 'error') {
81-
controller.set('revision', null);
82-
}
83-
}
84-
85-
@action
86-
didTransition() {
87-
this.analytics.trackPage(true, 'files');
88-
}
89-
}

app/guid-file/styles.scss

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +0,0 @@
1-
@mixin panel {
2-
border: 1px solid transparent;
3-
border-bottom: 1px solid transparent;
4-
border-color: $color-border-gray !important;
5-
box-shadow: 0 1px 1px $color-shadow-light !important;
6-
}
7-
8-
@mixin panel-heading {
9-
background-color: $color-bg-gray-light !important;
10-
border-color: $color-border-gray !important;
11-
color: $color-text-black !important;
12-
justify-content: flex-start;
13-
padding: 7px 10px;
14-
text-align: left;
15-
}
16-
17-
.TitleBar {
18-
display: flex;
19-
justify-content: space-between;
20-
flex-flow: row wrap;
21-
22-
@media(min-width:992px) {
23-
flex-wrap: nowrap;
24-
}
25-
}
26-
27-
.TitleBar__title {
28-
overflow-wrap: break-word;
29-
word-wrap: break-word;
30-
min-width: 10%;
31-
}
32-
33-
.TitleBar__buttons {
34-
margin-left: auto;
35-
flex-shrink: 0;
36-
max-width: 100%;
37-
padding-left: 10px;
38-
}
39-
40-
.TitleBar__version-link {
41-
cursor: pointer;
42-
white-space: nowrap;
43-
font-size: 1em;
44-
font-weight: 300;
45-
line-height: 1em;
46-
padding: 0;
47-
vertical-align: top;
48-
}
49-
50-
.TitleBar__button-label {
51-
pointer-events: none;
52-
}
53-
54-
.Main {
55-
margin-bottom: 5px;
56-
}
57-
58-
.EditPanel {
59-
@include panel;
60-
padding: 0;
61-
}
62-
63-
.EditPanel__heading {
64-
@include panel-heading;
65-
}
66-
67-
.TagsPanel {
68-
@include panel;
69-
}
70-
71-
.TagsPanel__heading {
72-
@include panel-heading;
73-
}
74-
75-
.RevisionsPanel {
76-
@include panel;
77-
78-
a {
79-
cursor: pointer;
80-
}
81-
}
82-
83-
.RevisionsPanel__heading {
84-
@include panel-heading;
85-
}
86-
87-
.RevisionsPanel__table {
88-
margin-bottom: 0;
89-
}

0 commit comments

Comments
 (0)