feat: enhance image loading and socket handling in Product and Images components, and update prerender logic in App and ProductDetailPage
This commit is contained in:
@@ -28,25 +28,16 @@ class Product extends Component {
|
||||
}else{
|
||||
this.state = {image: null, loading: true, error: false};
|
||||
console.log("Product: Fetching image from socketB", this.props.socketB);
|
||||
this.props.socketB.emit('getPic', { bildId, size:'small' }, (res) => {
|
||||
if(res.success){
|
||||
window.smallPicCache[bildId] = URL.createObjectURL(new Blob([res.imageBuffer], { type: 'image/jpeg' }));
|
||||
if (this._isMounted) {
|
||||
this.setState({image: window.smallPicCache[bildId], loading: false});
|
||||
} else {
|
||||
this.state.image = window.smallPicCache[bildId];
|
||||
this.state.loading = false;
|
||||
}
|
||||
}else{
|
||||
console.log('Fehler beim Laden des Bildes:', res);
|
||||
if (this._isMounted) {
|
||||
this.setState({error: true, loading: false});
|
||||
} else {
|
||||
this.state.error = true;
|
||||
this.state.loading = false;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// Check if socketB is available and connected before emitting
|
||||
if (this.props.socketB && this.props.socketB.connected) {
|
||||
this.loadImage(bildId);
|
||||
} else {
|
||||
// Socket not available, set error state or wait
|
||||
console.log("Product: socketB not available, will retry when connected");
|
||||
this.state.error = true;
|
||||
this.state.loading = false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.state = {image: null, loading: false, error: false};
|
||||
@@ -57,6 +48,45 @@ class Product extends Component {
|
||||
this._isMounted = true;
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
// Retry loading image if socket just became available
|
||||
const wasConnected = prevProps.socketB && prevProps.socketB.connected;
|
||||
const isNowConnected = this.props.socketB && this.props.socketB.connected;
|
||||
|
||||
if (!wasConnected && isNowConnected && this.state.error && this.props.pictureList) {
|
||||
// Socket just connected and we had an error, retry loading
|
||||
const bildId = this.props.pictureList.split(',')[0];
|
||||
if (!window.smallPicCache[bildId]) {
|
||||
this.setState({loading: true, error: false});
|
||||
this.loadImage(bildId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loadImage = (bildId) => {
|
||||
if (this.props.socketB && this.props.socketB.connected) {
|
||||
this.props.socketB.emit('getPic', { bildId, size:'small' }, (res) => {
|
||||
if(res.success){
|
||||
window.smallPicCache[bildId] = URL.createObjectURL(new Blob([res.imageBuffer], { type: 'image/jpeg' }));
|
||||
if (this._isMounted) {
|
||||
this.setState({image: window.smallPicCache[bildId], loading: false});
|
||||
} else {
|
||||
this.state.image = window.smallPicCache[bildId];
|
||||
this.state.loading = false;
|
||||
}
|
||||
}else{
|
||||
console.log('Fehler beim Laden des Bildes:', res);
|
||||
if (this._isMounted) {
|
||||
this.setState({error: true, loading: false});
|
||||
} else {
|
||||
this.state.error = true;
|
||||
this.state.loading = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this._isMounted = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user