Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ENG-4887] [ENG-5293] [ENG-5294] Preprints: Select Page #2167

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
ed39281
Add new `/select` route under `/preprints`
cslzchen Feb 28, 2024
6225d11
Build the placeholder page and route for preprints/select
cslzchen Feb 28, 2024
fad5bb1
Update route.js to retrieve providers and access them on the page
cslzchen Feb 28, 2024
db17952
Replace toy code with component placeholder and add SCSS
cslzchen Feb 29, 2024
b76dde2
Add is-mobile style check
cslzchen Feb 29, 2024
e689a74
New barebone preprint select provider component [skip ci]
cslzchen Mar 7, 2024
d608bc2
Add provider display component
cslzchen Mar 13, 2024
6a9e2b9
Optimize provider display size and add new border color
cslzchen Mar 13, 2024
56aff50
Rework / restyle the provider select component
cslzchen Mar 13, 2024
0adb1fb
Rework / restyle select page with a temporary header
cslzchen Mar 13, 2024
b922605
Fix minor issues for mobile view
cslzchen Mar 18, 2024
7c422ca
Implement selectiing a provider & clicking create button
cslzchen Mar 18, 2024
4711a94
Fix TS variable naming
cslzchen Mar 18, 2024
1535013
Implement is-selected style check/listener
cslzchen Mar 18, 2024
f3286a1
Add data-test selector
cslzchen Mar 18, 2024
1d18378
Clean up css and hbs for mobile
cslzchen Mar 18, 2024
565aa53
Disable and grey out the create button when no provider is selected
cslzchen Mar 19, 2024
46dd23c
Improve naming for CSS classes
cslzchen Mar 19, 2024
a8712bc
Merge remote-tracking branch 'upstream/feature/preprints-phase-2' int…
cslzchen Mar 19, 2024
9e330e2
Fix extra spaces in translations/en-us.yml
cslzchen Mar 19, 2024
eda9ddb
CR reponse: improve code quality + use <Button> component
cslzchen Mar 19, 2024
098c300
Respond to CR pass 2: fix provider fetch query + improve code quality
cslzchen Mar 20, 2024
8e3dd9a
Fix provider filter for `allowSubmissions`
cslzchen Mar 21, 2024
ef280b9
Update mirage fixtures to allow submissions for all
cslzchen Mar 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions app/preprints/-components/preprint-provider-display/component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { action } from '@ember/object';
import Component from '@glimmer/component';
import PreprintProviderModel from 'ember-osf-web/models/preprint-provider';


interface InputArgs {
provider: PreprintProviderModel;
updateSelectedProvider: (provider: PreprintProviderModel) => void;
selectedProviderId: string;
}


