diff --git a/dev-test/config.yml b/dev-test/config.yml index 6eac43f98db9..2f57fc63337d 100644 --- a/dev-test/config.yml +++ b/dev-test/config.yml @@ -18,7 +18,7 @@ collections: # A list of collections the CMS should be able to edit summary: '{{title}} -- {{year}}/{{month}}/{{day}}' create: true # Allow users to create new documents in this collection editor: - visualEditing: true + visualEditing: false view_filters: - label: Posts With Index field: title diff --git a/packages/decap-cms-core/src/components/Collection/Entries/EntryCard.js b/packages/decap-cms-core/src/components/Collection/Entries/EntryCard.js index 01e0027d7069..15fc07721c73 100644 --- a/packages/decap-cms-core/src/components/Collection/Entries/EntryCard.js +++ b/packages/decap-cms-core/src/components/Collection/Entries/EntryCard.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import styled from '@emotion/styled'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; @@ -81,7 +81,7 @@ const CardBody = styled.div` } `; -const CardImage = styled.div` +const StyledImage = styled.div` background-image: url(${props => props.src}); background-position: center center; background-size: cover; @@ -89,6 +89,16 @@ const CardImage = styled.div` height: 150px; `; +function CardImage({ getAsset, value, field }) { + const [asset, setAsset] = useState(null); + + useEffect(() => { + setAsset(value ? getAsset(value, field) : null); + }, [value, field, getAsset]); + + return asset ? : null; +} + function EntryCard({ path, summary, @@ -117,7 +127,7 @@ function EntryCard({ {collectionLabel ? {collectionLabel} : null} {summary} - {image ? : null} + {image ? : null} ); diff --git a/packages/decap-cms-widget-file/src/withFileControl.js b/packages/decap-cms-widget-file/src/withFileControl.js index 115f129dc2aa..839375d610db 100644 --- a/packages/decap-cms-widget-file/src/withFileControl.js +++ b/packages/decap-cms-widget-file/src/withFileControl.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import styled from '@emotion/styled'; @@ -61,8 +61,19 @@ const StyledImage = styled.img` object-fit: contain; `; -function Image(props) { - return ; +function Image({ value, field, getAsset }) { + const [asset, setAsset] = useState(null); + + useEffect(() => { + if (value) { + const newAsset = getAsset(value, field); + setAsset(newAsset); + } else { + setAsset(null); + } + }, [value, field, getAsset]); + + return asset ? : null; } function SortableImageButtons({ onRemove, onReplace }) { @@ -89,7 +100,7 @@ function SortableImage(props) { return (
- + { const { getAsset, value, field } = this.props; const items = valueListToSortableArray(value); + if (isMultiple(value)) { return ( - + ); }; diff --git a/packages/decap-cms-widget-image/src/ImagePreview.js b/packages/decap-cms-widget-image/src/ImagePreview.js index b74e0ca44837..918d03b07de8 100644 --- a/packages/decap-cms-widget-image/src/ImagePreview.js +++ b/packages/decap-cms-widget-image/src/ImagePreview.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import styled from '@emotion/styled'; import { List } from 'immutable'; @@ -11,7 +11,18 @@ const StyledImage = styled(({ src }) => ; + const [asset, setAsset] = useState(null); + + useEffect(() => { + if (value) { + const newAsset = getAsset(value, field); + setAsset(newAsset); + } else { + setAsset(null); + } + }, [value, field, getAsset]); + + return asset ? : null; } function ImagePreviewContent(props) { diff --git a/packages/decap-cms-widget-object/src/ObjectPreview.js b/packages/decap-cms-widget-object/src/ObjectPreview.js index f9015fc0f8c3..63bb386eec59 100644 --- a/packages/decap-cms-widget-object/src/ObjectPreview.js +++ b/packages/decap-cms-widget-object/src/ObjectPreview.js @@ -1,5 +1,5 @@ import React from 'react'; -import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; import { WidgetPreviewContainer } from 'decap-cms-ui-default'; function ObjectPreview({ field }) { @@ -11,7 +11,7 @@ function ObjectPreview({ field }) { } ObjectPreview.propTypes = { - field: PropTypes.node, + field: ImmutablePropTypes.map, }; export default ObjectPreview;