Add product type link in product details view (#1724) (#1750)

* add link to product type in product details

* fix tests

* Apply CR suggestion

Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io>

* improve Link component

* Fix tests - add memory router

* fix undefined value in createHref

* fix onclick when it is not provided

* Fix undefined app mount uri

* fix undefined api uri in ci/cd tests

* remove onclick from product type link

Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io>

Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io>
This commit is contained in:
Michał Droń 2022-01-13 13:04:45 +01:00 committed by GitHub
parent 55492aff9a
commit ce2f90946c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 148 additions and 100 deletions

View file

@ -3,6 +3,7 @@ import { TypographyProps } from "@material-ui/core/Typography";
import { makeStyles } from "@saleor/macaw-ui"; import { makeStyles } from "@saleor/macaw-ui";
import classNames from "classnames"; import classNames from "classnames";
import React from "react"; import React from "react";
import { Link as RouterLink } from "react-router-dom";
const useStyles = makeStyles( const useStyles = makeStyles(
theme => ({ theme => ({
@ -19,6 +20,9 @@ const useStyles = makeStyles(
underline: { underline: {
textDecoration: "underline" textDecoration: "underline"
}, },
noUnderline: {
textDecoration: "none"
},
disabled: { disabled: {
cursor: "default", cursor: "default",
color: theme.palette.textHighlighted.inactive color: theme.palette.textHighlighted.inactive
@ -27,11 +31,14 @@ const useStyles = makeStyles(
{ name: "Link" } { name: "Link" }
); );
const isExternalURL = url => /^https?:\/\//.test(url);
interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> { interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
href?: string;
color?: "primary" | "secondary"; color?: "primary" | "secondary";
underline?: boolean; underline?: boolean;
typographyProps?: TypographyProps; typographyProps?: TypographyProps;
onClick: () => void; onClick?: () => void;
disabled?: boolean; disabled?: boolean;
} }
@ -43,32 +50,47 @@ const Link: React.FC<LinkProps> = props => {
underline = false, underline = false,
onClick, onClick,
disabled, disabled,
href,
...linkProps ...linkProps
} = props; } = props;
const classes = useStyles(props); const classes = useStyles(props);
return ( const commonLinkProps = {
<Typography className: classNames(className, {
component="a" [classes.root]: true,
className={classNames(className, { [classes[color]]: true,
[classes.root]: true, [classes.underline]: underline,
[classes[color]]: true, [classes.noUnderline]: !underline,
[classes.underline]: underline, [classes.disabled]: disabled
[classes.disabled]: disabled }),
})} onClick: event => {
onClick={event => { if (disabled || !onClick) {
if (disabled) { return;
return; }
}
event.preventDefault(); event.preventDefault();
onClick(); onClick();
}} },
{...linkProps} ...linkProps
> };
{children}
</Typography> return (
<>
{!!href && !isExternalURL(href) ? (
<RouterLink to={disabled ? undefined : href} {...commonLinkProps}>
{children}
</RouterLink>
) : (
<Typography
component="a"
href={disabled ? undefined : href}
{...commonLinkProps}
>
{children}
</Typography>
)}
</>
); );
}; };
Link.displayName = "Link"; Link.displayName = "Link";

View file

@ -2,7 +2,7 @@ import packageInfo from "../package.json";
import { SearchVariables } from "./hooks/makeSearch"; import { SearchVariables } from "./hooks/makeSearch";
import { ListSettings, ListViews, Pagination } from "./types"; import { ListSettings, ListViews, Pagination } from "./types";
export const APP_MOUNT_URI = process.env.APP_MOUNT_URI; export const APP_MOUNT_URI = process.env.APP_MOUNT_URI || "/";
export const APP_DEFAULT_URI = "/"; export const APP_DEFAULT_URI = "/";
export const API_URI = process.env.API_URI; export const API_URI = process.env.API_URI;
export const SW_INTERVAL = parseInt(process.env.SW_INTERVAL, 0); export const SW_INTERVAL = parseInt(process.env.SW_INTERVAL, 0);

View file

@ -3,6 +3,7 @@ import CardSpacer from "@saleor/components/CardSpacer";
import CardTitle from "@saleor/components/CardTitle"; import CardTitle from "@saleor/components/CardTitle";
import { FormSpacer } from "@saleor/components/FormSpacer"; import { FormSpacer } from "@saleor/components/FormSpacer";
import Hr from "@saleor/components/Hr"; import Hr from "@saleor/components/Hr";
import Link from "@saleor/components/Link";
import MultiAutocompleteSelectField, { import MultiAutocompleteSelectField, {
MultiAutocompleteChoiceType MultiAutocompleteChoiceType
} from "@saleor/components/MultiAutocompleteSelectField"; } from "@saleor/components/MultiAutocompleteSelectField";
@ -12,7 +13,8 @@ import SingleAutocompleteSelectField, {
import { ProductErrorFragment } from "@saleor/fragments/types/ProductErrorFragment"; import { ProductErrorFragment } from "@saleor/fragments/types/ProductErrorFragment";
import { ChangeEvent } from "@saleor/hooks/useForm"; import { ChangeEvent } from "@saleor/hooks/useForm";
import { makeStyles } from "@saleor/macaw-ui"; import { makeStyles } from "@saleor/macaw-ui";
import { maybe } from "@saleor/misc"; import { createHref, maybe } from "@saleor/misc";
import { productTypeUrl } from "@saleor/productTypes/urls";
import { FetchMoreProps } from "@saleor/types"; import { FetchMoreProps } from "@saleor/types";
import { getFormErrors, getProductErrorMessage } from "@saleor/utils/errors"; import { getFormErrors, getProductErrorMessage } from "@saleor/utils/errors";
import React from "react"; import React from "react";
@ -130,7 +132,12 @@ const ProductOrganization: React.FC<ProductOrganizationProps> = props => {
<Typography className={classes.label} variant="caption"> <Typography className={classes.label} variant="caption">
<FormattedMessage defaultMessage="Product Type" /> <FormattedMessage defaultMessage="Product Type" />
</Typography> </Typography>
<Typography>{maybe(() => productType.name, "...")}</Typography> <Link
href={createHref(productTypeUrl(productType?.id) ?? "")}
disabled={!productType?.id}
>
{productType?.name ?? "..."}
</Link>
<CardSpacer /> <CardSpacer />
<Typography className={classes.label} variant="caption"> <Typography className={classes.label} variant="caption">
<FormattedMessage defaultMessage="Product Type" /> <FormattedMessage defaultMessage="Product Type" />

View file

@ -15,10 +15,14 @@ import ProductUpdatePage, { ProductUpdatePageProps } from "./ProductUpdatePage";
const product = productFixture(placeholderImage); const product = productFixture(placeholderImage);
const channels = createChannelsData(channelsList); const channels = createChannelsData(channelsList);
import * as _useNavigator from "@saleor/hooks/useNavigator";
import Adapter from "enzyme-adapter-react-16"; import Adapter from "enzyme-adapter-react-16";
import { MemoryRouter } from "react-router-dom";
configure({ adapter: new Adapter() }); configure({ adapter: new Adapter() });
const onSubmit = jest.fn(); const onSubmit = jest.fn();
const useNavigator = jest.spyOn(_useNavigator, "default");
const props: ProductUpdatePageProps = { const props: ProductUpdatePageProps = {
...listActionsProps, ...listActionsProps,
@ -81,11 +85,14 @@ const selectors = {
}; };
describe("Product details page", () => { describe("Product details page", () => {
useNavigator.mockImplementation();
it("can select empty option on attribute", () => { it("can select empty option on attribute", () => {
const component = mount( const component = mount(
<Wrapper> <MemoryRouter>
<ProductUpdatePage {...props} /> <Wrapper>
</Wrapper> <ProductUpdatePage {...props} />
</Wrapper>
</MemoryRouter>
); );
expect(component.find(selectors.dropdown).exists()).toBeFalsy(); expect(component.find(selectors.dropdown).exists()).toBeFalsy();

View file

@ -8805,7 +8805,7 @@ exports[`Storyshots Generics / Link with choices default 1`] = `
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Åland Islands Åland Islands
<svg <svg
@ -17849,7 +17849,7 @@ exports[`Storyshots Orders / OrderHistory default 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -22951,7 +22951,7 @@ exports[`Storyshots Shipping zones card with no options selected 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -23169,7 +23169,7 @@ exports[`Storyshots Shipping zones card with options selected 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -45722,7 +45722,7 @@ exports[`Storyshots Views / Channels / Channel details default 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -46257,7 +46257,7 @@ exports[`Storyshots Views / Channels / Channel details disabled 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -46788,7 +46788,7 @@ exports[`Storyshots Views / Channels / Channel details loading 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -47319,7 +47319,7 @@ exports[`Storyshots Views / Channels / Channel details with data 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -47856,7 +47856,7 @@ exports[`Storyshots Views / Channels / Channel details with errors 1`] = `
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -48338,7 +48338,7 @@ exports[`Storyshots Views / Channels / Channel details without editable currency
class="CardAddItemsFooter-container-id" class="CardAddItemsFooter-container-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
data-test-id="add-shipping-zone-link" data-test-id="add-shipping-zone-link"
> >
Add Shipping Zones Add Shipping Zones
@ -111673,7 +111673,7 @@ exports[`Storyshots Views / Orders / Order details cancelled 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -113787,7 +113787,7 @@ exports[`Storyshots Views / Orders / Order details default 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -115933,7 +115933,7 @@ exports[`Storyshots Views / Orders / Order details fulfilled 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -118675,7 +118675,7 @@ exports[`Storyshots Views / Orders / Order details no customer note 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -120819,7 +120819,7 @@ exports[`Storyshots Views / Orders / Order details no payment 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -122965,7 +122965,7 @@ exports[`Storyshots Views / Orders / Order details no shipping address 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -125103,7 +125103,7 @@ exports[`Storyshots Views / Orders / Order details partially fulfilled 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -127249,7 +127249,7 @@ exports[`Storyshots Views / Orders / Order details payment confirmed 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -129395,7 +129395,7 @@ exports[`Storyshots Views / Orders / Order details payment error 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -131541,7 +131541,7 @@ exports[`Storyshots Views / Orders / Order details pending payment 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -133687,7 +133687,7 @@ exports[`Storyshots Views / Orders / Order details refunded payment 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -135833,7 +135833,7 @@ exports[`Storyshots Views / Orders / Order details rejected payment 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -137979,7 +137979,7 @@ exports[`Storyshots Views / Orders / Order details unfulfilled 1`] = `
Products were refunded by Products were refunded by
</div> </div>
<a <a
class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id TimelineEventHeader-titleElement-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Jane Doe Jane Doe
</a> </a>
@ -138673,7 +138673,7 @@ exports[`Storyshots Views / Orders / Order draft default 1`] = `
class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id" class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
<div <div
class="Money-container-id" class="Money-container-id"
@ -138815,7 +138815,7 @@ exports[`Storyshots Views / Orders / Order draft default 1`] = `
class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id" class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
<div <div
class="Money-container-id" class="Money-container-id"
@ -138897,7 +138897,7 @@ exports[`Storyshots Views / Orders / Order draft default 1`] = `
> >
<td> <td>
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Add Discount Add Discount
</a> </a>
@ -139779,7 +139779,7 @@ exports[`Storyshots Views / Orders / Order draft no user permissions 1`] = `
class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id" class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
<div <div
class="Money-container-id" class="Money-container-id"
@ -139921,7 +139921,7 @@ exports[`Storyshots Views / Orders / Order draft no user permissions 1`] = `
class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id" class="MuiTableCell-root-id MuiTableCell-body-id OrderDraftDetailsProducts-colPrice-id"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
<div <div
class="Money-container-id" class="Money-container-id"
@ -140003,7 +140003,7 @@ exports[`Storyshots Views / Orders / Order draft no user permissions 1`] = `
> >
<td> <td>
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
Add Discount Add Discount
</a> </a>
@ -185959,7 +185959,7 @@ exports[`Storyshots Views / Products / Create product variant no warehouses 1`]
> >
There are no warehouses set up for your store. To add stock quantity to the variant please There are no warehouses set up for your store. To add stock quantity to the variant please
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
configure a warehouse configure a warehouse
</a> </a>
@ -188685,7 +188685,7 @@ exports[`Storyshots Views / Products / Product edit form errors 1`] = `
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -189373,11 +189373,12 @@ exports[`Storyshots Views / Products / Product edit form errors 1`] = `
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -190474,7 +190475,7 @@ exports[`Storyshots Views / Products / Product edit limits reached 1`] = `
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -191162,11 +191163,12 @@ exports[`Storyshots Views / Products / Product edit limits reached 1`] = `
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -192180,7 +192182,7 @@ exports[`Storyshots Views / Products / Product edit no limits 1`] = `
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -192868,11 +192870,12 @@ exports[`Storyshots Views / Products / Product edit no limits 1`] = `
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -193628,7 +193631,7 @@ exports[`Storyshots Views / Products / Product edit no product attributes 1`] =
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -194316,11 +194319,12 @@ exports[`Storyshots Views / Products / Product edit no product attributes 1`] =
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -195896,11 +195900,12 @@ exports[`Storyshots Views / Products / Product edit no stock and no variants 1`]
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -197476,11 +197481,12 @@ exports[`Storyshots Views / Products / Product edit no stock, no variants and no
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -199056,11 +199062,12 @@ exports[`Storyshots Views / Products / Product edit no variants 1`] = `
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -200074,7 +200081,7 @@ exports[`Storyshots Views / Products / Product edit when data is fully loaded 1`
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -200762,11 +200769,12 @@ exports[`Storyshots Views / Products / Product edit when data is fully loaded 1`
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -201885,11 +201893,12 @@ exports[`Storyshots Views / Products / Product edit when loading data 1`] = `
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id Link-disabled-id"
href=""
> >
... ...
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -202760,7 +202769,7 @@ exports[`Storyshots Views / Products / Product edit when product has no images 1
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -203448,11 +203457,12 @@ exports[`Storyshots Views / Products / Product edit when product has no images 1
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -205028,11 +205038,12 @@ exports[`Storyshots Views / Products / Product edit when product has no variants
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />
@ -206046,7 +206057,7 @@ exports[`Storyshots Views / Products / Product edit with channels 1`] = `
tabindex="0" tabindex="0"
> >
<a <a
class="MuiTypography-root-id Link-root-id Link-primary-id MuiTypography-body1-id" class="MuiTypography-root-id Link-root-id Link-primary-id Link-noUnderline-id MuiTypography-body1-id"
> >
All Warehouses All Warehouses
<svg <svg
@ -206734,11 +206745,12 @@ exports[`Storyshots Views / Products / Product edit with channels 1`] = `
> >
Product Type Product Type
</div> </div>
<div <a
class="MuiTypography-root-id MuiTypography-body1-id" class="Link-root-id Link-primary-id Link-noUnderline-id"
href="/product-types/pt76406"
> >
Versatile Versatile
</div> </a>
<div <div
class="CardSpacer-spacer-id" class="CardSpacer-spacer-id"
/> />