UNPKG

4.13 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = void 0;
11
12var _vue = require("vue");
13
14var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
15
16var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
17
18var _initDefaultProps = _interopRequireDefault(require("../_util/props-util/initDefaultProps"));
19
20var _Statistic = _interopRequireWildcard(require("./Statistic"));
21
22var _utils = require("./utils");
23
24function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
26function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
28var REFRESH_INTERVAL = 1000 / 30;
29
30function getTime(value) {
31 return new Date(value).getTime();
32}
33
34var _default = (0, _vue.defineComponent)({
35 name: 'AStatisticCountdown',
36 props: (0, _initDefaultProps.default)(_Statistic.statisticProps, {
37 format: 'HH:mm:ss'
38 }),
39 emits: ['finish', 'change'],
40 setup: function setup(props, _ref) {
41 var emit = _ref.emit,
42 slots = _ref.slots;
43 var countdownId = (0, _vue.ref)();
44 var statistic = (0, _vue.ref)();
45
46 var syncTimer = function syncTimer() {
47 var value = props.value;
48 var timestamp = getTime(value);
49
50 if (timestamp >= Date.now()) {
51 startTimer();
52 } else {
53 stopTimer();
54 }
55 };
56
57 var startTimer = function startTimer() {
58 if (countdownId.value) return;
59 var timestamp = getTime(props.value);
60 countdownId.value = setInterval(function () {
61 statistic.value.$forceUpdate();
62
63 if (timestamp > Date.now()) {
64 emit('change', timestamp - Date.now());
65 }
66
67 syncTimer();
68 }, REFRESH_INTERVAL);
69 };
70
71 var stopTimer = function stopTimer() {
72 var value = props.value;
73
74 if (countdownId.value) {
75 clearInterval(countdownId.value);
76 countdownId.value = undefined;
77 var timestamp = getTime(value);
78
79 if (timestamp < Date.now()) {
80 emit('finish');
81 }
82 }
83 };
84
85 var formatCountdown = function formatCountdown(_ref2) {
86 var value = _ref2.value,
87 config = _ref2.config;
88 var format = props.format;
89 return (0, _utils.formatCountdown)(value, (0, _extends2.default)((0, _extends2.default)({}, config), {
90 format: format
91 }));
92 };
93
94 var valueRenderHtml = function valueRenderHtml(node) {
95 return node;
96 };
97
98 (0, _vue.onMounted)(function () {
99 syncTimer();
100 });
101 (0, _vue.onUpdated)(function () {
102 syncTimer();
103 });
104 (0, _vue.onBeforeUnmount)(function () {
105 stopTimer();
106 });
107 return function () {
108 return (0, _vue.createVNode)(_Statistic.default, (0, _objectSpread2.default)({
109 "ref": statistic
110 }, (0, _extends2.default)((0, _extends2.default)({}, props), {
111 valueRender: valueRenderHtml,
112 formatter: formatCountdown
113 })), slots);
114 };
115 }
116});
117
118exports.default = _default;
\No newline at end of file