import React, { useState, useEffect } from 'react'; // Redux part import { useSelector, useDispatch } from 'react-redux'; import { StoreState } from 'store/rootReducer'; // Import actions here import classNames from 'classnames/bind'; import TextItem from 'components/items/TextItem'; import parse from 'html-react-parser'; import { withRouter } from 'react-router-dom'; import article from 'store/article'; import config from 'config/general'; import styleIdentifiers from './CustomArticle.module.scss'; const styles = classNames.bind(styleIdentifiers); export interface CustomArticleProps {} const CustomArticle = (props: CustomArticleProps) => { const { nodeItem, wrapperComponent, className, wrapperClassName, containerClassName, paramKey, customNode, match: { params }, ...rest } = props; // mapStateToProps const lg = useSelector((state: StoreState) => state.content.lg); const detail = useSelector((state: StoreState) => state.article.detail?.data); // Allow to dispatch actions const dispatch = useDispatch(); const loadArticle = data => dispatch(article.actions.getOneArticle.request.action(data)); function removeStyle(toRemove) { for (let index = 0; index < toRemove.length; index++) { const element = toRemove[index]; if (element && element.attribs && element.attribs.style) { element.attribs.style = null; } } return toRemove; } function renderContent(content): JSX { const newContent = content; const options = { replace: (domNode): JSX => { if (nodeItem && customNode && customNode.includes(domNode.name)) { const NodeItem = nodeItem; return ; } return null; }, }; return parse(newContent, options); } useEffect(() => { if (detail?.urls?.[lg] !== params[paramKey || 'url'] || detail?.urls?.[config.defaultLanguage] !== params[paramKey || 'url']) { loadArticle({ data: { url: params[paramKey], lg }, noFeedback: true, callbackError: () => { loadArticle({ data: { url: params[paramKey], lg: config.defaultLanguage }, noFeedback: true }); }, }); } }, [params]); const WrapperComponent = wrapperComponent; return (
{WrapperComponent ? (
{detail ? renderContent(detail.content[lg] || detail.content[config.defaultLanguage]) :
Loading ...
}
) : (
{detail ? renderContent(detail.content[lg] || detail.content[config.defaultLanguage]) :
Loading ...
}
)}
); }; export default withRouter(CustomArticle);