From 0ef515768dc180c5692aaaa71b0150663483a405 Mon Sep 17 00:00:00 2001
From: Ashley Robinson <82047646+chth0n1x@users.noreply.github.com>
Date: Wed, 11 Oct 2023 09:54:56 -0400
Subject: [PATCH 01/16] [ENG-4091] Linked Projects Modal Close Button (#2018)
## Purpose
The purpose of these changes is to make the header 'x' close button and the footer 'Close' button both display on the OsfDialog modal when turning mobile view horizontally.
---
lib/osf-components/addon/components/osf-dialog/styles.scss | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/osf-components/addon/components/osf-dialog/styles.scss b/lib/osf-components/addon/components/osf-dialog/styles.scss
index 3bc064887f..bd6ad0cbb2 100644
--- a/lib/osf-components/addon/components/osf-dialog/styles.scss
+++ b/lib/osf-components/addon/components/osf-dialog/styles.scss
@@ -5,13 +5,13 @@
left: 0;
right: 0;
- padding-bottom: 10vh;
+ padding: 2rem 0 10vh;
display: flex;
align-items: center;
justify-content: center;
- z-index: 900;
+ z-index: 1100;
background-color: rgba(0, 0, 0, 0.5);
}
From 0b8834102a0d84d3fd2b08dab8900ef7361dee49 Mon Sep 17 00:00:00 2001
From: Ashley Robinson <82047646+chth0n1x@users.noreply.github.com>
Date: Fri, 13 Oct 2023 14:04:36 -0400
Subject: [PATCH 02/16] [ENG-4077] Fix accessing component's registration
(#2001)
Purpose
The purpose of these changes is to fix accessing a component's registration from the component's project registrations page.
---
app/resolve-guid/guid-route.ts | 1 +
tests/engines/registries/acceptance/overview/overview-test.ts | 1 +
2 files changed, 2 insertions(+)
diff --git a/app/resolve-guid/guid-route.ts b/app/resolve-guid/guid-route.ts
index 9ddbd37f09..347dfd6cc9 100644
--- a/app/resolve-guid/guid-route.ts
+++ b/app/resolve-guid/guid-route.ts
@@ -30,6 +30,7 @@ export default abstract class GuidRoute extends Route {
model = await this.store.findRecord(this.modelName(), guid, {
include: this.include(),
adapterOptions: this.adapterOptions(),
+ reload: true,
});
} catch (e) {
// To do custom error handling, add an error() action to the route that subclasses GuidRoute.
diff --git a/tests/engines/registries/acceptance/overview/overview-test.ts b/tests/engines/registries/acceptance/overview/overview-test.ts
index 4d7612672d..04904ddc5d 100644
--- a/tests/engines/registries/acceptance/overview/overview-test.ts
+++ b/tests/engines/registries/acceptance/overview/overview-test.ts
@@ -156,6 +156,7 @@ module('Registries | Acceptance | overview.overview', hooks => {
reg.update({ currentUserPermissions: [Permission.Write, Permission.Read] });
await visit(`/${reg.id}/`);
+ await click('[data-test-edit-button="tags"]');
assert.dom('[data-test-tags-widget-tag-input="edit"] input').isVisible();
reg.update({ currentUserPermissions: [Permission.Read] });
From a9b403d4865d4ad68b0cc2863ed7e1f7a47a9240 Mon Sep 17 00:00:00 2001
From: futa-ikeda <51409893+futa-ikeda@users.noreply.github.com>
Date: Tue, 17 Oct 2023 16:11:39 -0400
Subject: [PATCH 03/16] Use provider favicon for preprint discover page (#2032)
---
app/preprints/discover/route.ts | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/app/preprints/discover/route.ts b/app/preprints/discover/route.ts
index 09ff0225c5..ff32962c08 100644
--- a/app/preprints/discover/route.ts
+++ b/app/preprints/discover/route.ts
@@ -3,13 +3,17 @@ import Route from '@ember/routing/route';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';
import config from 'ember-osf-web/config/environment';
+import PreprintProviderModel from 'ember-osf-web/models/preprint-provider';
+import MetaTags, { HeadTagDef } from 'ember-osf-web/services/meta-tags';
import Theme from 'ember-osf-web/services/theme';
export default class PreprintDiscoverRoute extends Route {
@service store!: Store;
@service theme!: Theme;
@service router!: RouterService;
+ @service metaTags!: MetaTags;
+ headTags?: HeadTagDef[];
buildRouteInfoMetadata() {
return {
@@ -36,6 +40,20 @@ export default class PreprintDiscoverRoute extends Route {
}
}
+ // TODO: Move this to app/preprints/index/route.ts when landing page PR is merged
+ afterModel(model: PreprintProviderModel) {
+ if (model && model.assets && model.assets.favicon) {
+ const headTags = [{
+ type: 'link',
+ attrs: {
+ rel: 'icon',
+ href: model.assets.favicon,
+ },
+ }];
+ this.set('headTags', headTags);
+ }
+ }
+
deactivate() {
this.theme.reset();
}
From bfb3f1279f3dc1e954a8de9a0322ed54a98cb66e Mon Sep 17 00:00:00 2001
From: futa-ikeda <51409893+futa-ikeda@users.noreply.github.com>
Date: Fri, 20 Oct 2023 15:12:07 -0400
Subject: [PATCH 04/16] [ENG-4760] User secondary metadata (#2031)
* Add preprint relation to users
* Update result card for user info
* Group dt and dl a little closer
* CR feedback; Refactor secondary metatadata components
* CR feedback; Add test selector
* Better refactor
* Remove leftover arg
---
app/models/index-card.ts | 51 ++++++++++++++++++-
app/models/search-result.ts | 6 ++-
app/models/user.ts | 4 ++
.../addon/components/search-page/template.hbs | 2 +-
.../search-result-card/component.ts | 29 +++++++++--
.../preprint-secondary-metadata/template.hbs | 1 -
.../project-secondary-metadata/template.hbs | 2 +-
.../components/search-result-card/styles.scss | 7 ++-
.../search-result-card/template.hbs | 42 ++++++++-------
.../user-secondary-metadata/component.ts | 43 ++++++++++++++++
.../user-secondary-metadata/template.hbs | 24 +++++++++
.../user-secondary-metadata/component.js | 1 +
.../user-secondary-metadata/template.js | 1 +
mirage/serializers/user.ts | 8 +++
translations/en-us.yml | 7 +++
15 files changed, 194 insertions(+), 34 deletions(-)
create mode 100644 lib/osf-components/addon/components/search-result-card/user-secondary-metadata/component.ts
create mode 100644 lib/osf-components/addon/components/search-result-card/user-secondary-metadata/template.hbs
create mode 100644 lib/osf-components/app/components/search-result-card/user-secondary-metadata/component.js
create mode 100644 lib/osf-components/app/components/search-result-card/user-secondary-metadata/template.js
diff --git a/app/models/index-card.ts b/app/models/index-card.ts
index 15b179cd90..3f64d81888 100644
--- a/app/models/index-card.ts
+++ b/app/models/index-card.ts
@@ -1,9 +1,15 @@
+import { getOwner } from '@ember/application';
import { inject as service } from '@ember/service';
+import { waitFor } from '@ember/test-waiters';
import Model, { AsyncHasMany, attr, hasMany } from '@ember-data/model';
+import { dropTask } from 'ember-concurrency';
import IntlService from 'ember-intl/services/intl';
import GetLocalizedPropertyHelper from 'ember-osf-web/helpers/get-localized-property';
-import { getOwner } from '@ember/application';
+import config from 'ember-osf-web/config/environment';
+import OsfModel from 'ember-osf-web/models/osf-model';
+import { tracked } from 'tracked-built-ins';
+const osfUrl = config.OSF.url;
export interface LanguageText {
'@language': string;
@@ -23,10 +29,28 @@ export default class IndexCardModel extends Model {
getLocalizedString = new GetLocalizedPropertyHelper(getOwner(this));
+ @tracked osfModel?: OsfModel;
+
get resourceId() {
return this.resourceIdentifier[0];
}
+ get osfModelType() {
+ const types = this.resourceMetadata.resourceType.map( (item: any) => item['@id']);
+ if (types.includes('Project') || types.includes('ProjectComponent')) {
+ return 'node';
+ } else if (types.includes('Registration') || types.includes('RegistrationComponent')) {
+ return 'registration';
+ } else if (types.includes('Preprint')) {
+ return 'preprint';
+ } else if (types.includes('Person') || types.includes('Agent')) {
+ return 'user';
+ } else if(types.includes('File')) {
+ return 'file';
+ }
+ return null;
+ }
+
get label() {
const possibleLabelKeys = ['displayLabel', 'name', 'title'];
for (const key of possibleLabelKeys) {
@@ -44,6 +68,31 @@ export default class IndexCardModel extends Model {
}
return '';
}
+
+ @dropTask
+ @waitFor
+ async getOsfModel(options?: object) {
+ const identifier = this.resourceIdentifier;
+ if (identifier && this.osfModelType) {
+ const guid = this.guidFromIdentifierList(identifier);
+ if (guid) {
+ const osfModel = await this.store.findRecord(this.osfModelType, guid, options);
+ this.osfModel = osfModel;
+ }
+ }
+ }
+
+ guidFromIdentifierList() {
+ for (const iri of this.resourceIdentifier) {
+ if (iri && iri.startsWith(osfUrl)) {
+ const pathSegments = iri.slice(osfUrl.length).split('/').filter(Boolean);
+ if (pathSegments.length === 1) {
+ return pathSegments[0]; // one path segment; looks like osf-id
+ }
+ }
+ }
+ return null;
+ }
}
declare module 'ember-data/types/registries/model' {
diff --git a/app/models/search-result.ts b/app/models/search-result.ts
index d3a5fa9412..c21c51f1a5 100644
--- a/app/models/search-result.ts
+++ b/app/models/search-result.ts
@@ -73,11 +73,15 @@ export default class SearchResultModel extends Model {
return this.resourceMetadata['@id'];
}
+ // returns list of affilated institutions for users
// returns list of contributors for osf objects
// returns list of affiliated institutions for osf users
get affiliatedEntities() {
if (this.resourceType === 'user') {
- // return something
+ if (this.resourceMetadata.affiliation) {
+ return this.resourceMetadata.affiliation.map((item: any) =>
+ ({ name: item.name[0]['@value'], absoluteUrl: item['@id'] }));
+ }
} else if (this.resourceMetadata.creator) {
return this.resourceMetadata.creator?.map((item: any) =>
({ name: item.name[0]['@value'], absoluteUrl: item['@id'] }));
diff --git a/app/models/user.ts b/app/models/user.ts
index 1c7e2f945f..b02912bacf 100644
--- a/app/models/user.ts
+++ b/app/models/user.ts
@@ -4,6 +4,7 @@ import { buildValidations, validator } from 'ember-cp-validations';
import config from 'ember-osf-web/config/environment';
import { Link } from 'jsonapi-typescript';
+import PreprintModel from 'ember-osf-web/models/preprint';
import SparseNodeModel from 'ember-osf-web/models/sparse-node';
import ContributorModel from './contributor';
import DraftRegistrationModel from './draft-registration';
@@ -114,6 +115,9 @@ export default class UserModel extends OsfModel.extend(Validations) {
@hasMany('draft-registration')
draftRegistrations!: AsyncHasMany;
+ @hasMany('preprint')
+ preprints!: AsyncHasMany;
+
@hasMany('institution', { inverse: 'users' })
institutions!: AsyncHasMany;
diff --git a/lib/osf-components/addon/components/search-page/template.hbs b/lib/osf-components/addon/components/search-page/template.hbs
index 047377bbdb..1c69cadb32 100644
--- a/lib/osf-components/addon/components/search-page/template.hbs
+++ b/lib/osf-components/addon/components/search-page/template.hbs
@@ -230,7 +230,7 @@ as |layout|>
{{else}}
-
{{t 'search.no-results'}}
+
{{t 'search.no-results'}}
{{/each}}
{{/if}}
diff --git a/lib/osf-components/addon/components/search-result-card/component.ts b/lib/osf-components/addon/components/search-result-card/component.ts
index d487ff36a0..a0af4a4941 100644
--- a/lib/osf-components/addon/components/search-result-card/component.ts
+++ b/lib/osf-components/addon/components/search-result-card/component.ts
@@ -1,17 +1,23 @@
import { action } from '@ember/object';
+import { inject as service } from '@ember/service';
+import Store from '@ember-data/store';
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
-import SearchResultModel from 'ember-osf-web/models/search-result';
-import { inject as service } from '@ember/service';
import Intl from 'ember-intl/services/intl';
+import SearchResultModel from 'ember-osf-web/models/search-result';
+import UserModel from 'ember-osf-web/models/user';
+
interface Args {
result: SearchResultModel;
}
export default class SearchResultCard extends Component {
@service intl!: Intl;
+ @service store!: Store;
+
@tracked isOpenSecondaryMetadata = false;
+ @tracked osfUser?: UserModel;
@action
toggleSecondaryMetadata() {
@@ -22,10 +28,23 @@ export default class SearchResultCard extends Component {
return this.intl.t(`osf-components.search-result-card.${this.args.result.resourceType}`);
}
- // not sure if this is the best way, as there was a resourceType of "unknown" out in the wild
get secondaryMetadataComponent() {
const { resourceType } = this.args.result;
-
- return `search-result-card/${resourceType.replace('_component', '')}-secondary-metadata`;
+ switch (resourceType) {
+ case 'project':
+ case 'project_component':
+ return 'search-result-card/project-secondary-metadata';
+ case 'registration':
+ case 'registration_component':
+ return 'search-result-card/registration-secondary-metadata';
+ case 'preprint':
+ return 'search-result-card/preprint-secondary-metadata';
+ case 'file':
+ return 'search-result-card/file-secondary-metadata';
+ case 'user':
+ return 'search-result-card/user-secondary-metadata';
+ default:
+ return null;
+ }
}
}
diff --git a/lib/osf-components/addon/components/search-result-card/preprint-secondary-metadata/template.hbs b/lib/osf-components/addon/components/search-result-card/preprint-secondary-metadata/template.hbs
index 5ed73f65c5..d67af09a99 100644
--- a/lib/osf-components/addon/components/search-result-card/preprint-secondary-metadata/template.hbs
+++ b/lib/osf-components/addon/components/search-result-card/preprint-secondary-metadata/template.hbs
@@ -90,4 +90,3 @@
{{/if}}
-
diff --git a/lib/osf-components/addon/components/search-result-card/project-secondary-metadata/template.hbs b/lib/osf-components/addon/components/search-result-card/project-secondary-metadata/template.hbs
index 87a2d0a1b6..f0b2958906 100644
--- a/lib/osf-components/addon/components/search-result-card/project-secondary-metadata/template.hbs
+++ b/lib/osf-components/addon/components/search-result-card/project-secondary-metadata/template.hbs
@@ -57,4 +57,4 @@
{{/if}}
-
\ No newline at end of file
+
diff --git a/lib/osf-components/addon/components/search-result-card/styles.scss b/lib/osf-components/addon/components/search-result-card/styles.scss
index 2a53b47ab8..8787c6c567 100644
--- a/lib/osf-components/addon/components/search-result-card/styles.scss
+++ b/lib/osf-components/addon/components/search-result-card/styles.scss
@@ -80,8 +80,11 @@
padding-top: 10px;
}
- dt,
- dd {
+ dt {
margin: 15px 0 0 5px;
}
+
+ dd {
+ margin-left: 5px;
+ }
}
diff --git a/lib/osf-components/addon/components/search-result-card/template.hbs b/lib/osf-components/addon/components/search-result-card/template.hbs
index ea6ba3e1f9..65911c42eb 100644
--- a/lib/osf-components/addon/components/search-result-card/template.hbs
+++ b/lib/osf-components/addon/components/search-result-card/template.hbs
@@ -5,27 +5,25 @@
{{this.cardTypeLabel}}
- {{#if (not-eq @result.resourceType 'user')}}
-
- {{/if}}
+
{{@result.displayTitle}}
@@ -104,4 +102,4 @@
{{/let}}
-
\ No newline at end of file
+
diff --git a/lib/osf-components/addon/components/search-result-card/user-secondary-metadata/component.ts b/lib/osf-components/addon/components/search-result-card/user-secondary-metadata/component.ts
new file mode 100644
index 0000000000..b03c0a09f3
--- /dev/null
+++ b/lib/osf-components/addon/components/search-result-card/user-secondary-metadata/component.ts
@@ -0,0 +1,43 @@
+import { inject as service } from '@ember/service';
+import Store from '@ember-data/store';
+import Component from '@glimmer/component';
+import Intl from 'ember-intl/services/intl';
+import { taskFor } from 'ember-concurrency-ts';
+
+import SearchResultModel from 'ember-osf-web/models/search-result';
+import UserModel from 'ember-osf-web/models/user';
+import { alias } from '@ember/object/computed';
+import { task } from 'ember-concurrency';
+import { waitFor } from '@ember/test-waiters';
+
+interface Args {
+ result: SearchResultModel;
+}
+
+export default class UserSecondaryMetadata extends Component {
+ @service intl!: Intl;
+ @service store!: Store;
+
+ @alias('args.result.indexCard.osfModel') user?: UserModel;
+
+ constructor(owner: unknown, args: Args) {
+ super(owner, args);
+ if (!this.user) {
+ taskFor(this.getOsfUserModel).perform();
+ }
+ }
+
+ @task
+ @waitFor
+ async getOsfUserModel() {
+ const options = {
+ adapterOptions: {
+ query: {
+ related_counts: 'nodes,registrations,preprints',
+ },
+ },
+ reload: true,
+ };
+ await taskFor(this.args.result.indexCard.get('getOsfModel')).perform(options);
+ }
+}
diff --git a/lib/osf-components/addon/components/search-result-card/user-secondary-metadata/template.hbs b/lib/osf-components/addon/components/search-result-card/user-secondary-metadata/template.hbs
new file mode 100644
index 0000000000..3b29069da0
--- /dev/null
+++ b/lib/osf-components/addon/components/search-result-card/user-secondary-metadata/template.hbs
@@ -0,0 +1,24 @@
+{{#if this.getOsfUserModel.isRunning}}
+
+{{else if this.getOsfUserModel.isError}}
+ {{t 'osf-components.search-result-card.fetch_user_error'}}
+{{else if (not this.user)}}
+ {{t 'osf-components.search-result-card.no_user'}}
+{{else}}
+
+ {{#if this.user.employment.length}}
+ - {{t 'osf-components.search-result-card.employment'}}
+ - {{this.user.employment.[0].institution}}
+ {{/if}}
+ {{#if this.user.education.length}}
+ - {{t 'osf-components.search-result-card.education'}}
+ - {{this.user.education.[0].institution}}
+ {{/if}}
+ - {{t 'osf-components.search-result-card.public_projects'}}
+ - {{this.user.relatedCounts.nodes}}
+ - {{t 'osf-components.search-result-card.public_registrations'}}
+ - {{this.user.relatedCounts.registrations}}
+ - {{t 'osf-components.search-result-card.public_preprints'}}
+ - {{this.user.relatedCounts.preprints}}
+
+{{/if}}
diff --git a/lib/osf-components/app/components/search-result-card/user-secondary-metadata/component.js b/lib/osf-components/app/components/search-result-card/user-secondary-metadata/component.js
new file mode 100644
index 0000000000..ba01e369bd
--- /dev/null
+++ b/lib/osf-components/app/components/search-result-card/user-secondary-metadata/component.js
@@ -0,0 +1 @@
+export { default } from 'osf-components/components/search-result-card/user-secondary-metadata/component';
diff --git a/lib/osf-components/app/components/search-result-card/user-secondary-metadata/template.js b/lib/osf-components/app/components/search-result-card/user-secondary-metadata/template.js
new file mode 100644
index 0000000000..342377bcb9
--- /dev/null
+++ b/lib/osf-components/app/components/search-result-card/user-secondary-metadata/template.js
@@ -0,0 +1 @@
+export { default } from 'osf-components/components/search-result-card/user-secondary-metadata/template';
diff --git a/mirage/serializers/user.ts b/mirage/serializers/user.ts
index 4036c9df06..fef5af248b 100644
--- a/mirage/serializers/user.ts
+++ b/mirage/serializers/user.ts
@@ -58,6 +58,14 @@ export default class UserSerializer extends ApplicationSerializer {
},
},
},
+ preprints: {
+ links: {
+ related: {
+ href: `${apiUrl}/v2/users/${model.id}/preprints/`,
+ meta: this.buildRelatedLinkMeta(model, 'preprints'),
+ },
+ },
+ },
};
if (model.defaultRegion) {
serializedRelationships.defaultRegion = {
diff --git a/translations/en-us.yml b/translations/en-us.yml
index 99c02c3ec7..d6a4b1533e 100644
--- a/translations/en-us.yml
+++ b/translations/en-us.yml
@@ -1896,6 +1896,13 @@ osf-components:
withdrawn: Withdrawn
unknown: Unknown
remaining_count: '{count} more'
+ fetch_user_error: 'Unable to fetch user information from OSF'
+ no_user: 'No user'
+ employment: Employment
+ education: Education
+ public_projects: Public projects
+ public_registrations: Public registrations
+ public_preprints: Public preprints
resources-list:
add_instructions: 'Link a DOI from a repository to your registration by clicking the green “+” button.'
add_instructions_adhere: 'Contributors affirmed to adhere to the criteria for each badge.'
From 22d60ef2ec8436cf768774e41e02c7108f6d1bcb Mon Sep 17 00:00:00 2001
From: Abram Booth
Date: Fri, 13 Oct 2023 14:02:13 -0400
Subject: [PATCH 05/16] feature: include creator.name in free-text search
---
lib/osf-components/addon/components/search-page/component.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/osf-components/addon/components/search-page/component.ts b/lib/osf-components/addon/components/search-page/component.ts
index 8049184081..baa4c46be0 100644
--- a/lib/osf-components/addon/components/search-page/component.ts
+++ b/lib/osf-components/addon/components/search-page/component.ts
@@ -240,7 +240,7 @@ export default class SearchPage extends Component {
}
this.filterQueryObject = filterQueryObject;
const searchResult = await this.store.queryRecord('index-card-search', {
- cardSearchText,
+ 'cardSearchText[*,creator.name]': cardSearchText,
'page[cursor]': page,
sort,
cardSearchFilter: filterQueryObject,
From 32135eae5e9c155ef6ec7959f5232ba6ee02a750 Mon Sep 17 00:00:00 2001
From: Abram Booth
Date: Fri, 13 Oct 2023 14:02:45 -0400
Subject: [PATCH 06/16] fix: skip showing "top" values for creator facet
---
.../search-page/filter-facet/component.ts | 25 +++++++++++++++----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/lib/osf-components/addon/components/search-page/filter-facet/component.ts b/lib/osf-components/addon/components/search-page/filter-facet/component.ts
index 3367e679bc..18a0070c4f 100644
--- a/lib/osf-components/addon/components/search-page/filter-facet/component.ts
+++ b/lib/osf-components/addon/components/search-page/filter-facet/component.ts
@@ -48,12 +48,21 @@ export default class FilterFacet extends Component {
@tracked hasMoreValueOptions = false;
@tracked nextPageCursor = '';
+ get shouldShowTopValues() {
+ const { args: { property: { propertyPathKey } } } = this;
+ return propertyPathKey !== 'creator';
+ }
+
@action
toggleFacet() {
- if (this.filterableValues.length === 0 && !taskFor(this.fetchFacetValues).lastComplete) {
- taskFor(this.fetchFacetValues).perform();
+ if (this.shouldShowTopValues) {
+ if (this.filterableValues.length === 0 && !taskFor(this.fetchFacetValues).lastComplete) {
+ taskFor(this.fetchFacetValues).perform();
+ }
+ this.collapsed = !this.collapsed;
+ } else {
+ this.openSeeMoreModal();
}
- this.collapsed = !this.collapsed;
}
@action
@@ -105,8 +114,14 @@ export default class FilterFacet extends Component {
@waitFor
async fetchFacetValues() {
const { cardSearchText, cardSearchFilter, property } = this.args;
- const { page, sort, filterString } = this;
-
+ const { page, sort, filterString, shouldShowTopValues } = this;
+ if (!shouldShowTopValues && !filterString.trim()) {
+ this.filterableValues = [];
+ this.modalValueOptions = [];
+ this.hasMoreValueOptions = false;
+ this.nextPageCursor = '';
+ return; // skip fetching
+ }
const valueSearch = await this.store.queryRecord('index-value-search', {
cardSearchText,
cardSearchFilter,
From 375569109902623e8a7ef19475ace9721cc66a4c Mon Sep 17 00:00:00 2001
From: Abram Booth
Date: Fri, 13 Oct 2023 15:36:55 -0400
Subject: [PATCH 07/16] fix: z-index shenaningans
the contents of an ember-basic-dropdown have `z-index: 1000`,
while an osf-dialog had `z-index: 1100` -- when a dropdown is inside a
dialog, this is a problem (the dropdown is hidden behind the dialog)
however, osf-dialog should be in front of the branded navbar, which has
`z-index: 999` -- this fix bumps branded-navbar down to `998` and
osf-dialog down to `999`, both safely behind the dropdown at `1000`.
---
lib/app-components/addon/components/branded-navbar/styles.scss | 2 +-
lib/osf-components/addon/components/osf-dialog/styles.scss | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/app-components/addon/components/branded-navbar/styles.scss b/lib/app-components/addon/components/branded-navbar/styles.scss
index f67cc0a743..e14d214d3d 100644
--- a/lib/app-components/addon/components/branded-navbar/styles.scss
+++ b/lib/app-components/addon/components/branded-navbar/styles.scss
@@ -2,7 +2,7 @@
.branded-nav-wrapper {
.branded-nav {
- z-index: 999;
+ z-index: 998;
}
:global(.navbar) {
diff --git a/lib/osf-components/addon/components/osf-dialog/styles.scss b/lib/osf-components/addon/components/osf-dialog/styles.scss
index bd6ad0cbb2..aad404cf2b 100644
--- a/lib/osf-components/addon/components/osf-dialog/styles.scss
+++ b/lib/osf-components/addon/components/osf-dialog/styles.scss
@@ -11,7 +11,7 @@
align-items: center;
justify-content: center;
- z-index: 1100;
+ z-index: 999;
background-color: rgba(0, 0, 0, 0.5);
}
From 84f1598d3ac4c84254639541f94b08f8f1412409 Mon Sep 17 00:00:00 2001
From: Abram Booth
Date: Wed, 18 Oct 2023 10:54:39 -0400
Subject: [PATCH 08/16] feature: include isContainedBy.creator.name in
free-text search
---
lib/osf-components/addon/components/search-page/component.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/osf-components/addon/components/search-page/component.ts b/lib/osf-components/addon/components/search-page/component.ts
index baa4c46be0..521573d109 100644
--- a/lib/osf-components/addon/components/search-page/component.ts
+++ b/lib/osf-components/addon/components/search-page/component.ts
@@ -240,7 +240,7 @@ export default class SearchPage extends Component {
}
this.filterQueryObject = filterQueryObject;
const searchResult = await this.store.queryRecord('index-card-search', {
- 'cardSearchText[*,creator.name]': cardSearchText,
+ 'cardSearchText[*,creator.name,isContainedBy.creator.name]': cardSearchText,
'page[cursor]': page,
sort,
cardSearchFilter: filterQueryObject,
From f4fb63854ecc60dfb8eb5cda08ea80e4843d0ce1 Mon Sep 17 00:00:00 2001
From: Abram Booth
Date: Thu, 19 Oct 2023 11:07:54 -0400
Subject: [PATCH 09/16] feature: display affiliations in the creator facet
---
.../search-page/filter-facet/template.hbs | 3 ++-
.../filter-facet/value-option/component.ts | 17 +++++++++++++++++
.../filter-facet/value-option/styles.scss | 8 ++++++++
.../filter-facet/value-option/template.hbs | 6 ++++++
.../filter-facet/value-option/component.js | 1 +
.../filter-facet/value-option/template.js | 2 ++
6 files changed, 36 insertions(+), 1 deletion(-)
create mode 100644 lib/osf-components/addon/components/search-page/filter-facet/value-option/component.ts
create mode 100644 lib/osf-components/addon/components/search-page/filter-facet/value-option/styles.scss
create mode 100644 lib/osf-components/addon/components/search-page/filter-facet/value-option/template.hbs
create mode 100644 lib/osf-components/app/components/search-page/filter-facet/value-option/component.js
create mode 100644 lib/osf-components/app/components/search-page/filter-facet/value-option/template.js
diff --git a/lib/osf-components/addon/components/search-page/filter-facet/template.hbs b/lib/osf-components/addon/components/search-page/filter-facet/template.hbs
index 45c6ffa6c4..b146fa39a9 100644
--- a/lib/osf-components/addon/components/search-page/filter-facet/template.hbs
+++ b/lib/osf-components/addon/components/search-page/filter-facet/template.hbs
@@ -86,9 +86,10 @@
@search={{perform this.debouncedValueSearch}}
@onChange={{action this.updateSelectedProperty}}
@afterOptionsComponent={{component 'search-page/filter-facet/after-options' fetchValues=(perform this.loadMoreValues) hasMoreValues=this.hasMoreValueOptions}}
+ @selectedItemComponent={{component 'search-page/filter-facet/value-option' isSelected=true}}
as |property|
>
- {{property.indexCard.label}} ({{property.cardSearchResultCount}})
+
diff --git a/lib/osf-components/addon/components/search-page/filter-facet/value-option/component.ts b/lib/osf-components/addon/components/search-page/filter-facet/value-option/component.ts
new file mode 100644
index 0000000000..fab5e16e33
--- /dev/null
+++ b/lib/osf-components/addon/components/search-page/filter-facet/value-option/component.ts
@@ -0,0 +1,17 @@
+import Component from '@glimmer/component';
+
+import SearchResultModel from 'ember-osf-web/models/search-result';
+
+interface ValueOptionArgs {
+ option: SearchResultModel;
+ isSelected?: Boolean;
+}
+
+export default class ValueOption extends Component {
+ get additionalDetail() {
+ const { affiliation: affiliatedEntities = [] } = this.args.option.resourceMetadata;
+ return affiliatedEntities.flatMap(
+ (entity: any) => entity.name?.map((name: any) => name['@value']),
+ ).filter(Boolean).join(', ');
+ }
+}
diff --git a/lib/osf-components/addon/components/search-page/filter-facet/value-option/styles.scss b/lib/osf-components/addon/components/search-page/filter-facet/value-option/styles.scss
new file mode 100644
index 0000000000..7a38486398
--- /dev/null
+++ b/lib/osf-components/addon/components/search-page/filter-facet/value-option/styles.scss
@@ -0,0 +1,8 @@
+.SelectedValueOption {
+ margin-left: 0.5em;
+}
+
+.AdditionalDetail {
+ margin-left: 0.5em;
+ font-size: 0.8em;
+}
diff --git a/lib/osf-components/addon/components/search-page/filter-facet/value-option/template.hbs b/lib/osf-components/addon/components/search-page/filter-facet/value-option/template.hbs
new file mode 100644
index 0000000000..6138e471bd
--- /dev/null
+++ b/lib/osf-components/addon/components/search-page/filter-facet/value-option/template.hbs
@@ -0,0 +1,6 @@
+
+
{{@option.indexCard.label}} ({{@option.cardSearchResultCount}})
+ {{#if this.additionalDetail}}
+
{{this.additionalDetail}}
+ {{/if}}
+
diff --git a/lib/osf-components/app/components/search-page/filter-facet/value-option/component.js b/lib/osf-components/app/components/search-page/filter-facet/value-option/component.js
new file mode 100644
index 0000000000..9ec98fbbb3
--- /dev/null
+++ b/lib/osf-components/app/components/search-page/filter-facet/value-option/component.js
@@ -0,0 +1 @@
+export { default } from 'osf-components/components/search-page/filter-facet/value-option/component';
diff --git a/lib/osf-components/app/components/search-page/filter-facet/value-option/template.js b/lib/osf-components/app/components/search-page/filter-facet/value-option/template.js
new file mode 100644
index 0000000000..fba5f7ce81
--- /dev/null
+++ b/lib/osf-components/app/components/search-page/filter-facet/value-option/template.js
@@ -0,0 +1,2 @@
+export { default } from 'osf-components/components/search-page/filter-facet/value-option/template';
+
From 02301151521af1d5989aadcceb60b8e7c21795f4 Mon Sep 17 00:00:00 2001
From: Ashley Robinson <82047646+chth0n1x@users.noreply.github.com>
Date: Mon, 23 Oct 2023 10:49:39 -0400
Subject: [PATCH 10/16] [ENG-2224] Access Token Edit Scopes (#2022)
* Updated refresh method to clear access token.
* Updated delete button logic on the edit token page, added persistence to cleared token value, updated hardConfirm value to false.
* Removed changeset validation from delete token.
* Removed hard confirm flag for modal.
* Updated template logic to check if model task is successful.
* Added loading indicator to edit access token page.
* Updated refresh method to refreshToken, updated action to task.
* Removed unnecessary change.
* Removed unnecessary change.
* Updated deleteRecord and save to destroyRecord.
* Removed unnecessary change.
* Added loading indicator to edit access token page.
* Restored action for refreshToken.
* Updated refreshToken action.
* Updated edit access token import.
* Re-added deleteRecord and save to deleteToken.
---
app/settings/tokens/-components/edit-form/component.ts | 3 ++-
app/settings/tokens/edit/controller.ts | 2 +-
app/settings/tokens/edit/template.hbs | 10 ++++++----
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/app/settings/tokens/-components/edit-form/component.ts b/app/settings/tokens/-components/edit-form/component.ts
index 05cd6e5e4b..1ee9c84f61 100644
--- a/app/settings/tokens/-components/edit-form/component.ts
+++ b/app/settings/tokens/-components/edit-form/component.ts
@@ -67,7 +67,8 @@ export default class TokenForm extends Component {
@action
async deleteToken() {
try {
- await this.token!.destroyRecord();
+ this.token!.deleteRecord();
+ await this.token.save();
this.toast.success(this.intl.t('settings.tokens.deleted'));
this.router.transitionTo('settings.tokens');
} catch {
diff --git a/app/settings/tokens/edit/controller.ts b/app/settings/tokens/edit/controller.ts
index 2027d341f1..0343b7864a 100644
--- a/app/settings/tokens/edit/controller.ts
+++ b/app/settings/tokens/edit/controller.ts
@@ -21,7 +21,7 @@ export default class SettingsTokensEditController extends Controller {
token?: Token;
@action
- refresh() {
+ refreshToken() {
this.clearTokenValue();
// Send action to route
diff --git a/app/settings/tokens/edit/template.hbs b/app/settings/tokens/edit/template.hbs
index d85971d44d..f2da97c11f 100644
--- a/app/settings/tokens/edit/template.hbs
+++ b/app/settings/tokens/edit/template.hbs
@@ -32,19 +32,21 @@
{{t 'settings.tokens.createSuccess.instructions'}}
{{else}}
{{t 'settings.tokens.editToken'}}
- {{#if this.model.taskInstance.isError}}
- {{this.model.taskInstance.error}}
- {{else}}
+ {{#if this.model.taskInstance.isRunning}}
+
+ {{else if this.model.taskInstance.isSuccessful}}
+ {{else}}
+ {{this.model.taskInstance.error}}
{{/if}}
{{/if}}
From 2f710055e2eb90bca671d09c024d5aff4beb82b8 Mon Sep 17 00:00:00 2001
From: Abram Booth
Date: Mon, 23 Oct 2023 10:27:58 -0400
Subject: [PATCH 11/16] fix: consistent cardSearchText for value-search
---
lib/osf-components/addon/components/search-page/component.ts | 4 +++-
.../addon/components/search-page/filter-facet/component.ts | 4 ++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/osf-components/addon/components/search-page/component.ts b/lib/osf-components/addon/components/search-page/component.ts
index 521573d109..fe9e80df32 100644
--- a/lib/osf-components/addon/components/search-page/component.ts
+++ b/lib/osf-components/addon/components/search-page/component.ts
@@ -23,6 +23,8 @@ interface ResourceTypeOption {
value?: ResourceTypeFilterValue | null;
}
+export const CARD_SEARCH_TEXT_PARAM = 'cardSearchText[*,creator.name,isContainedBy.creator.name]';
+
export enum ResourceTypeFilterValue {
Registrations = 'Registration,RegistrationComponent',
Projects = 'Project,ProjectComponent',
@@ -240,7 +242,7 @@ export default class SearchPage extends Component {
}
this.filterQueryObject = filterQueryObject;
const searchResult = await this.store.queryRecord('index-card-search', {
- 'cardSearchText[*,creator.name,isContainedBy.creator.name]': cardSearchText,
+ [CARD_SEARCH_TEXT_PARAM]: cardSearchText,
'page[cursor]': page,
sort,
cardSearchFilter: filterQueryObject,
diff --git a/lib/osf-components/addon/components/search-page/filter-facet/component.ts b/lib/osf-components/addon/components/search-page/filter-facet/component.ts
index 18a0070c4f..05cab02c03 100644
--- a/lib/osf-components/addon/components/search-page/filter-facet/component.ts
+++ b/lib/osf-components/addon/components/search-page/filter-facet/component.ts
@@ -11,7 +11,7 @@ import RelatedPropertyPathModel from 'ember-osf-web/models/related-property-path
import SearchResultModel from 'ember-osf-web/models/search-result';
-import { Filter } from '../component';
+import { Filter, CARD_SEARCH_TEXT_PARAM } from '../component';
interface FakeIndexCard {
resourceId: string;
@@ -123,7 +123,7 @@ export default class FilterFacet extends Component {
return; // skip fetching
}
const valueSearch = await this.store.queryRecord('index-value-search', {
- cardSearchText,
+ [CARD_SEARCH_TEXT_PARAM]: cardSearchText,
cardSearchFilter,
valueSearchPropertyPath: property.propertyPathKey,
valueSearchText: filterString || '',
From 1fd31777f2f1a4cbd0b17a7a0704e367cc41db86 Mon Sep 17 00:00:00 2001
From: futa-ikeda <51409893+futa-ikeda@users.noreply.github.com>
Date: Mon, 23 Oct 2023 11:49:13 -0400
Subject: [PATCH 12/16] Prevent mutation after consumption; Change arg name to
something more appropriate (#2028)
---
app/institutions/discover/controller.ts | 6 ++++--
app/institutions/discover/template.hbs | 2 +-
app/preprints/discover/controller.ts | 4 ++--
app/preprints/discover/template.hbs | 2 +-
app/search/controller.ts | 6 ++++--
app/search/template.hbs | 2 +-
.../addon/components/search-page/component.ts | 21 +++++++++++++------
.../addon/branded/discover/controller.ts | 10 ++++-----
.../addon/branded/discover/template.hbs | 2 +-
9 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/app/institutions/discover/controller.ts b/app/institutions/discover/controller.ts
index ffb5706ddb..9922687f44 100644
--- a/app/institutions/discover/controller.ts
+++ b/app/institutions/discover/controller.ts
@@ -3,7 +3,9 @@ import { inject as service } from '@ember/service';
import CurrentUser from 'ember-osf-web/services/current-user';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
-import { Filter, OnSearchParams, ResourceTypeFilterValue } from 'osf-components/components/search-page/component';
+import {
+ Filter, OnQueryParamChangeParams, ResourceTypeFilterValue,
+} from 'osf-components/components/search-page/component';
export default class InstitutionDiscoverController extends Controller {
@service currentUser!: CurrentUser;
@@ -35,7 +37,7 @@ export default class InstitutionDiscoverController extends Controller {
}
@action
- onSearch(queryOptions: OnSearchParams) {
+ onQueryParamChange(queryOptions: OnQueryParamChangeParams) {
this.q = queryOptions.cardSearchText;
this.sort = queryOptions.sort;
this.resourceType = queryOptions.resourceType as ResourceTypeFilterValue;
diff --git a/app/institutions/discover/template.hbs b/app/institutions/discover/template.hbs
index 35b22695a5..b684f5d5ee 100644
--- a/app/institutions/discover/template.hbs
+++ b/app/institutions/discover/template.hbs
@@ -5,7 +5,7 @@
@query={{this.q}}
@defaultQueryOptions={{this.defaultQueryOptions}}
@queryParams={{this.queryParams}}
- @onSearch={{action this.onSearch}}
+ @onQueryParamChange={{action this.onQueryParamChange}}
@resourceType={{this.resourceType}}
@institution={{this.model}}
@sort={{this.sort}}
diff --git a/app/preprints/discover/controller.ts b/app/preprints/discover/controller.ts
index af7d5ec281..749764034a 100644
--- a/app/preprints/discover/controller.ts
+++ b/app/preprints/discover/controller.ts
@@ -8,7 +8,7 @@ import config from 'ember-osf-web/config/environment';
import Theme from 'ember-osf-web/services/theme';
import pathJoin from 'ember-osf-web/utils/path-join';
-import { Filter, OnSearchParams } from 'osf-components/components/search-page/component';
+import { Filter, OnQueryParamChangeParams } from 'osf-components/components/search-page/component';
export default class PreprintDiscoverController extends Controller {
@service store!: Store;
@@ -28,7 +28,7 @@ export default class PreprintDiscoverController extends Controller {
}
@action
- onSearch(queryOptions: OnSearchParams) {
+ onQueryParamChange(queryOptions: OnQueryParamChangeParams) {
this.q = queryOptions.cardSearchText;
this.sort = queryOptions.sort;
this.activeFilters = queryOptions.activeFilters;
diff --git a/app/preprints/discover/template.hbs b/app/preprints/discover/template.hbs
index 1f2d9544eb..9310db5a51 100644
--- a/app/preprints/discover/template.hbs
+++ b/app/preprints/discover/template.hbs
@@ -8,7 +8,7 @@
@showResourceTypeFilter={{false}}
@provider={{this.model}}
@queryParams={{this.queryParams}}
- @onSearch={{action this.onSearch}}
+ @onQueryParamChange={{action this.onQueryParamChange}}
@sort={{this.sort}}
@activeFilters={{this.activeFilters}}
/>
diff --git a/app/search/controller.ts b/app/search/controller.ts
index e8ed982aa5..fbfa7ec1f1 100644
--- a/app/search/controller.ts
+++ b/app/search/controller.ts
@@ -1,7 +1,9 @@
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
-import { Filter, OnSearchParams, ResourceTypeFilterValue } from 'osf-components/components/search-page/component';
+import {
+ Filter, OnQueryParamChangeParams, ResourceTypeFilterValue,
+} from 'osf-components/components/search-page/component';
export default class SearchController extends Controller {
@tracked q?: string = '';
@@ -12,7 +14,7 @@ export default class SearchController extends Controller {
queryParams = ['q', 'sort', 'resourceType', 'activeFilters'];
@action
- onSearch(queryOptions: OnSearchParams) {
+ onQueryParamChange(queryOptions: OnQueryParamChangeParams) {
this.q = queryOptions.cardSearchText;
this.sort = queryOptions.sort;
this.resourceType = queryOptions.resourceType;
diff --git a/app/search/template.hbs b/app/search/template.hbs
index ac29113295..bde47e6ccc 100644
--- a/app/search/template.hbs
+++ b/app/search/template.hbs
@@ -4,7 +4,7 @@
@route='search'
@cardSearchText={{this.q}}
@queryParams={{this.queryParams}}
- @onSearch={{action this.onSearch}}
+ @onQueryParamChange={{action this.onQueryParamChange}}
@showResourceTypeFilter={{true}}
@sort={{this.sort}}
@resourceType={{this.resourceType}}
diff --git a/lib/osf-components/addon/components/search-page/component.ts b/lib/osf-components/addon/components/search-page/component.ts
index fe9e80df32..6bf191b82d 100644
--- a/lib/osf-components/addon/components/search-page/component.ts
+++ b/lib/osf-components/addon/components/search-page/component.ts
@@ -46,7 +46,7 @@ export interface Filter {
suggestedFilterOperator?: SuggestedFilterOperators;
}
-export interface OnSearchParams {
+export interface OnQueryParamChangeParams {
cardSearchText?: string;
sort?: string;
resourceType?: ResourceTypeFilterValue | null;
@@ -54,7 +54,7 @@ export interface OnSearchParams {
}
interface SearchArgs {
- onSearch?: (obj: OnSearchParams) => void;
+ onQueryParamChange?: (obj: OnQueryParamChangeParams) => void;
cardSearchText: string;
cardSearchFilters: Filter[];
propertyCard: IndexCardModel;
@@ -208,9 +208,6 @@ export default class SearchPage extends Component {
try {
const cardSearchText = this.cardSearchText;
const { page, sort, activeFilters, resourceType } = this;
- if (this.args.onSearch) {
- this.args.onSearch({cardSearchText, sort, resourceType, activeFilters});
- }
const filterQueryObject = activeFilters.reduce((acc, filter) => {
// boolean filters should look like cardSearchFilter[hasDataResource][is-present]
if (filter.suggestedFilterOperator === SuggestedFilterOperators.IsPresent) {
@@ -225,7 +222,7 @@ export default class SearchPage extends Component {
acc[filter.propertyPathKey] = currentValue ? currentValue.concat(filter.value) : [filter.value];
return acc;
}, {} as { [key: string]: any });
- let resourceTypeFilter = this.resourceType as string;
+ let resourceTypeFilter = resourceType as string;
// If resourceType is null, we want to search all resource types
if (!resourceTypeFilter) {
resourceTypeFilter = Object.values(ResourceTypeFilterValue).join(',');
@@ -278,6 +275,7 @@ export default class SearchPage extends Component {
async doDebounceSearch() {
await timeout(searchDebounceTime);
this.page = '';
+ this.updateQueryParams();
taskFor(this.search).perform();
}
@@ -292,6 +290,7 @@ export default class SearchPage extends Component {
this.activeFilters.pushObject(filter);
}
this.page = '';
+ this.updateQueryParams();
taskFor(this.search).perform();
}
@@ -299,6 +298,7 @@ export default class SearchPage extends Component {
updateSort(sortOption: SortOption) {
this.sort = sortOption.value;
this.page = '';
+ this.updateQueryParams();
taskFor(this.search).perform();
}
@@ -307,6 +307,15 @@ export default class SearchPage extends Component {
this.resourceType = resourceTypeOption.value;
this.activeFilters = A([]);
this.page = '';
+ this.updateQueryParams();
taskFor(this.search).perform();
}
+
+ @action
+ updateQueryParams() {
+ const { cardSearchText, sort, activeFilters, resourceType } = this;
+ if (this.args.onQueryParamChange) {
+ this.args.onQueryParamChange({cardSearchText, sort, resourceType, activeFilters});
+ }
+ }
}
diff --git a/lib/registries/addon/branded/discover/controller.ts b/lib/registries/addon/branded/discover/controller.ts
index 722451d17f..c03b0130e7 100644
--- a/lib/registries/addon/branded/discover/controller.ts
+++ b/lib/registries/addon/branded/discover/controller.ts
@@ -6,7 +6,7 @@ import { inject as service } from '@ember/service';
import Intl from 'ember-intl/services/intl';
import Media from 'ember-responsive';
import { tracked } from '@glimmer/tracking';
-import { Filter, OnSearchParams } from 'osf-components/components/search-page/component';
+import { Filter, OnQueryParamChangeParams } from 'osf-components/components/search-page/component';
import pathJoin from 'ember-osf-web/utils/path-join';
import config from 'ember-osf-web/config/environment';
export default class BrandedDiscover extends Controller.extend() {
@@ -27,9 +27,9 @@ export default class BrandedDiscover extends Controller.extend() {
}
@action
- onSearch(onSearchParams: OnSearchParams) {
- this.cardSearchText = onSearchParams.cardSearchText;
- this.sort = onSearchParams.sort;
- this.activeFilters = onSearchParams.activeFilters;
+ onQueryParamChange(onQueryParamChangeParams: OnQueryParamChangeParams) {
+ this.cardSearchText = onQueryParamChangeParams.cardSearchText;
+ this.sort = onQueryParamChangeParams.sort;
+ this.activeFilters = onQueryParamChangeParams.activeFilters;
}
}
diff --git a/lib/registries/addon/branded/discover/template.hbs b/lib/registries/addon/branded/discover/template.hbs
index 1d9d0d6b45..6d6cd0793b 100644
--- a/lib/registries/addon/branded/discover/template.hbs
+++ b/lib/registries/addon/branded/discover/template.hbs
@@ -11,7 +11,7 @@
@queryParams={{this.queryParams}}
@query={{this.q}}
@sort={{this.sort}}
- @onSearch={{action this.onSearch}}
+ @onQueryParamChange={{action this.onQueryParamChange}}
@showResourceTypeFilter={{false}}
@activeFilters={{this.activeFilters}}
/>
From 9f5c1e3192fb4b1d5742b2125df1c5d6817f4c9c Mon Sep 17 00:00:00 2001
From: futa-ikeda <51409893+futa-ikeda@users.noreply.github.com>
Date: Mon, 23 Oct 2023 16:32:25 -0400
Subject: [PATCH 13/16] [ENG-4838] Update search-result card to show preprint
word (#2036)
* Update search-result card to show preprint word for preprint discover page
* Update provider word for preprint secondary metadata
* Use translation map
* Use translation for preprintWord
---
.../addon/components/search-page/template.hbs | 2 +-
.../search-result-card/component.ts | 21 ++++++++++++++++---
translations/en-us.yml | 2 +-
3 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/lib/osf-components/addon/components/search-page/template.hbs b/lib/osf-components/addon/components/search-page/template.hbs
index 1c69cadb32..bd08792e36 100644
--- a/lib/osf-components/addon/components/search-page/template.hbs
+++ b/lib/osf-components/addon/components/search-page/template.hbs
@@ -227,7 +227,7 @@ as |layout|>
{{else}}
{{#each this.searchResults as |item|}}
-
+
{{else}}
{{t 'search.no-results'}}
diff --git a/lib/osf-components/addon/components/search-result-card/component.ts b/lib/osf-components/addon/components/search-result-card/component.ts
index a0af4a4941..dab8376a39 100644
--- a/lib/osf-components/addon/components/search-result-card/component.ts
+++ b/lib/osf-components/addon/components/search-result-card/component.ts
@@ -6,10 +6,23 @@ import { tracked } from '@glimmer/tracking';
import Intl from 'ember-intl/services/intl';
import SearchResultModel from 'ember-osf-web/models/search-result';
-import UserModel from 'ember-osf-web/models/user';
+import PreprintProviderModel from 'ember-osf-web/models/preprint-provider';
+
+
+const CardLabelTranslationKeys = {
+ project: 'osf-components.search-result-card.project',
+ project_component: 'osf-components.search-result-card.project_component',
+ registration: 'osf-components.search-result-card.registration',
+ registration_component: 'osf-components.search-result-card.registration_component',
+ preprint: 'osf-components.search-result-card.preprint',
+ file: 'osf-components.search-result-card.file',
+ user: 'osf-components.search-result-card.user',
+ unknown: 'osf-components.search-result-card.unknown',
+};
interface Args {
result: SearchResultModel;
+ provider?: PreprintProviderModel;
}
export default class SearchResultCard extends Component
{
@@ -17,7 +30,6 @@ export default class SearchResultCard extends Component {
@service store!: Store;
@tracked isOpenSecondaryMetadata = false;
- @tracked osfUser?: UserModel;
@action
toggleSecondaryMetadata() {
@@ -25,7 +37,10 @@ export default class SearchResultCard extends Component {
}
get cardTypeLabel() {
- return this.intl.t(`osf-components.search-result-card.${this.args.result.resourceType}`);
+ const provider = this.args.provider;
+ const resourceType = this.args.result.resourceType;
+ return (provider?.preprintWord && resourceType === 'preprint') ? provider.documentType.singularCapitalized :
+ this.intl.t(CardLabelTranslationKeys[resourceType]);
}
get secondaryMetadataComponent() {
diff --git a/translations/en-us.yml b/translations/en-us.yml
index d6a4b1533e..5429482806 100644
--- a/translations/en-us.yml
+++ b/translations/en-us.yml
@@ -1878,7 +1878,7 @@ osf-components:
date_modified: Date modified
last_edited: Last edited
member_since: Member since
- preprint_provider: Preprint provider
+ preprint_provider: Provider
registration_provider: Registration provider
conflict_of_interest: Conflict of Interest response
no_conflict_of_interest: 'Author asserted no Conflict of Interest'
From b2edb25fe08417416975e9fd1228fe6a46596eaf Mon Sep 17 00:00:00 2001
From: futa-ikeda <51409893+futa-ikeda@users.noreply.github.com>
Date: Tue, 24 Oct 2023 10:45:56 -0400
Subject: [PATCH 14/16] Adjust z-index for general osf navbar (#2037)
---
app/styles/_global.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/styles/_global.scss b/app/styles/_global.scss
index 8f5b204eed..0d63443663 100644
--- a/app/styles/_global.scss
+++ b/app/styles/_global.scss
@@ -337,7 +337,7 @@ fieldset[disabled] .form-control {
position: fixed;
right: 0;
left: 0;
- z-index: 1030;
+ z-index: 998;
}
.navbar-inverse .navbar-collapse,
From b4e8f4bfe1beb0ccb5fa9428b20be81910bab9c9 Mon Sep 17 00:00:00 2001
From: futa-ikeda <51409893+futa-ikeda@users.noreply.github.com>
Date: Wed, 25 Oct 2023 09:21:23 -0400
Subject: [PATCH 15/16] Broaden how we find orcid ids (#2039)
* Broaden how we find orcid ids
* Update app/models/search-result.ts
Co-authored-by: Abram Booth
---------
Co-authored-by: Abram Booth
---
app/models/search-result.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/search-result.ts b/app/models/search-result.ts
index c21c51f1a5..5d02d1c9c6 100644
--- a/app/models/search-result.ts
+++ b/app/models/search-result.ts
@@ -245,7 +245,7 @@ export default class SearchResultModel extends Model {
get orcids() {
if (this.resourceMetadata.identifier) {
const orcids = this.resourceMetadata.identifier.filter(
- (item: any) => item['@value'].includes('http://orcid.org/'),
+ (item: any) => new URL(item['@value']).host === 'orcid.org',
);
return orcids.map( (item: any) => item['@value']);
}
From d7462a14375543a297d1602e9268988927b11350 Mon Sep 17 00:00:00 2001
From: Yuhuai Liu
Date: Wed, 25 Oct 2023 10:51:38 -0400
Subject: [PATCH 16/16] Bump version no. Add CHANGELOG
---
CHANGELOG.md | 7 +++++++
package.json | 2 +-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b72e204269..016a3e5d6b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,11 @@ 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).
+## [23.13.0] - 2023-10-25
+### Added
+- Search improvement post release fixes
+- Misc bug fixes
+
## [23.12.0] - 2023-10-10
### Added
- Search improvement phase 2: preprints, institutions and registries discover pages
@@ -1949,6 +1954,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Added
- Quick Files
+[23.13.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.13.0
+[23.12.1]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.12.1
[23.12.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.12.0
[23.11.1]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.11.1
[23.11.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.11.0
diff --git a/package.json b/package.json
index e914391b77..7f07414bda 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ember-osf-web",
- "version": "23.12.0",
+ "version": "23.13.0",
"private": true,
"description": "Ember front-end for the Open Science Framework",
"homepage": "https://github.com/CenterForOpenScience/ember-osf-web#readme",