Skip to content

Commit 57a6790

Browse files
committed
Merge branch 'release/23.10.0'
2 parents 6a0a8d3 + a8a0c87 commit 57a6790

File tree

119 files changed

+4490
-618
lines changed

Some content is hidden

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

119 files changed

+4490
-618
lines changed

CHANGELOG.md

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

7+
## [23.10.0] - 2023-08-28
8+
### Added
9+
- Added search improvement routes and related components
10+
711
## [23.09.0] - 2023-08-16
812
### Changed
913
- Added Google Tag Manager
@@ -1936,6 +1940,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
19361940
### Added
19371941
- Quick Files
19381942

1943+
[23.10.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.10.0
19391944
[23.09.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.09.0
19401945
[23.08.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.08.0
19411946
[23.07.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/23.07.0

app/adapters/index-card-search.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import ShareAdapter from './share-adapter';
2+
export default class IndexCardSearchAdapter extends ShareAdapter {
3+
pathForType() {
4+
return 'index-card-search';
5+
}
6+
}
7+
8+
declare module 'ember-data/types/registries/adapter' {
9+
export default interface AdapterRegistry {
10+
'index-card-search': IndexCardSearchAdapter;
11+
} // eslint-disable-line semi
12+
}

app/adapters/index-card.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import ShareAdapter from './share-adapter';
2+
3+
export default class IndexCardAdapter extends ShareAdapter {
4+
pathForType() {
5+
return 'index-card';
6+
}
7+
}
8+
9+
declare module 'ember-data/types/registries/adapter' {
10+
export default interface AdapterRegistry {
11+
'index-card': IndexCardAdapter;
12+
} // eslint-disable-line semi
13+
}

app/adapters/index-value-search.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import ShareAdapter from './share-adapter';
2+
3+
export default class IndexValueSearchAdapter extends ShareAdapter {
4+
pathForType() {
5+
return 'index-value-search';
6+
}
7+
}
8+
9+
declare module 'ember-data/types/registries/adapter' {
10+
export default interface AdapterRegistry {
11+
'index-value-search': IndexValueSearchAdapter;
12+
} // eslint-disable-line semi
13+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import ShareAdapter from './share-adapter';
2+
3+
export default class RelatedPropertyPathAdapter extends ShareAdapter {
4+
}
5+
6+
declare module 'ember-data/types/registries/adapter' {
7+
export default interface AdapterRegistry {
8+
'related-property-path': RelatedPropertyPathAdapter;
9+
} // eslint-disable-line semi
10+
}

app/adapters/search-result.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import ShareAdapter from './share-adapter';
2+
3+
export default class SearchResultAdapter extends ShareAdapter {
4+
}
5+
6+
declare module 'ember-data/types/registries/adapter' {
7+
export default interface AdapterRegistry {
8+
'search-result': SearchResultAdapter;
9+
} // eslint-disable-line semi
10+
}

app/adapters/share-adapter.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import JSONAPIAdapter from '@ember-data/adapter/json-api';
2+
import config from 'ember-get-config';
3+
4+
export default class ShareAdapter extends JSONAPIAdapter {
5+
host = config.OSF.shareBaseUrl.replace(/\/$/, ''); // Remove trailing slash to avoid // in URLs
6+
namespace = 'api/v3';
7+
}

app/app.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ const App = Application.extend({
5656
'osf-router',
5757
],
5858
externalRoutes: {
59+
search: 'search',
5960
'guid-registration': 'guid-registration',
6061
'guid-registration.analytics': 'guid-registration.analytics',
6162
'guid-registration.forks': 'guid-registration.forks',

app/dashboard/template.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
<OsfLink
240240
data-analytics-name='noteworthy_search'
241241
local-class='btn btn-default'
242-
@href='/search/?q=*'
242+
@route='search'
243243
>
244244
{{t 'dashboard.noteworthy.search_more'}}
245245
</OsfLink>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import Helper from '@ember/component/helper';
2+
import { inject as service } from '@ember/service';
3+
import IntlService from 'ember-intl/services/intl';
4+
5+
import { LanguageText } from 'ember-osf-web/models/index-card';
6+
7+
/**
8+
* This helper is used to get a locale-appropriate string for a property from a metadata hash.
9+
* It is used to fetch metadata fields from a index-card's resourceMetadata attribute, but can be used for any
10+
* hash that contains an array of LangaugeText objects.
11+
* If the property is not found, the first value in the array is returned, or if the property is found,
12+
* but there is no locale-appropriate value, the first value in the array is returned.
13+
*
14+
* @example
15+
* ```handlebars
16+
* {{get-localized-property indexCard.resourceMetadata 'title'}}
17+
* ```
18+
* where `indexCard` is an index-card model instance.
19+
* @class get-localized-property
20+
* @param {Object} metadataHash The metadata hash to search for the property
21+
* @param {String} propertyName The name of the property to search for
22+
* @return {String} The locale-appropriate string or the first value in the array or 'Not provided' message
23+
*/
24+
export default class GetLocalizedPropertyHelper extends Helper {
25+
@service intl!: IntlService;
26+
27+
compute([metadataHash, propertyName]: [Record<string, LanguageText[]>, string]): string {
28+
const locale = this.intl.locale;
29+
const valueOptions = metadataHash?.[propertyName];
30+
if (!metadataHash || !valueOptions || valueOptions.length === 0) {
31+
return this.intl.t('helpers.get-localized-property.not-provided');
32+
}
33+
34+
const index = valueOptions.findIndex((valueOption: LanguageText) => valueOption['@language'] === locale);
35+
if (index === -1) {
36+
return valueOptions[0]['@value'];
37+
}
38+
return valueOptions[index]['@value'];
39+
}
40+
}

0 commit comments

Comments
 (0)