Skip to content
This repository has been archived by the owner on Jun 2, 2022. It is now read-only.

[FSSS-170] Chore: tweaks search page #293

Merged
merged 7 commits into from
Feb 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions src/components/sections/ProductGallery/ProductGallery.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import {
import { useGalleryQuery } from './useGalleryQuery'
import { useOrderedFacets } from './useOrderedFacets'

import './product-gallery.scss'

const GalleryPage = lazy(() => import('./ProductGalleryPage'))
const Sort = lazy(() => import('src/components/search/Sort'))
const Filter = lazy(() => import('src/components/search/Filter'))
Expand Down
150 changes: 150 additions & 0 deletions src/components/sections/ProductGallery/product-gallery.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
@import "../../../styles/scaffold.scss";

.product-listing {
padding-top: 0;
--product-listing-row-height: var(--space-6);

@include media(">=notebook") {
padding-top: var(--page-padding-notebook);
}
}

// Temporary till we have skeletons.
.product-listing__data-loading {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding-top: var(--space-5);
}

.product-listing__content-grid {
display: flex;
flex-direction: column;
padding-right: 0;
padding-left: 0;

@include media(">=notebook") {
display: grid;
grid-template-rows: var(--product-listing-row-height) auto;
grid-template-columns: repeat(12, 1fr);
padding-right: var(--page-padding-notebook);
padding-left: var(--page-padding-notebook);
column-gap: var(--space-4);
row-gap: var(--space-0);
}
}

.product-listing__filters {
@include media(">=notebook") {
position: sticky;
top: var(--grid-gap-0);
grid-row: span 2;
grid-column: 1 / span 3;
align-self: start;
}
}

.product-listing__sort {
display: flex;
align-items: center;
justify-content: space-between;
order: 1;
width: 100%;
min-height: rem(68px);
padding: var(--space-1) var(--space-3) var(--space-2);
background-color: var(--bg-neutral-lightest);

@include media(">=notebook") {
grid-column: 6 / span 7;
justify-content: flex-end;
order: unset;
min-height: initial;
padding: 0;
}
}

.product-listing__results-count {
display: flex;
align-items: center;
justify-content: center;
order: 2;
min-height: rem(45px);
padding: var(--space-2) var(--space-3);
background-color: var(--bg-neutral-light);

@include media(">=notebook") {
grid-column: 4 /span 2;
justify-content: left;
order: unset;
min-height: initial;
padding: 0;
background-color: unset;
}
}

.product-listing__results {
--padding: var(--space-1);

order: 3;
padding: var(--padding) var(--padding) 0;
background-color: var(--bg-neutral-light);

@include media(">=notebook") {
grid-column: 4 / span 9;
order: unset;
padding: 0;
background-color: unset;
}

.product-card[data-store-card] { min-width: 100%; }
}

.product-listing__results-sponsored {
margin: var(--space-1) calc(-1 * var(--padding));
padding: var(--space-4) var(--space-3);
background-color: var(--bg-neutral-lightest);

@include media(">=notebook") {
margin: var(--space-6) 0;
padding: 0;

[data-store-tiles] {
column-gap: var(--grid-gap-0);
row-gap: 0;
}
}

h3 { margin-bottom: var(--space-1); }
}

.product-listing__pagination {
display: flex;
align-items: center;
justify-content: center;
min-height: var(--space-13);
margin-right: calc(-1 * var(--padding));
margin-left: calc(-1 * var(--padding));
padding: var(--space-4);
background-color: var(--bg-neutral-lightest);

@include media(">=notebook") {
padding: var(--space-1) var(--space-2);
}

&--top {
margin-bottom: var(--padding);
}

&--bottom {
margin-top: var(--padding);
}

[data-store-button] {
width: 100%;

@include media(">=notebook") {
width: fit-content;
}
}
}
8 changes: 6 additions & 2 deletions src/components/ui/SROnly/SROnly.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import type { ElementType } from 'react'
import React from 'react'

import './sr-only.scss'

interface Props {
text: string
as?: ElementType
}

function SROnly({ text }: Props) {
return <span data-store-sr-only>{text}</span>
function SROnly({ text, as }: Props) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the future we can rename it to a more generic meaning to cover this case (when we need to hide information but not necessary related to screen reader only) 👍

const Component = as ?? 'span'

return <Component data-store-sr-only>{text}</Component>
}

export default SROnly
6 changes: 3 additions & 3 deletions src/pages/s.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type {
SearchPageQueryQueryVariables,
} from '@generated/graphql'
import { GatsbySeo } from 'gatsby-plugin-next-seo'
import SROnly from 'src/components/ui/SROnly'

export type Props = PageProps<
SearchPageQueryQuery,
Expand All @@ -26,7 +27,7 @@ function Page(props: Props) {

const { locale } = useSession()
const searchParams = useSearchParams(props.location)
const title = site?.siteMetadata?.title ?? ''
const title = 'Search Results | FastStore'

if (!searchParams) {
return null
Expand Down Expand Up @@ -56,8 +57,7 @@ function Page(props: Props) {
Sections: Components imported from '../components/sections' only.
Do not import or render components from any other folder in here.
*/}
<h1>{title}</h1>

<SROnly as="h1" text={title} />
<ProductGallery title="Search Results" />
</SearchProvider>
)
Expand Down
151 changes: 1 addition & 150 deletions src/styles/pages/product-listing.scss
Original file line number Diff line number Diff line change
@@ -1,163 +1,14 @@
@import "../scaffold.scss";

.product-listing {
padding-top: 0;
--product-listing-row-height: var(--space-6);

@include media(">=notebook") {
padding-top: var(--page-padding-notebook);
}
}
@import "../vendors/include-media";

.product-listing__breadcrumb {
padding-top: var(--space-3);
padding-bottom: var(--space-3);
}

// Temporary till we have skeletons.
.product-listing__data-loading {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding-top: var(--space-5);
}

.product-listing__hero {
width: 100%;
}

.product-listing__content-grid {
display: flex;
flex-direction: column;
padding-right: 0;
padding-left: 0;

@include media(">=notebook") {
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-templat-rows: var(--product-listing-row-height) auto;
padding-right: var(--page-padding-notebook);
padding-left: var(--page-padding-notebook);
column-gap: var(--space-4);
row-gap: var(--space-0);
}
}

.product-listing__filters {
@include media(">=notebook") {
position: sticky;
top: var(--grid-gap-0);
grid-row: span 2;
grid-column: 1 / span 3;
align-self: start;
}
}

.product-listing__sort {
display: flex;
align-items: center;
justify-content: space-between;
order: 1;
width: 100%;
min-height: rem(68px);
padding: var(--space-1) var(--space-3) var(--space-2);
background-color: var(--bg-neutral-lightest);

@include media(">=notebook") {
grid-column: 6 / span 7;
justify-content: flex-end;
order: unset;
min-height: initial;
padding: 0;
}
}

.product-listing__results-count {
display: flex;
align-items: center;
justify-content: center;
order: 2;
min-height: rem(45px);
padding: var(--space-2) var(--space-3);
background-color: var(--bg-neutral-light);

@include media(">=notebook") {
grid-column: 4 /span 2;
justify-content: left;
order: unset;
min-height: initial;
padding: 0;
background-color: unset;
}
}

.product-listing__results {
--padding: var(--space-1);

order: 3;
padding: var(--padding) var(--padding) 0;
background-color: var(--bg-neutral-light);

@include media(">=notebook") {
grid-column: 4 / span 9;
order: unset;
padding: 0;
background-color: unset;
}

.product-card[data-store-card] { min-width: 100%; }
}

.product-listing__results-sponsored {
margin: var(--space-1) calc(-1 * var(--padding));
padding: var(--space-4) var(--space-3);
background-color: var(--bg-neutral-lightest);

@include media(">=notebook") {
margin: var(--space-6) 0;
padding: 0;

[data-store-tiles] {
column-gap: var(--grid-gap-0);
row-gap: 0;
}
}

h3 { margin-bottom: var(--space-1); }
}

.product-listing__pagination {
display: flex;
align-items: center;
justify-content: center;
min-height: var(--space-13);
margin-right: calc(-1 * var(--padding));
margin-left: calc(-1 * var(--padding));
padding: var(--space-4);
background-color: var(--bg-neutral-lightest);

@include media(">=notebook") {
padding: var(--space-1) var(--space-2);
}

&--top {
margin-bottom: var(--padding);
}

&--bottom {
margin-top: var(--padding);
}

[data-store-button] {
width: 100%;

@include media(">=notebook") {
width: fit-content;
}
}
}

.product-listing__scroll-top {
display: flex;
justify-content: center;
Expand Down