Fix ScratchImage incompatibilities

This commit is contained in:
Christopher Willis-Ford committed 2019-03-12 15:01:50 -07:00
1 parent face0d20d4
commit 790fc13157
3 files changed
+40 -32

No files matched your search

+7 -5
View File
@@ -36,10 +36,12 @@ class LibraryItemComponent extends React.PureComponent {
/>
</div>
) : null}
<ScratchImage
className={styles.featuredImage}
imageSource={this.props.iconSource}
/>
{this.props.iconSource ? (
<ScratchImage
className={styles.featuredImage}
imageSource={this.props.iconSource}
/>
) : null}
</div>
{this.props.insetIconURL ? (
<div className={styles.libraryItemInsetImageContainer}>
@@ -147,7 +149,7 @@ LibraryItemComponent.propTypes = {
extensionId: PropTypes.string,
featured: PropTypes.bool,
hidden: PropTypes.bool,
iconSource: ScratchImage.propTypes.imageSource,
iconSource: ScratchImage.ImageSourcePropType,
insetIconURL: PropTypes.string,
internetConnectionRequired: PropTypes.bool,
name: PropTypes.oneOfType([
+8 -6
View File
@@ -54,7 +54,7 @@ const getAssetTypeForFileExtension = function (fileExtension) {
* @returns {object} - an `imageSource` ready to be passed to a `ScratchImage`.
*/
const getItemImageSource = function (item) {
if (item.hasOwnProperty('rawURL')) {
if (item.rawURL) {
return {
uri: item.rawURL
};
@@ -62,11 +62,13 @@ const getItemImageSource = function (item) {
// TODO: adjust libraries to be more storage-friendly; don't use split() here.
const md5 = item.md5 || item.baseLayerMD5;
const [assetId, fileExtension] = md5.split('.');
return {
assetId: assetId,
assetType: getAssetTypeForFileExtension(fileExtension)
};
if (md5) {
const [assetId, fileExtension] = md5.split('.');
return {
assetId: assetId,
assetType: getAssetTypeForFileExtension(fileExtension)
};
}
};
class LibraryComponent extends React.Component {
+25 -21
View File
@@ -68,18 +68,20 @@ class ScratchImage extends React.PureComponent {
* @returns {object} - the new state values, if any.
*/
_loadImageSource (imageSource) {
if (imageSource.uri) {
ScratchImage.pendingImages.delete(this);
return {
imageURI: imageSource.uri,
lastRequestedAsset: null
};
}
if (this.state.lastRequestedAsset !== imageSource.assetId) {
ScratchImage.pendingImages.add(this);
return {
lastRequestedAsset: imageSource.assetId
};
if (imageSource) {
if (imageSource.uri) {
ScratchImage.pendingImages.delete(this);
return {
imageURI: imageSource.uri,
lastRequestedAsset: null
};
}
if (this.state.lastRequestedAsset !== imageSource.assetId) {
ScratchImage.pendingImages.add(this);
return {
lastRequestedAsset: imageSource.assetId
};
}
}
// Nothing to do - don't change any state.
return {};
@@ -116,16 +118,18 @@ class ScratchImage extends React.PureComponent {
}
}
ScratchImage.ImageSourcePropType = PropTypes.oneOfType([
PropTypes.shape({
assetId: PropTypes.string.isRequired,
assetType: PropTypes.oneOf(Object.values(storage.AssetType)).isRequired
}),
PropTypes.shape({
uri: PropTypes.string.isRequired
})
]);
ScratchImage.propTypes = {
imageSource: PropTypes.oneOfType([
PropTypes.shape({
assetId: PropTypes.string.isRequired,
assetType: PropTypes.oneOf(Object.values(storage.AssetType)).isRequired
}),
PropTypes.shape({
uri: PropTypes.string.isRequired
})
]).isRequired
imageSource: ScratchImage.ImageSourcePropType.isRequired
};
export default ScratchImage;