taro-ui-vue3
Version:
Taro UI Rewritten in Vue 3.0
50 lines (49 loc) • 1.14 kB
JavaScript
import {computed} from "vue";
import {convertToUnit, keys} from "../utils/common";
import propsFactory from "../utils/propsFactory";
const allDimensionsProps = {
height: {
type: [Number, String]
},
maxHeight: {
type: [Number, String]
},
maxWidth: {
type: [Number, String]
},
minHeight: {
type: [Number, String]
},
minWidth: {
type: [Number, String]
},
width: {
type: [Number, String]
}
};
function dimensionsFactory(...possibleProps) {
const selectedProps = possibleProps.length ? possibleProps : keys(allDimensionsProps);
const makeDimensionsProps = propsFactory(selectedProps.reduce((obj, prop) => {
obj[prop] = allDimensionsProps[prop];
return obj;
}, {}));
const useDimensions = (props) => {
const dimensions = computed(() => {
return selectedProps.reduce((obj, key) => {
const value = props[key];
if (value) {
obj.style[key] = convertToUnit(value);
}
return obj;
}, {style: {}});
});
return {dimensions};
};
return {
makeDimensionsProps,
useDimensions
};
}
export {
dimensionsFactory
};