export default class PreprintProviderDisplay extends Component<InputArgs> {
provider: PreprintProviderModel = this.args.provider;

public get isSelected(): boolean {
return this.args.provider.id === this.args.selectedProviderId;
}

@action
onProviderSelect(): void {
this.args.updateSelectedProvider(this.provider);
}
}
56 changes: 56 additions & 0 deletions app/preprints/-components/preprint-provider-display/styles.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
.provider-container {
width: 264px;
height: 150px;
margin: 10px;
padding: 10px;
border: 1px solid $color-border-gray;
border-radius: 5px;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;

.image-container {
width: 60px;
height: 60px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;

.image {
width: 40px;
height: 40px;
}
}

.name-container {
width: 100%;
margin-top: 5px;
font-weight: bold;
text-align: center;
}

.description-container {
width: 100%;
margin-top: 5px;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

&:hover {
border-color: $color-border-blue-dark;
background-color: $color-bg-gray-blue-light;
}

&.mobile {
width: 300px;
}

&.selected {
border-color: $color-border-blue-dark;
background-color: $color-bg-gray-blue-light;
}
}
26 changes: 26 additions & 0 deletions app/preprints/-components/preprint-provider-display/template.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{{!-- template-lint-disable no-invalid-interactive --}}
cslzchen marked this conversation as resolved.
Show resolved Hide resolved
<div
data-test-provider-id='{{this.provider.id}}'
local-class='provider-container {{if (is-mobile) 'mobile'}} {{if this.isSelected 'selected'}}'
{{ on 'click' (action this.onProviderSelect) }}
>
<div local-class='image-container'>
<img
data-test-image
local-class='image'
src={{this.provider.assets.square_color_no_transparent}}
alt={{this.headerText}} />
</div>
<div
data-test-name
local-class='name-container'
>
{{this.provider.name}}
</div>
<div
data-test-description
local-class='description-container'
>
{{html-safe this.provider.description}}
</div>
</div>
44 changes: 44 additions & 0 deletions app/preprints/-components/preprint-provider-selection/component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import { serviceLinks } from 'ember-osf-web/const/service-links';
import { tracked } from '@glimmer/tracking';
import Component from '@glimmer/component';
import PreprintProviderModel from 'ember-osf-web/models/preprint-provider';
import RouterService from '@ember/routing/router-service';


interface InputArgs {
submissionProviders: PreprintProviderModel[];
}


export default class PreprintProviderSelection extends Component<InputArgs> {
@service router!: RouterService;

submissionProviders: PreprintProviderModel[] = this.args.submissionProviders;
learnMoreUrl: string = serviceLinks.preprintsSupport;
@tracked selectedProvider?: PreprintProviderModel;

public get isDisabled(): boolean {
return !this.selectedProvider;
}

public get selectedProviderId(): string | undefined {
if (this.selectedProvider) {
return this.selectedProvider.id;
}
return undefined;
}

@action
onCreateButtonClick(): void {
if (this.selectedProvider !== undefined) {
this.router.transitionTo('preprints.submit', this.selectedProvider.id);
}
}

@action
updateSelectedProvider(provider: PreprintProviderModel): void {
this.selectedProvider = provider;
}
}
96 changes: 96 additions & 0 deletions app/preprints/-components/preprint-provider-selection/styles.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
// stylelint-disable max-nesting-depth

@import 'app/styles/layout';

.provider-selection-container {
@include clamp-width;
width: 100%;
display: flex;
padding: 15px 0;
flex-direction: column;
justify-content: center;
align-items: flex-start;
font-style: normal;

.heading-container {
width: 100%;
padding: 15px 0;

.heading {
margin: 5px 10px;
font-size: 24px;
font-weight: bold;
}
}

.paragraph-container {
width: 100%;
padding: 15px 0;

.paragraph {
margin: 5px 10px;
font-size: 16px;
font-weight: 400;
}
}

.provider-list-container {
width: 100%;
padding: 15px 0;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-content: flex-start;
}

.create-button-container {
width: 100%;
padding: 15px 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;

.create-button {
width: 175px;
height: 40px;
border-radius: 5px;
background-color: $color-bg-blue-dark;
font-size: 16px;
font-weight: bold;
color: $color-text-white;
border-style: hidden;

&:hover {
background-color: $color-bg-blue-highlight;
}

&.disabled {
background-color: $color-bg-gray;
}
}
}

&.mobile {
min-width: 330px;

.heading-container {
.heading {
margin: 5px 20px;
font-size: 20px;
}
}

.paragraph-container {
.paragraph {
margin: 5px 20px;
}
}

.provider-list-container {
justify-content: center;
align-content: center;
}
}
}
39 changes: 39 additions & 0 deletions app/preprints/-components/preprint-provider-selection/template.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<div local-class='provider-selection-container {{if (is-mobile) 'mobile'}}'>
<div local-class='heading-container'>
<h1
data-test-heading
local-class='heading'
>
{{t 'preprints.select.heading'}}
</h1>
</div>
<div local-class='paragraph-container'>
<p
data-test-paragraph
local-class='paragraph'
>
{{t 'preprints.select.paragraph' link=this.learnMoreUrl htmlSafe=true}}
</p>
</div>
<div local-class='provider-list-container'>
{{#each this.submissionProviders as |provider| }}
<Preprints::-Components::PreprintProviderDisplay
data-test-provider
@provider={{provider}}
@updateSelectedProvider={{this.updateSelectedProvider}}
@selectedProviderId={{this.selectedProviderId}}
/>
{{/each}}
</div>
<div local-class='create-button-container'>
<Button
data-test-create-preprints
local-class='create-button {{if this.isDisabled 'disabled'}}'
disabled={{this.isDisabled}}
@type='create'
{{ on 'click' (action this.onCreateButtonClick) }}
>
{{t 'preprints.select.create_button'}}
</Button>
</div>
</div>
17 changes: 17 additions & 0 deletions app/preprints/select/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { inject as service } from '@ember/service';
import Route from '@ember/routing/route';
import Store from '@ember-data/store';
import PreprintProviderModel from 'ember-osf-web/models/preprint-provider';


export default class PreprintSelectRoute extends Route {
@service store!: Store;

async model(){
const allProviders: PreprintProviderModel[] = await this.store.findAll('preprint-provider', {reload: true});
const submissionProviders: PreprintProviderModel[] = allProviders.filter(item => item.allowSubmissions);
return {
submissionProviders,
};
}
}
43 changes: 43 additions & 0 deletions app/preprints/select/styles.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// stylelint-disable max-nesting-depth, selector-max-compound-selectors

@import 'app/styles/layout';

.select-page-container {
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;

.header-container {
padding: 30px 0;
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
background: url('assets/images/default-brand/bg-dark.jpg') top center $color-bg-color-grey;

.header-clamp-width-container {
@include clamp-width;

.header {
margin: 5px 10px;
font-size: 48px;
color: $color-text-white;
}
}
}

&.mobile {
.header-container {
text-align: center;

.header-clamp-width-container {
.header {
font-size: 36px;
}
}
}
}
}
17 changes: 17 additions & 0 deletions app/preprints/select/template.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{{page-title (t 'preprints.select.page_title')}}

<div local-class='select-page-container {{if (is-mobile) 'mobile'}}'>
{{!-- placehodler for header component --}}
{{!-- local-class 'header-container' and 'header' will be replaced by the component's own local-class --}}
<div local-class='header-container'>
<div local-class='header-clamp-width-container'>
<p
data-test-header
local-class='header'
>
{{t 'preprints.select.title'}}
</p>
</div>
</div>
<Preprints::-Components::PreprintProviderSelection @submissionProviders={{this.model.submissionProviders}} />
</div>
1 change: 1 addition & 0 deletions app/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Router.map(function() {
this.route('discover', { path: '/:provider_id/discover' });
this.route('detail', { path: '/:provider_id/:guid' });
this.route('submit', { path: '/:provider_id/submit' });
this.route('select');
});


Expand Down
2 changes: 2 additions & 0 deletions app/styles/_variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ $color-border-gray-dark: #e5e5e5;
$color-border-gray: #ddd;
$color-border-gray-light: #d9d9d9;
$color-border-gray-cool: #d6dbdc;
$color-border-blue-dark: #263947;

$color-gradient-primary: #eee;
$color-gradient-secondary: #ccc;
Expand Down Expand Up @@ -84,6 +85,7 @@ $color-bg-blue-dark: #337ab7;
$color-bg-blue-darker: #214661;
$color-bg-blue-light: #def;
$color-bg-blue-lighter: rgba($color-bg-blue-dark, 0.2);
$color-bg-blue-highlight: #15a5eb;
$color-bg-red: #a00;
$color-bg-white-transparent: rgba(255, 255, 255, 0.49);

Expand Down
Loading
Loading