Skip to content

Commit 232e779

Browse files
andrehoffmann30markusguenther
authored andcommitted
TASK: adjust asset editor to allow custom upload screen
1 parent b9738f5 commit 232e779

File tree

2 files changed

+53
-6
lines changed

2 files changed

+53
-6
lines changed

packages/neos-ui-editors/src/Editors/AssetEditor/index.js

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import React, {PureComponent} from 'react';
22
import PropTypes from 'prop-types';
3-
import {MultiSelectBox, SelectBox} from '@neos-project/react-ui-components';
3+
import {$get} from 'plow-js';
4+
import {connect} from 'react-redux';
5+
import MultiSelectBox from '@neos-project/react-ui-components/src/MultiSelectBox/';
6+
import SelectBox from '@neos-project/react-ui-components/src/SelectBox/';
47
import {dndTypes} from '@neos-project/neos-ui-constants';
58
import {neos} from '@neos-project/neos-ui-decorators';
6-
import {$get} from 'plow-js';
9+
import {selectors} from '@neos-project/neos-ui-redux-store';
10+
711
import Controls from './Components/Controls/index';
812
import AssetOption from '../../Library/AssetOption';
913
import {AssetUpload} from '../../Library/index';
@@ -14,6 +18,10 @@ const DEFAULT_FEATURES = {
1418
upload: true
1519
};
1620

21+
@connect(state => ({
22+
siteNodePath: state?.cr?.nodes?.siteNode,
23+
focusedNodePath: selectors.CR.Nodes.focusedNodePathSelector(state)
24+
}), null, null, {forwardRef: true})
1725
@neos(globalRegistry => ({
1826
assetLookupDataLoader: globalRegistry.get('dataLoaders').get('AssetLookup'),
1927
i18nRegistry: globalRegistry.get('i18n'),
@@ -44,7 +52,9 @@ export default class AssetEditor extends PureComponent {
4452
}).isRequired,
4553
secondaryEditorsRegistry: PropTypes.object.isRequired,
4654
renderSecondaryInspector: PropTypes.func.isRequired,
47-
imagesOnly: PropTypes.bool
55+
imagesOnly: PropTypes.bool,
56+
siteNodePath: PropTypes.string.isRequired,
57+
focusedNodePath: PropTypes.string.isRequired
4858
};
4959

5060
static defaultProps = {
@@ -179,8 +189,30 @@ export default class AssetEditor extends PureComponent {
179189
}
180190
}
181191

192+
afterUpload = uploadResult => {
193+
if (uploadResult?.object) {
194+
this.handleValueChange(uploadResult?.object?.__identity);
195+
} else {
196+
this.handleValuesChange(uploadResult);
197+
}
198+
}
199+
182200
handleChooseFile = () => {
183-
this.assetUpload.chooseFromLocalFileSystem();
201+
const {secondaryEditorsRegistry, options} = this.props;
202+
if (secondaryEditorsRegistry.get('Neos.Neos/Inspector/Secondary/Editors/AssetUploadScreen')) {
203+
// set media type constraint to "image/*" if it is not explicitly specified via options.constraints.mediaTypes
204+
const constraints = {...options.constraints, mediaTypes: (options.constraints && options.constraints.mediaTypes) || ['image/*']};
205+
const {component: AssetUploadScreen} = secondaryEditorsRegistry.get('Neos.Neos/Inspector/Secondary/Editors/AssetUploadScreen');
206+
const additionalData = {
207+
propertyName: this.props.identifier,
208+
focusedNodePath: this.props.focusedNodePath,
209+
siteNodePath: this.props.siteNodePath,
210+
metaData: this.props.imagesOnly ? 'Image' : 'Asset'
211+
};
212+
this.props.renderSecondaryInspector('ASSET_UPLOAD_MEDIA', () => <AssetUploadScreen type={this.props.imagesOnly ? 'images' : 'all'} constraints={constraints} onComplete={this.afterUpload} additionalData={additionalData}/>);
213+
} else {
214+
this.assetUpload.chooseFromLocalFileSystem();
215+
}
184216
}
185217

186218
renderControls() {

packages/neos-ui-editors/src/Editors/Image/index.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import React, {Component} from 'react';
22
import PropTypes from 'prop-types';
33
import {$set, $drop, $get} from 'plow-js';
4+
import {connect} from 'react-redux';
45
import mergeClassNames from 'classnames';
56

67
import backend from '@neos-project/neos-ui-backend-connector';
78
import {neos} from '@neos-project/neos-ui-decorators';
9+
import {selectors} from '@neos-project/neos-ui-redux-store';
810

911
import {PreviewScreen, Controls, ResizeControls} from './Components/index';
1012
import {Image, CROP_IMAGE_ADJUSTMENT, RESIZE_IMAGE_ADJUSTMENT} from './Utils/index';
@@ -18,6 +20,10 @@ const DEFAULT_FEATURES = {
1820
upload: true
1921
};
2022

23+
@connect(state => ({
24+
siteNodePath: state?.cr?.nodes?.siteNode,
25+
focusedNodePath: selectors.CR.Nodes.focusedNodePathSelector(state)
26+
}), null, null, {forwardRef: true})
2127
@neos(globalRegistry => ({secondaryEditorsRegistry: globalRegistry.get('inspector').get('secondaryEditors')}))
2228
export default class ImageEditor extends Component {
2329
state = {
@@ -48,7 +54,10 @@ export default class ImageEditor extends Component {
4854
// I18N key
4955
fileChooserLabel: PropTypes.string,
5056

51-
accept: PropTypes.string
57+
accept: PropTypes.string,
58+
59+
siteNodePath: PropTypes.string.isRequired,
60+
focusedNodePath: PropTypes.string.isRequired,
5261
};
5362

5463
static defaultProps = {
@@ -220,7 +229,13 @@ export default class ImageEditor extends Component {
220229
// set media type constraint to "image/*" if it is not explicitly specified via options.constraints.mediaTypes
221230
const constraints = {...options.constraints, mediaTypes: (options.constraints && options.constraints.mediaTypes) || ['image/*']};
222231
const {component: AssetUploadScreen} = secondaryEditorsRegistry.get('Neos.Neos/Inspector/Secondary/Editors/AssetUploadScreen');
223-
this.props.renderSecondaryInspector('IMAGE_UPLOAD_MEDIA', () => <AssetUploadScreen type="images" constraints={constraints} onComplete={this.afterUpload}/>);
232+
const additionalData = {
233+
propertyName: this.props.identifier,
234+
focusedNodePath: this.props.focusedNodePath,
235+
siteNodePath: this.props.siteNodePath,
236+
metaData: 'Image'
237+
};
238+
this.props.renderSecondaryInspector('IMAGE_UPLOAD_MEDIA', () => <AssetUploadScreen type="images" constraints={constraints} onComplete={this.afterUpload} additionalData={additionalData}/>);
224239
} else {
225240
this.previewScreen.chooseFromLocalFileSystem();
226241
this.setState({isAssetLoading: true});

0 commit comments

Comments
 (0)