RangeContext.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { defineComponent, inject, provide, ref, toRef, watch } from 'vue';
  2. const RangeContextKey = Symbol('RangeContextProps');
  3. export const useProvideRange = props => {
  4. provide(RangeContextKey, props);
  5. };
  6. export const useInjectRange = () => {
  7. return inject(RangeContextKey, {
  8. rangedValue: ref(),
  9. hoverRangedValue: ref(),
  10. inRange: ref(),
  11. panelPosition: ref()
  12. });
  13. };
  14. export const RangeContextProvider = defineComponent({
  15. compatConfig: {
  16. MODE: 3
  17. },
  18. name: 'PanelContextProvider',
  19. inheritAttrs: false,
  20. props: {
  21. value: {
  22. type: Object,
  23. default: () => ({})
  24. }
  25. },
  26. setup(props, _ref) {
  27. let {
  28. slots
  29. } = _ref;
  30. const value = {
  31. rangedValue: ref(props.value.rangedValue),
  32. hoverRangedValue: ref(props.value.hoverRangedValue),
  33. inRange: ref(props.value.inRange),
  34. panelPosition: ref(props.value.panelPosition)
  35. };
  36. useProvideRange(value);
  37. toRef;
  38. watch(() => props.value, () => {
  39. Object.keys(props.value).forEach(key => {
  40. if (value[key]) {
  41. value[key].value = props.value[key];
  42. }
  43. });
  44. });
  45. return () => {
  46. var _a;
  47. return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
  48. };
  49. }
  50. });
  51. export default RangeContextKey;