diff options
Diffstat (limited to 'animism-align/frontend/app/utils/vendor/keen-slider/react.js')
| -rw-r--r-- | animism-align/frontend/app/utils/vendor/keen-slider/react.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/animism-align/frontend/app/utils/vendor/keen-slider/react.js b/animism-align/frontend/app/utils/vendor/keen-slider/react.js new file mode 100644 index 0000000..9da1b22 --- /dev/null +++ b/animism-align/frontend/app/utils/vendor/keen-slider/react.js @@ -0,0 +1,93 @@ +import KeenSlider from './keen-slider' +import { useEffect, useRef, useState } from 'react' + +export default KeenSlider + +export function useKeenSlider(options = {}) { + const ref = useRef() + const savedOptions = useRef() + + function checkOptions(options) { + if (!isEqual(savedOptions.current, options)) { + savedOptions.current = options + } + return savedOptions.current + } + + const [slider, setSlider] = useState(null) + + useEffect(() => { + const new_slider = new KeenSlider(ref.current, savedOptions.current) + setSlider(new_slider) + return () => { + new_slider.destroy() + } + }, [checkOptions(options)]) + return [ref, slider] +} + +/*! + * Check if two objects or arrays are equal + * (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com + * @param {Object|Array} value The first object or array to compare + * @param {Object|Array} other The second object or array to compare + * @return {Boolean} Returns true if they're equal + */ +var isEqual = function (value, other) { + // Get the value type + var type = Object.prototype.toString.call(value) + + // If the two objects are not the same type, return false + if (type !== Object.prototype.toString.call(other)) return false + + // If items are not an object or array, return false + if (['[object Array]', '[object Object]'].indexOf(type) < 0) return false + + // Compare the length of the length of the two items + var valueLen = + type === '[object Array]' ? value.length : Object.keys(value).length + var otherLen = + type === '[object Array]' ? other.length : Object.keys(other).length + if (valueLen !== otherLen) return false + + // Compare two items + var compare = function (item1, item2) { + // Get the object type + var itemType = Object.prototype.toString.call(item1) + + // If an object or array, compare recursively + if (['[object Array]', '[object Object]'].indexOf(itemType) >= 0) { + if (!isEqual(item1, item2)) return false + } + + // Otherwise, do a simple comparison + else { + // If the two items are not the same type, return false + if (itemType !== Object.prototype.toString.call(item2)) return false + + // Else if it's a function, convert to a string and compare + // Otherwise, just compare + if (itemType === '[object Function]') { + if (item1.toString() !== item2.toString()) return false + } else { + if (item1 !== item2) return false + } + } + } + + // Compare properties + if (type === '[object Array]') { + for (var i = 0; i < valueLen; i++) { + if (compare(value[i], other[i]) === false) return false + } + } else { + for (var key in value) { + if (value.hasOwnProperty(key)) { + if (compare(value[key], other[key]) === false) return false + } + } + } + + // If nothing failed, return true + return true +} |
