mirror of https://github.com/alibaba/ice.git
				
				
				
			Feat/fix storage (#6488)
* fix: The base64 of canvans may be too large, and the syncCall will block the thread * chore: add changeset * feat: modify return * feat: modify promise * feat: modify * chore: modify version
This commit is contained in:
		
							parent
							
								
									b8b1d5e41f
								
							
						
					
					
						commit
						1e4b20af84
					
				|  | @ -0,0 +1,5 @@ | ||||||
|  | --- | ||||||
|  | '@ice/cache-canvas': patch | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | fix: The base64 of canvans may be too large, and the syncCall will block the thread. | ||||||
|  | @ -25,6 +25,7 @@ declare global { | ||||||
|     _windvane_backControl: Function | null; |     _windvane_backControl: Function | null; | ||||||
|     __megability_bridge__: { |     __megability_bridge__: { | ||||||
|       syncCall: Function; |       syncCall: Function; | ||||||
|  |       asyncCall: Function; | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | @ -74,7 +75,7 @@ export const CacheCanvas = forwardRef((props: CacheCanvasProps, ref) => { | ||||||
|     } |     } | ||||||
|     // Cache base64 string when canvas rendered.
 |     // Cache base64 string when canvas rendered.
 | ||||||
|     if (renderedCanvas && strBase64) { |     if (renderedCanvas && strBase64) { | ||||||
|       Storage.setItem(cacheKey, strBase64, { |       return Storage.setItem(cacheKey, strBase64, { | ||||||
|         bizID, |         bizID, | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|  | @ -88,27 +89,6 @@ export const CacheCanvas = forwardRef((props: CacheCanvasProps, ref) => { | ||||||
|     setMounted(true); |     setMounted(true); | ||||||
|   }, []); |   }, []); | ||||||
| 
 | 
 | ||||||
|   useEffect(() => { |  | ||||||
|     if (window.WindVane) { |  | ||||||
|       window.WindVane.call('WebAppInterface', 'enableHookNativeBack', {}); |  | ||||||
|       window._windvane_backControl = () => { |  | ||||||
|         cacheCanvasFunc(); |  | ||||||
|         // Windvane must return a string value of true for it to work properly.
 |  | ||||||
|         return 'false'; |  | ||||||
|       }; |  | ||||||
|     } |  | ||||||
|     document.addEventListener('wvBackClickEvent', cacheCanvasFunc, false); |  | ||||||
|     window.addEventListener('beforeunload', cacheCanvasFunc); |  | ||||||
| 
 |  | ||||||
|     return () => { |  | ||||||
|       window.removeEventListener('beforeunload', cacheCanvasFunc); |  | ||||||
|       window.removeEventListener('wvBackClickEvent', cacheCanvasFunc); |  | ||||||
|       if (window._windvane_backControl) { |  | ||||||
|         window._windvane_backControl = null; |  | ||||||
|       } |  | ||||||
|     }; |  | ||||||
|   }, [cacheCanvasFunc]); |  | ||||||
| 
 |  | ||||||
|   useEffect(() => { |   useEffect(() => { | ||||||
|     if (mounted && typeof init === 'function') { |     if (mounted && typeof init === 'function') { | ||||||
|       const res = init(); |       const res = init(); | ||||||
|  |  | ||||||
|  | @ -14,24 +14,33 @@ export const Storage = { | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         if (canIUse) { |         if (canIUse) { | ||||||
|           const res = window.__megability_bridge__.syncCall('userKVStorage', 'setItem', { |           return new Promise((resolve, reject) => { | ||||||
|             key, |             // The base64 of canvans may be too large, and the syncCall will block the thread.
 | ||||||
|             value, |             window.__megability_bridge__.asyncCall('userKVStorage', 'setItem', { | ||||||
|             bizID, |               key, | ||||||
|  |               value, | ||||||
|  |               bizID, | ||||||
|  |             }, (res) => { | ||||||
|  |               if (res && res.statusCode <= 100) { | ||||||
|  |                 resolve(res); | ||||||
|  |               } else { | ||||||
|  |                 reject(); | ||||||
|  |               } | ||||||
|  |             }); | ||||||
|           }); |           }); | ||||||
|           if (res && res.statusCode === 0) { |  | ||||||
|             return; |  | ||||||
|           } |  | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       if (typeof window !== 'undefined' && window.localStorage) { |       return new Promise((resolve, reject) => { | ||||||
|         return localStorage.setItem(key, value); |         if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') { | ||||||
|       } |           resolve(localStorage.setItem(key, value)); | ||||||
| 
 |         } else { | ||||||
|       return (cache[key] = value); |           reject(new Error('localStorage is undefined.')); | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|       console.error('Storage setItem error:', e); |       console.error('Storage setItem error:', e); | ||||||
|  |       return Promise.reject(e); | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   getItem: (key, { bizID = '' }) => { |   getItem: (key, { bizID = '' }) => { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue