UNPKG

2.12 kBJavaScriptView Raw
1import { DateWithZone } from './datewithzone';
2import { iter } from './iter/index';
3import dateutil from './dateutil';
4export function iterSet(iterResult, _rrule, _exrule, _rdate, _exdate, tzid) {
5 var _exdateHash = {};
6 var _accept = iterResult.accept;
7 function evalExdate(after, before) {
8 _exrule.forEach(function (rrule) {
9 rrule.between(after, before, true).forEach(function (date) {
10 _exdateHash[Number(date)] = true;
11 });
12 });
13 }
14 _exdate.forEach(function (date) {
15 var zonedDate = new DateWithZone(date, tzid).rezonedDate();
16 _exdateHash[Number(zonedDate)] = true;
17 });
18 iterResult.accept = function (date) {
19 var dt = Number(date);
20 if (isNaN(dt))
21 return _accept.call(this, date);
22 if (!_exdateHash[dt]) {
23 evalExdate(new Date(dt - 1), new Date(dt + 1));
24 if (!_exdateHash[dt]) {
25 _exdateHash[dt] = true;
26 return _accept.call(this, date);
27 }
28 }
29 return true;
30 };
31 if (iterResult.method === 'between') {
32 evalExdate(iterResult.args.after, iterResult.args.before);
33 iterResult.accept = function (date) {
34 var dt = Number(date);
35 if (!_exdateHash[dt]) {
36 _exdateHash[dt] = true;
37 return _accept.call(this, date);
38 }
39 return true;
40 };
41 }
42 for (var i = 0; i < _rdate.length; i++) {
43 var zonedDate = new DateWithZone(_rdate[i], tzid).rezonedDate();
44 if (!iterResult.accept(new Date(zonedDate.getTime())))
45 break;
46 }
47 _rrule.forEach(function (rrule) {
48 iter(iterResult, rrule.options);
49 });
50 var res = iterResult._result;
51 dateutil.sort(res);
52 switch (iterResult.method) {
53 case 'all':
54 case 'between':
55 return res;
56 case 'before':
57 return ((res.length && res[res.length - 1]) || null);
58 case 'after':
59 default:
60 return ((res.length && res[0]) || null);
61 }
62}
63//# sourceMappingURL=iterset.js.map
\No newline at end of file