{"version":3,"file":"Countdown.cjs","sources":["../../../../../../packages/components/statistic/src/Countdown.tsx"],"sourcesContent":["import type { countdownValueType, FormatConfig, valueType } from './interface';\nimport { initDefaultProps, omit } from '@antdv/utils';\nimport { defineComponent, onBeforeUnmount, onMounted, onUpdated, ref } from 'vue';\nimport { countdownProps } from './props';\nimport Statistic from './Statistic';\nimport { formatCountdown as formatCD } from './utils';\n\nconst REFRESH_INTERVAL = 1000 / 30;\n\nfunction getTime(value?: countdownValueType) {\n  return new Date(value as any).getTime();\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'AStatisticCountdown',\n  props: initDefaultProps(countdownProps(), {\n    format: 'HH:mm:ss',\n  }),\n  // emits: ['finish', 'change'],\n  setup(props, { emit, slots }) {\n    const countdownId = ref<any>();\n    const statistic = ref();\n\n    const startTimer = () => {\n      if (countdownId.value) return;\n      const timestamp = getTime(props.value);\n      countdownId.value = setInterval(() => {\n        statistic.value.$forceUpdate();\n        if (timestamp > Date.now())\n          emit('change', timestamp - Date.now());\n\n        syncTimer();\n      }, REFRESH_INTERVAL);\n    };\n\n    const stopTimer = () => {\n      const { value } = props;\n      if (countdownId.value) {\n        clearInterval(countdownId.value);\n        countdownId.value = undefined;\n\n        const timestamp = getTime(value);\n        if (timestamp < Date.now())\n          emit('finish');\n      }\n    };\n\n    const syncTimer = () => {\n      const { value } = props;\n      const timestamp = getTime(value);\n      if (timestamp >= Date.now())\n        startTimer();\n      else\n        stopTimer();\n    };\n\n    const formatCountdown = ({ value, config }: { value: valueType, config: FormatConfig }) => {\n      const { format } = props;\n      return formatCD(value, { ...config, format });\n    };\n\n    const valueRenderHtml = (node: any) => node;\n    onMounted(() => {\n      syncTimer();\n    });\n    onUpdated(() => {\n      syncTimer();\n    });\n    onBeforeUnmount(() => {\n      stopTimer();\n    });\n    return () => {\n      const value = props.value as valueType;\n      return (\n        <Statistic\n          ref={statistic}\n          {...{\n            ...omit(props, ['onFinish', 'onChange']),\n            value,\n            valueRender: valueRenderHtml,\n            formatter: formatCountdown,\n          }}\n          v-slots={slots}\n        />\n      );\n    };\n  },\n});\n"],"names":["REFRESH_INTERVAL","getTime","value","Date","defineComponent","compatConfig","MODE","name","props","initDefaultProps","countdownProps","format","setup","emit","slots","countdownId","ref","statistic","startTimer","timestamp","setInterval","$forceUpdate","now","syncTimer","stopTimer","clearInterval","undefined","formatCountdown","config","formatCD","valueRenderHtml","node","onMounted","onUpdated","onBeforeUnmount","_createVNode","Statistic","omit","valueRender","formatter"],"mappings":"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"}