u
This commit is contained in:
@@ -20,21 +20,17 @@ import ArticleViewEANs from './boxes/ArticleViewEANs';
|
|||||||
import ArticleViewPrice from './boxes/ArticleViewPrice';
|
import ArticleViewPrice from './boxes/ArticleViewPrice';
|
||||||
import ArticleViewLists from './boxes/ArticleViewLists';
|
import ArticleViewLists from './boxes/ArticleViewLists';
|
||||||
|
|
||||||
function viewStateFromStore(store, sku) {
|
|
||||||
const categoryState = store.getCategoryState();
|
|
||||||
return {
|
|
||||||
article: store.getArticle(sku) ?? null,
|
|
||||||
categories: categoryState?.categories ?? null,
|
|
||||||
rootCategoryId: categoryState?.rootCategoryId ?? null,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
class ArticleView extends Component {
|
class ArticleView extends Component {
|
||||||
static contextType = StorageManagerContext;
|
static contextType = StorageManagerContext;
|
||||||
|
|
||||||
constructor(props, context) {
|
constructor(props, context) {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
this.state = viewStateFromStore(context, props.sku);
|
const { article, unwatch } = context.article.watch(
|
||||||
|
props.sku,
|
||||||
|
(next) => this.setState({ article: next }),
|
||||||
|
);
|
||||||
|
this.state = { article };
|
||||||
|
this.unwatchArticle = unwatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate(prevProps) {
|
componentDidUpdate(prevProps) {
|
||||||
@@ -42,7 +38,13 @@ class ArticleView extends Component {
|
|||||||
const { article } = this.state;
|
const { article } = this.state;
|
||||||
|
|
||||||
if (prevProps.sku !== sku) {
|
if (prevProps.sku !== sku) {
|
||||||
this.setState(viewStateFromStore(this.context, sku));
|
this.unwatchArticle?.();
|
||||||
|
const { article: next, unwatch } = this.context.article.watch(
|
||||||
|
sku,
|
||||||
|
(updated) => this.setState({ article: updated }),
|
||||||
|
);
|
||||||
|
this.unwatchArticle = unwatch;
|
||||||
|
this.setState({ article: next });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,9 +55,17 @@ class ArticleView extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
this.unwatchArticle?.();
|
||||||
|
this.unwatchArticle = null;
|
||||||
|
}
|
||||||
|
|
||||||
handleArticleDeleted = () => {
|
handleArticleDeleted = () => {
|
||||||
const { navigate } = this.props;
|
const { navigate } = this.props;
|
||||||
const { article, categories, rootCategoryId } = this.state;
|
const { article } = this.state;
|
||||||
|
const categoryState = this.context.getCategoryState();
|
||||||
|
const categories = categoryState?.categories ?? null;
|
||||||
|
const rootCategoryId = categoryState?.rootCategoryId ?? null;
|
||||||
const categoryId = article?.categoryIds?.[0];
|
const categoryId = article?.categoryIds?.[0];
|
||||||
if (categories && rootCategoryId != null && categoryId != null) {
|
if (categories && rootCategoryId != null && categoryId != null) {
|
||||||
navigate(buildCategoryPath(categories, rootCategoryId, categoryId));
|
navigate(buildCategoryPath(categories, rootCategoryId, categoryId));
|
||||||
@@ -72,7 +82,10 @@ class ArticleView extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { tab } = this.props;
|
const { tab } = this.props;
|
||||||
const { article, categories, rootCategoryId } = this.state;
|
const { article } = this.state;
|
||||||
|
const categoryState = this.context.getCategoryState();
|
||||||
|
const categories = categoryState?.categories ?? null;
|
||||||
|
const rootCategoryId = categoryState?.rootCategoryId ?? null;
|
||||||
|
|
||||||
if (!article || categories == null || rootCategoryId == null) return null;
|
if (!article || categories == null || rootCategoryId == null) return null;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user