Merge branch 'master' into fix-navigation

This commit is contained in:
Krzysztof Białogłowicz 2019-09-26 15:50:55 +02:00 committed by GitHub
commit 7c682ab685
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
91 changed files with 25882 additions and 14170 deletions

View file

@ -25,3 +25,4 @@ All notable, unreleased changes to this project will be documented in this file.
- Add sorting to product list - #173 by @dominik-zeglen
- Add Heroku integration - #175 by @bogdal
- Fix navigation - #182 by @benekex2
- Add testcafe tags to attributes, categories, collections and product types - #178 by @dominik-zeglen

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -13,7 +13,7 @@ import Skeleton from "@saleor/components/Skeleton";
import TableHead from "@saleor/components/TableHead";
import TablePagination from "@saleor/components/TablePagination";
import { translateBoolean } from "@saleor/intl";
import { renderCollection } from "@saleor/misc";
import { maybe, renderCollection } from "@saleor/misc";
import { ListActions, ListProps } from "@saleor/types";
import { AttributeList_attributes_edges_node } from "../../types/AttributeList";
@ -139,6 +139,11 @@ const AttributeList: React.StatelessComponent<AttributeListProps> = ({
key={attribute ? attribute.id : "skeleton"}
onClick={attribute && onRowClick(attribute.id)}
className={classes.link}
data-tc="id"
data-tc-id={maybe(() => attribute.id)}
data-tc-values={JSON.stringify(
maybe(() => attribute.values, [])
)}
>
<TableCell padding="checkbox">
<Checkbox
@ -148,27 +153,43 @@ const AttributeList: React.StatelessComponent<AttributeListProps> = ({
onChange={() => toggle(attribute.id)}
/>
</TableCell>
<TableCell className={classes.colSlug}>
<TableCell className={classes.colSlug} data-tc="slug">
{attribute ? attribute.slug : <Skeleton />}
</TableCell>
<TableCell className={classes.colName}>
<TableCell className={classes.colName} data-tc="name">
{attribute ? attribute.name : <Skeleton />}
</TableCell>
<TableCell className={classes.colVisible}>
<TableCell
className={classes.colVisible}
data-tc="visible"
data-tc-visible={maybe(() => attribute.visibleInStorefront)}
>
{attribute ? (
translateBoolean(attribute.visibleInStorefront, intl)
) : (
<Skeleton />
)}
</TableCell>
<TableCell className={classes.colSearchable}>
<TableCell
className={classes.colSearchable}
data-tc="searchable"
data-tc-searchable={maybe(
() => attribute.filterableInDashboard
)}
>
{attribute ? (
translateBoolean(attribute.filterableInDashboard, intl)
) : (
<Skeleton />
)}
</TableCell>
<TableCell className={classes.colFaceted}>
<TableCell
className={classes.colFaceted}
data-tc="use-in-faceted-search"
data-tc-use-in-faceted-search={maybe(
() => attribute.filterableInStorefront
)}
>
{attribute ? (
translateBoolean(attribute.filterableInStorefront, intl)
) : (

View file

@ -72,6 +72,11 @@ const attributeList = gql`
edges {
node {
...AttributeFragment
values {
id
name
slug
}
}
}
pageInfo {

View file

@ -8,6 +8,13 @@ import { AttributeFilterInput } from "./../../types/globalTypes";
// GraphQL query operation: AttributeList
// ====================================================
export interface AttributeList_attributes_edges_node_values {
__typename: "AttributeValue";
id: string;
name: string | null;
slug: string | null;
}
export interface AttributeList_attributes_edges_node {
__typename: "Attribute";
id: string;
@ -16,6 +23,7 @@ export interface AttributeList_attributes_edges_node {
visibleInStorefront: boolean;
filterableInDashboard: boolean;
filterableInStorefront: boolean;
values: (AttributeList_attributes_edges_node_values | null)[] | null;
}
export interface AttributeList_attributes_edges {

View file

@ -17,7 +17,7 @@ import Checkbox from "@saleor/components/Checkbox";
import Skeleton from "@saleor/components/Skeleton";
import TableHead from "@saleor/components/TableHead";
import TablePagination from "@saleor/components/TablePagination";
import { renderCollection } from "@saleor/misc";
import { maybe, renderCollection } from "@saleor/misc";
import { ListActions, ListProps } from "@saleor/types";
const styles = (theme: Theme) =>
@ -126,6 +126,8 @@ const CategoryList = withStyles(styles, { name: "CategoryList" })(
onClick={category ? onRowClick(category.id) : undefined}
key={category ? category.id : "skeleton"}
selected={isSelected}
data-tc="id"
data-tc-id={maybe(() => category.id)}
>
<TableCell padding="checkbox">
<Checkbox
@ -135,7 +137,7 @@ const CategoryList = withStyles(styles, { name: "CategoryList" })(
onChange={() => toggle(category.id)}
/>
</TableCell>
<TableCell className={classes.colName}>
<TableCell className={classes.colName} data-tc="name">
{category && category.name ? category.name : <Skeleton />}
</TableCell>
<TableCell className={classes.colSubcategories}>

View file

@ -122,6 +122,8 @@ const CollectionList = withStyles(styles, { name: "CollectionList" })(
onClick={collection ? onRowClick(collection.id) : undefined}
key={collection ? collection.id : "skeleton"}
selected={isSelected}
data-tc="id"
data-tc-id={maybe(() => collection.id)}
>
<TableCell padding="checkbox">
<Checkbox
@ -131,7 +133,7 @@ const CollectionList = withStyles(styles, { name: "CollectionList" })(
onChange={() => toggle(collection.id)}
/>
</TableCell>
<TableCell className={classes.colName}>
<TableCell className={classes.colName} data-tc="name">
{maybe<React.ReactNode>(
() => collection.name,
<Skeleton />
@ -143,7 +145,11 @@ const CollectionList = withStyles(styles, { name: "CollectionList" })(
<Skeleton />
)}
</TableCell>
<TableCell className={classes.colAvailability}>
<TableCell
className={classes.colAvailability}
data-tc="published"
data-tc-published={maybe(() => collection.isPublished)}
>
{maybe(
() => (
<StatusLabel

View file

@ -85,7 +85,13 @@ const ProductTypeAttributes = withStyles(styles, {
const intl = useIntl();
return (
<Card>
<Card
data-tc={
type === AttributeTypeEnum.PRODUCT
? "product-attributes"
: "variant-attributes"
}
>
<CardTitle
title={
type === AttributeTypeEnum.PRODUCT
@ -150,6 +156,8 @@ const ProductTypeAttributes = withStyles(styles, {
}
key={maybe(() => attribute.id)}
index={attributeIndex || 0}
data-tc="id"
data-tc-id={maybe(() => attribute.id)}
>
<TableCell padding="checkbox">
<Checkbox
@ -159,14 +167,14 @@ const ProductTypeAttributes = withStyles(styles, {
onChange={() => toggle(attribute.id)}
/>
</TableCell>
<TableCell className={classes.colName}>
<TableCell className={classes.colName} data-tc="name">
{maybe(() => attribute.name) ? (
attribute.name
) : (
<Skeleton />
)}
</TableCell>
<TableCell className={classes.colSlug}>
<TableCell className={classes.colSlug} data-tc="slug">
{maybe(() => attribute.slug) ? (
attribute.slug
) : (

View file

@ -124,6 +124,8 @@ const ProductTypeList = withStyles(styles, { name: "ProductTypeList" })(
key={productType ? productType.id : "skeleton"}
onClick={productType ? onRowClick(productType.id) : undefined}
selected={isSelected}
data-tc="id"
data-tc-id={maybe(() => productType.id)}
>
<TableCell padding="checkbox">
<Checkbox
@ -136,7 +138,7 @@ const ProductTypeList = withStyles(styles, { name: "ProductTypeList" })(
<TableCell className={classes.colName}>
{productType ? (
<>
{productType.name}
<span data-tc="name">{productType.name}</span>
<Typography variant="caption">
{maybe(() => productType.hasVariants)
? intl.formatMessage({

File diff suppressed because it is too large Load diff