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",