linkmore-design
Version:
🌈 🚀lm组件库。🚀
123 lines (117 loc) • 3.14 kB
JavaScript
import { useCallback, useEffect } from 'react';
var useCoreOptions = function useCoreOptions(_ref) {
var state = _ref.state,
dispatch = _ref.dispatch,
props = _ref.props,
previewRef = _ref.previewRef;
// 获取显示状态
var getVisible = useCallback(function () {
return typeof props.visible === 'boolean' ? props.visible : state.visible;
}, [props.visible, state.visible]);
// 获取是否为视频格式
var getIsVideo = useCallback(function (url) {
var fileExtension = url.replace(/.*\./, '').toLowerCase();
return ['mp4', 'm2v', 'mkv', 'ogm', 'webm'].includes(fileExtension);
}, []);
// 关闭事件
var onClose = useCallback(function () {
var _props$close;
(_props$close = props.close) === null || _props$close === void 0 ? void 0 : _props$close.call(props);
dispatch({
type: 'init'
});
dispatch({
type: 'changeVisible',
visible: false
});
}, []);
var setTransform = useCallback(function (type) {
var scale = state.transform.scale * 100;
var rotateZ = state.transform.rotateZ;
switch (type) {
case 'zoomIn':
scale += 25;
break;
case 'zoomOut':
scale < 30 ? scale : scale -= 25;
break;
case 'rotateLeft':
rotateZ -= 90;
break;
case 'rotateRight':
rotateZ += 90;
break;
default:
break;
}
dispatch({
type: 'changeTransform',
transform: {
rotateZ: rotateZ,
scale: scale / 100
}
});
}, [state.transform]);
// 切换轮播前的回调
var beforeChange = useCallback(function (from, currentIndex) {
dispatch({
type: 'changeCurrent',
current: {
currentIndex: currentIndex
}
});
}, []);
// 切换轮播后的回调
var afterChange = useCallback(function (currentIndex) {
dispatch({
type: 'changeCurrent',
current: {
currentIndex: currentIndex
}
});
}, []);
// 转到指定的轮播图, 直接跳转, 不展示动画
var slickGoTo = useCallback(function (currentIndex) {
previewRef.current.goTo(currentIndex, true);
}, []);
// 转到下一张轮播图
var slickNext = useCallback(function () {
previewRef.current.next();
}, []);
// 转到上一张轮播图
var slickPrev = useCallback(function () {
previewRef.current.prev();
}, []);
useEffect(function () {
if (getVisible()) {
slickGoTo(props.initialIndex);
dispatch({
type: 'changeCurrent',
current: {
currentIndex: props.initialIndex
}
});
}
}, [getVisible, props.initialIndex, slickGoTo]);
var CoreMethods = {
getVisible: getVisible,
getIsVideo: getIsVideo,
onClose: onClose,
setTransform: setTransform,
beforeChange: beforeChange,
afterChange: afterChange,
slickGoTo: slickGoTo,
slickNext: slickNext,
slickPrev: slickPrev
};
var RefMethods = {
getState: function getState() {
return state;
}
};
return {
CoreMethods: CoreMethods,
RefMethods: RefMethods
};
};
export default useCoreOptions;