From f121dea3ea8e570cdfe914022932423fe06a2fb5 Mon Sep 17 00:00:00 2001 From: muerwre Date: Sun, 25 Aug 2019 16:19:33 +0700 Subject: [PATCH] node layout placeholder --- src/containers/node/NodeLayout/index.tsx | 31 +++++++++++++++--------- src/redux/node/handlers.ts | 1 + src/redux/node/sagas.ts | 10 ++++++-- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx index 98960da8..644c8827 100644 --- a/src/containers/node/NodeLayout/index.tsx +++ b/src/containers/node/NodeLayout/index.tsx @@ -1,21 +1,18 @@ -import React, { FC, createElement } from 'react'; +import React, { FC, createElement, useEffect } from 'react'; import { RouteComponentProps } from 'react-router'; -import range from 'ramda/es/range'; +import { connect } from 'react-redux'; + import { selectNode } from '~/redux/node/selectors'; import { Card } from '~/components/containers/Card'; -import { ImageSwitcher } from '~/components/node/ImageSwitcher'; + import { NodePanel } from '~/components/node/NodePanel'; import { Group } from '~/components/containers/Group'; import { Padder } from '~/components/containers/Padder'; import { NodeNoComments } from '~/components/node/NodeNoComments'; -import { Comment } from '~/components/node/Comment'; - -import { Tags } from '~/components/node/Tags'; import { NodeRelated } from '~/components/node/NodeRelated'; import * as styles from './styles.scss'; import { NodeComments } from '~/components/node/NodeComments'; import { NodeTags } from '~/components/node/NodeTags'; -import { NodeImageBlockPlaceholder } from '~/components/node/NodeImageBlockPlaceholder'; import { NODE_COMPONENTS } from '~/redux/node/constants'; const mapStateToProps = selectNode; @@ -25,22 +22,29 @@ type IProps = ReturnType & typeof mapDispatchToProps & RouteComponentProps<{ id: string }> & {}; -const NodeLayout: FC = ({ +const NodeLayoutUnconnected: FC = ({ match: { params: { id }, }, is_loading, current: node, }) => { + useEffect(() => { + // if (is_loading) return; + // todo: if node not loading, load it! + }, []); + + useEffect(() => console.log({ is_loading }), [is_loading]); + const block = node && node.type && NODE_COMPONENTS[node.type] && NODE_COMPONENTS[node.type]; const view = block && block[is_loading ? 'placeholder' : 'component']; + console.log({ block, view }); + return ( {view && createElement(view, { node })} - - @@ -67,4 +71,9 @@ const NodeLayout: FC = ({ ); }; -export { NodeLayout }; +const NodeLayout = connect( + mapStateToProps, + mapDispatchToProps +)(NodeLayoutUnconnected); + +export { NodeLayout, NodeLayoutUnconnected }; diff --git a/src/redux/node/handlers.ts b/src/redux/node/handlers.ts index 96c0549c..00a59f07 100644 --- a/src/redux/node/handlers.ts +++ b/src/redux/node/handlers.ts @@ -5,6 +5,7 @@ import { INodeState } from './reducer'; const setSaveErrors = (state: INodeState, { errors }: ReturnType) => assocPath(['errors'], errors, state); + const setLoading = (state: INodeState, { is_loading }: ReturnType) => assocPath(['is_loading'], is_loading, state); diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts index 4a0b4b1f..b4055232 100644 --- a/src/redux/node/sagas.ts +++ b/src/redux/node/sagas.ts @@ -1,4 +1,6 @@ -import { takeLatest, call, put, select } from 'redux-saga/effects'; +import { takeLatest, call, put, select, delay } from 'redux-saga/effects'; +import { push } from 'connected-react-router'; + import { NODE_ACTIONS } from './constants'; import { nodeSave, nodeSetSaveErrors, nodeLoadNode, nodeSetLoading } from './actions'; import { postNode } from './api'; @@ -7,7 +9,6 @@ import { flowSetNodes } from '../flow/actions'; import { ERRORS } from '~/constants/errors'; import { modalSetShown } from '../modal/actions'; import { selectFlowNodes } from '../flow/selectors'; -import { push } from 'connected-react-router'; import { URLS } from '~/constants/urls'; function* onNodeSave({ node }: ReturnType) { @@ -35,6 +36,11 @@ function* onNodeLoad({ id }: ReturnType) { yield put(nodeSetSaveErrors({})); yield put(push(URLS.NODE_URL(id))); + + yield delay(1000); + + yield put(nodeSetLoading(false)); + yield put(nodeSetSaveErrors({})); } export default function* nodeSaga() {