Remove dead utils, move utils used only once
This commit is contained in:
@@ -8,11 +8,29 @@
|
|||||||
|
|
||||||
import {useEffect, useState} from 'react'
|
import {useEffect, useState} from 'react'
|
||||||
import {Image, ImageURISource} from 'react-native'
|
import {Image, ImageURISource} from 'react-native'
|
||||||
|
|
||||||
import {createCache} from '../utils'
|
|
||||||
import {Dimensions, ImageSource} from '../@types'
|
import {Dimensions, ImageSource} from '../@types'
|
||||||
|
|
||||||
const CACHE_SIZE = 50
|
const CACHE_SIZE = 50
|
||||||
|
|
||||||
|
type CacheStorageItem = {key: string; value: any}
|
||||||
|
|
||||||
|
const createCache = (cacheSize: number) => ({
|
||||||
|
_storage: [] as CacheStorageItem[],
|
||||||
|
get(key: string): any {
|
||||||
|
const {value} =
|
||||||
|
this._storage.find(({key: storageKey}) => storageKey === key) || {}
|
||||||
|
|
||||||
|
return value
|
||||||
|
},
|
||||||
|
set(key: string, value: any) {
|
||||||
|
if (this._storage.length >= cacheSize) {
|
||||||
|
this._storage.shift()
|
||||||
|
}
|
||||||
|
|
||||||
|
this._storage.push({key, value})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
const imageDimensionsCache = createCache(CACHE_SIZE)
|
const imageDimensionsCache = createCache(CACHE_SIZE)
|
||||||
|
|
||||||
const useImageDimensions = (image: ImageSource): Dimensions | null => {
|
const useImageDimensions = (image: ImageSource): Dimensions | null => {
|
||||||
|
|||||||
@@ -18,11 +18,7 @@ import {
|
|||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
|
|
||||||
import {Position} from '../@types'
|
import {Position} from '../@types'
|
||||||
import {
|
import {getImageTranslate} from '../utils'
|
||||||
getDistanceBetweenTouches,
|
|
||||||
getImageTranslate,
|
|
||||||
getImageDimensionsByTranslate,
|
|
||||||
} from '../utils'
|
|
||||||
|
|
||||||
const SCREEN = Dimensions.get('window')
|
const SCREEN = Dimensions.get('window')
|
||||||
const SCREEN_WIDTH = SCREEN.width
|
const SCREEN_WIDTH = SCREEN.width
|
||||||
@@ -404,4 +400,24 @@ const usePanResponder = ({
|
|||||||
return [panResponder.panHandlers, scaleValue, translateValue]
|
return [panResponder.panHandlers, scaleValue, translateValue]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getImageDimensionsByTranslate = (
|
||||||
|
translate: Position,
|
||||||
|
screen: {width: number; height: number},
|
||||||
|
): {width: number; height: number} => ({
|
||||||
|
width: screen.width - translate.x * 2,
|
||||||
|
height: screen.height - translate.y * 2,
|
||||||
|
})
|
||||||
|
|
||||||
|
const getDistanceBetweenTouches = (touches: NativeTouchEvent[]): number => {
|
||||||
|
const [a, b] = touches
|
||||||
|
|
||||||
|
if (a == null || b == null) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.sqrt(
|
||||||
|
Math.pow(a.pageX - b.pageX, 2) + Math.pow(a.pageY - b.pageY, 2),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export default usePanResponder
|
export default usePanResponder
|
||||||
|
|||||||
@@ -6,42 +6,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Animated, NativeTouchEvent} from 'react-native'
|
import {Animated} from 'react-native'
|
||||||
import {Dimensions, Position} from './@types'
|
import {Dimensions, Position} from './@types'
|
||||||
|
|
||||||
type CacheStorageItem = {key: string; value: any}
|
|
||||||
|
|
||||||
export const createCache = (cacheSize: number) => ({
|
|
||||||
_storage: [] as CacheStorageItem[],
|
|
||||||
get(key: string): any {
|
|
||||||
const {value} =
|
|
||||||
this._storage.find(({key: storageKey}) => storageKey === key) || {}
|
|
||||||
|
|
||||||
return value
|
|
||||||
},
|
|
||||||
set(key: string, value: any) {
|
|
||||||
if (this._storage.length >= cacheSize) {
|
|
||||||
this._storage.shift()
|
|
||||||
}
|
|
||||||
|
|
||||||
this._storage.push({key, value})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
export const splitArrayIntoBatches = (arr: any[], batchSize: number): any[] =>
|
|
||||||
arr.reduce((result, item) => {
|
|
||||||
const batch = result.pop() || []
|
|
||||||
|
|
||||||
if (batch.length < batchSize) {
|
|
||||||
batch.push(item)
|
|
||||||
result.push(batch)
|
|
||||||
} else {
|
|
||||||
result.push(batch, [item])
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
export const getImageTransform = (
|
export const getImageTransform = (
|
||||||
image: Dimensions | null,
|
image: Dimensions | null,
|
||||||
screen: Dimensions,
|
screen: Dimensions,
|
||||||
@@ -97,43 +64,3 @@ export const getImageTranslate = (
|
|||||||
y: getTranslateForAxis('y'),
|
y: getTranslateForAxis('y'),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getImageDimensionsByTranslate = (
|
|
||||||
translate: Position,
|
|
||||||
screen: Dimensions,
|
|
||||||
): Dimensions => ({
|
|
||||||
width: screen.width - translate.x * 2,
|
|
||||||
height: screen.height - translate.y * 2,
|
|
||||||
})
|
|
||||||
|
|
||||||
export const getImageTranslateForScale = (
|
|
||||||
currentTranslate: Position,
|
|
||||||
targetScale: number,
|
|
||||||
screen: Dimensions,
|
|
||||||
): Position => {
|
|
||||||
const {width, height} = getImageDimensionsByTranslate(
|
|
||||||
currentTranslate,
|
|
||||||
screen,
|
|
||||||
)
|
|
||||||
|
|
||||||
const targetImageDimensions = {
|
|
||||||
width: width * targetScale,
|
|
||||||
height: height * targetScale,
|
|
||||||
}
|
|
||||||
|
|
||||||
return getImageTranslate(targetImageDimensions, screen)
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getDistanceBetweenTouches = (
|
|
||||||
touches: NativeTouchEvent[],
|
|
||||||
): number => {
|
|
||||||
const [a, b] = touches
|
|
||||||
|
|
||||||
if (a == null || b == null) {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.sqrt(
|
|
||||||
Math.pow(a.pageX - b.pageX, 2) + Math.pow(a.pageY - b.pageY, 2),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user