UNPKG

3.37 kBJavaScriptView Raw
1import RRule, { DEFAULT_OPTIONS } from './rrule';
2import { includes, isPresent, isArray, isNumber, toArray } from './helpers';
3import { Weekday } from './weekday';
4import dateutil from './dateutil';
5import { DateWithZone } from './datewithzone';
6export function optionsToString(options) {
7 var rrule = [];
8 var dtstart = '';
9 var keys = Object.keys(options);
10 var defaultKeys = Object.keys(DEFAULT_OPTIONS);
11 for (var i = 0; i < keys.length; i++) {
12 if (keys[i] === 'tzid')
13 continue;
14 if (!includes(defaultKeys, keys[i]))
15 continue;
16 var key = keys[i].toUpperCase();
17 var value = options[keys[i]];
18 var outValue = '';
19 if (!isPresent(value) || (isArray(value) && !value.length))
20 continue;
21 switch (key) {
22 case 'FREQ':
23 outValue = RRule.FREQUENCIES[options.freq];
24 break;
25 case 'WKST':
26 if (isNumber(value)) {
27 outValue = new Weekday(value).toString();
28 }
29 else {
30 outValue = value.toString();
31 }
32 break;
33 case 'BYWEEKDAY':
34 /*
35 NOTE: BYWEEKDAY is a special case.
36 RRule() deconstructs the rule.options.byweekday array
37 into an array of Weekday arguments.
38 On the other hand, rule.origOptions is an array of Weekdays.
39 We need to handle both cases here.
40 It might be worth change RRule to keep the Weekdays.
41
42 Also, BYWEEKDAY (used by RRule) vs. BYDAY (RFC)
43
44 */
45 key = 'BYDAY';
46 outValue = toArray(value).map(function (wday) {
47 if (wday instanceof Weekday) {
48 return wday;
49 }
50 if (isArray(wday)) {
51 return new Weekday(wday[0], wday[1]);
52 }
53 return new Weekday(wday);
54 }).toString();
55 break;
56 case 'DTSTART':
57 dtstart = buildDtstart(value, options.tzid);
58 break;
59 case 'UNTIL':
60 outValue = dateutil.timeToUntilString(value, !options.tzid);
61 break;
62 default:
63 if (isArray(value)) {
64 var strValues = [];
65 for (var j = 0; j < value.length; j++) {
66 strValues[j] = String(value[j]);
67 }
68 outValue = strValues.toString();
69 }
70 else {
71 outValue = String(value);
72 }
73 }
74 if (outValue) {
75 rrule.push([key, outValue]);
76 }
77 }
78 var rules = rrule.map(function (_a) {
79 var key = _a[0], value = _a[1];
80 return key + "=" + value.toString();
81 }).join(';');
82 var ruleString = '';
83 if (rules !== '') {
84 ruleString = "RRULE:" + rules;
85 }
86 return [dtstart, ruleString].filter(function (x) { return !!x; }).join('\n');
87}
88function buildDtstart(dtstart, tzid) {
89 if (!dtstart) {
90 return '';
91 }
92 return 'DTSTART' + new DateWithZone(new Date(dtstart), tzid).toString();
93}
94//# sourceMappingURL=optionstostring.js.map
\No newline at end of file