sanity-plugin-recurring-dates 1.3.2 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +22 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.esm.js +60 -24
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +60 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/CustomRule/CustomRule.tsx +32 -8
- package/src/components/CustomRule/Monthly.tsx +7 -1
- package/src/components/RecurringDate.tsx +47 -23
- package/src/schema/recurringDates.tsx +5 -3
- package/src/types.ts +8 -0
package/dist/index.js
CHANGED
|
@@ -4278,6 +4278,11 @@ function Monthly(props) {
|
|
|
4278
4278
|
setByweekday([newWeekday]);
|
|
4279
4279
|
}
|
|
4280
4280
|
}, [dayNo, setByweekday, weekNo]);
|
|
4281
|
+
React.useEffect(() => {
|
|
4282
|
+
if (!weekNo) {
|
|
4283
|
+
setByweekday(null);
|
|
4284
|
+
}
|
|
4285
|
+
}, []);
|
|
4281
4286
|
return /* @__PURE__ */jsxRuntime.jsxs(ui.Flex, {
|
|
4282
4287
|
gap: 2,
|
|
4283
4288
|
align: "center",
|
|
@@ -4381,6 +4386,7 @@ function CustomRule(_ref8) {
|
|
|
4381
4386
|
onChange,
|
|
4382
4387
|
initialValue,
|
|
4383
4388
|
startDate,
|
|
4389
|
+
endDate,
|
|
4384
4390
|
dateTimeOptions
|
|
4385
4391
|
} = _ref8;
|
|
4386
4392
|
const initialRule = React.useMemo(() => {
|
|
@@ -4391,6 +4397,7 @@ function CustomRule(_ref8) {
|
|
|
4391
4397
|
const [count, setCount] = React.useState(initialRule.origOptions.count || null);
|
|
4392
4398
|
const [until, setUntil] = React.useState(initialRule.origOptions.until || null);
|
|
4393
4399
|
const [byweekday, setByweekday] = React.useState(initialRule.origOptions.byweekday || null);
|
|
4400
|
+
const [untilValid, setUntilValid] = React.useState(true);
|
|
4394
4401
|
const handleChange = React.useCallback(event => {
|
|
4395
4402
|
const {
|
|
4396
4403
|
name,
|
|
@@ -4420,9 +4427,15 @@ function CustomRule(_ref8) {
|
|
|
4420
4427
|
}, [frequency, startDate]);
|
|
4421
4428
|
const handleUntilChange = React.useCallback(date => {
|
|
4422
4429
|
if (date) {
|
|
4423
|
-
|
|
4430
|
+
const untilDate = dateFnsTz.toDate(`${date}T23:59:59`);
|
|
4431
|
+
if (endDate && untilDate < dateFnsTz.toDate(endDate) || startDate && untilDate < dateFnsTz.toDate(startDate)) {
|
|
4432
|
+
setUntilValid(false);
|
|
4433
|
+
} else {
|
|
4434
|
+
setUntilValid(true);
|
|
4435
|
+
}
|
|
4436
|
+
setUntil(untilDate);
|
|
4424
4437
|
}
|
|
4425
|
-
}, []);
|
|
4438
|
+
}, [endDate, startDate]);
|
|
4426
4439
|
const handleEndChange = React.useCallback(event => {
|
|
4427
4440
|
const {
|
|
4428
4441
|
value
|
|
@@ -4445,7 +4458,7 @@ function CustomRule(_ref8) {
|
|
|
4445
4458
|
interval,
|
|
4446
4459
|
count: count || null,
|
|
4447
4460
|
until: until ? until : null,
|
|
4448
|
-
byweekday
|
|
4461
|
+
byweekday: frequency === rrule.RRule.WEEKLY || frequency === rrule.RRule.MONTHLY ? byweekday : null
|
|
4449
4462
|
};
|
|
4450
4463
|
const newRule = new rrule.RRule(newOptions);
|
|
4451
4464
|
onClose();
|
|
@@ -4561,6 +4574,12 @@ function CustomRule(_ref8) {
|
|
|
4561
4574
|
value: until ? formatUntilValue(new Date(until)) : formatUntilValue(getUntilDate()),
|
|
4562
4575
|
readOnly: !until
|
|
4563
4576
|
})
|
|
4577
|
+
}), !untilValid && /* @__PURE__ */jsxRuntime.jsx(sanityPluginUtils.Feedback, {
|
|
4578
|
+
tone: "critical",
|
|
4579
|
+
children: /* @__PURE__ */jsxRuntime.jsx(ui.Text, {
|
|
4580
|
+
size: 1,
|
|
4581
|
+
children: "Until date must be after event ends"
|
|
4582
|
+
})
|
|
4564
4583
|
})]
|
|
4565
4584
|
}), /* @__PURE__ */jsxRuntime.jsxs(ui.Flex, {
|
|
4566
4585
|
gap: 2,
|
|
@@ -4614,7 +4633,8 @@ function CustomRule(_ref8) {
|
|
|
4614
4633
|
}), /* @__PURE__ */jsxRuntime.jsx(ui.Button, {
|
|
4615
4634
|
text: "Done",
|
|
4616
4635
|
tone: "positive",
|
|
4617
|
-
onClick: handleConfirm
|
|
4636
|
+
onClick: handleConfirm,
|
|
4637
|
+
disabled: !untilValid
|
|
4618
4638
|
})]
|
|
4619
4639
|
})
|
|
4620
4640
|
})]
|
|
@@ -4723,33 +4743,44 @@ function RecurringDates(props) {
|
|
|
4723
4743
|
...startDateMember?.field?.schemaType.options,
|
|
4724
4744
|
...dateTimeOptions
|
|
4725
4745
|
};
|
|
4746
|
+
if (dateOnly === true) {
|
|
4747
|
+
startDateMember.field.schemaType.name = "date";
|
|
4748
|
+
} else {
|
|
4749
|
+
startDateMember.field.schemaType.name = "datetime";
|
|
4750
|
+
}
|
|
4751
|
+
if (validation?.startDate) {
|
|
4752
|
+
startDateMember.field.schemaType.validation = CustomValidation => validation?.startDate?.(CustomValidation);
|
|
4753
|
+
} else {
|
|
4754
|
+
startDateMember.field.schemaType.validation = DefaultRule => DefaultRule.required();
|
|
4755
|
+
}
|
|
4756
|
+
if (options?.fieldTitles?.startDate) {
|
|
4757
|
+
startDateMember.field.schemaType.title = options.fieldTitles.startDate;
|
|
4758
|
+
}
|
|
4759
|
+
if (options?.fieldDescriptions?.startDate) {
|
|
4760
|
+
startDateMember.field.schemaType.description = options.fieldDescriptions.startDate;
|
|
4761
|
+
}
|
|
4726
4762
|
}
|
|
4727
4763
|
if (endDateMember?.kind == "field") {
|
|
4728
4764
|
endDateMember.field.schemaType.options = {
|
|
4729
4765
|
...endDateMember?.field?.schemaType.options,
|
|
4730
4766
|
...dateTimeOptions
|
|
4731
4767
|
};
|
|
4732
|
-
|
|
4733
|
-
if (dateOnly === true) {
|
|
4734
|
-
if (startDateMember?.kind == "field") {
|
|
4735
|
-
startDateMember.field.schemaType.name = "date";
|
|
4736
|
-
}
|
|
4737
|
-
if (endDateMember?.kind == "field") {
|
|
4768
|
+
if (dateOnly === true) {
|
|
4738
4769
|
endDateMember.field.schemaType.name = "date";
|
|
4770
|
+
} else {
|
|
4771
|
+
endDateMember.field.schemaType.name = "datetime";
|
|
4739
4772
|
}
|
|
4740
|
-
|
|
4741
|
-
|
|
4742
|
-
|
|
4773
|
+
if (validation?.endDate) {
|
|
4774
|
+
endDateMember.field.schemaType.validation = CustomValidation => validation?.endDate?.(CustomValidation);
|
|
4775
|
+
} else {
|
|
4776
|
+
endDateMember.field.schemaType.validation = DefaultRule => DefaultRule.min(DefaultRule.valueOfField("startDate"));
|
|
4743
4777
|
}
|
|
4744
|
-
if (
|
|
4745
|
-
endDateMember.field.schemaType.
|
|
4778
|
+
if (options?.fieldTitles?.endDate) {
|
|
4779
|
+
endDateMember.field.schemaType.title = options.fieldTitles.endDate;
|
|
4780
|
+
}
|
|
4781
|
+
if (options?.fieldDescriptions?.endDate) {
|
|
4782
|
+
endDateMember.field.schemaType.description = options.fieldDescriptions.endDate;
|
|
4746
4783
|
}
|
|
4747
|
-
}
|
|
4748
|
-
if (validation?.startDate && startDateMember?.kind == "field") {
|
|
4749
|
-
startDateMember.field.schemaType.validation = CustomValidation => validation?.startDate?.(CustomValidation);
|
|
4750
|
-
}
|
|
4751
|
-
if (validation?.endDate && endDateMember?.kind == "field") {
|
|
4752
|
-
endDateMember.field.schemaType.validation = CustomValidation => validation?.endDate?.(CustomValidation);
|
|
4753
4784
|
}
|
|
4754
4785
|
const hasEndDate = currentValue?.endDate;
|
|
4755
4786
|
return /* @__PURE__ */jsxRuntime.jsxs(ui.Stack, {
|
|
@@ -4820,6 +4851,7 @@ function RecurringDates(props) {
|
|
|
4820
4851
|
onChange,
|
|
4821
4852
|
initialValue: currentValue?.rrule,
|
|
4822
4853
|
startDate: startDateMember?.kind == "field" ? startDateMember?.field?.value : void 0,
|
|
4854
|
+
endDate: endDateMember?.kind == "field" ? endDateMember?.field?.value : void 0,
|
|
4823
4855
|
dateTimeOptions
|
|
4824
4856
|
})]
|
|
4825
4857
|
});
|
|
@@ -4874,7 +4906,9 @@ var recurringDateSchema = config => {
|
|
|
4874
4906
|
const {
|
|
4875
4907
|
dateTimeOptions,
|
|
4876
4908
|
dateOnly,
|
|
4877
|
-
validation
|
|
4909
|
+
validation,
|
|
4910
|
+
fieldTitles,
|
|
4911
|
+
fieldDescriptions
|
|
4878
4912
|
} = config;
|
|
4879
4913
|
return sanity.defineField({
|
|
4880
4914
|
name: "recurringDates",
|
|
@@ -4882,13 +4916,15 @@ var recurringDateSchema = config => {
|
|
|
4882
4916
|
type: "object",
|
|
4883
4917
|
icon: icons.CalendarIcon,
|
|
4884
4918
|
fields: [sanity.defineField({
|
|
4885
|
-
title: "Start Date",
|
|
4919
|
+
title: fieldTitles?.startDate || "Start Date",
|
|
4920
|
+
description: fieldDescriptions?.startDate || "",
|
|
4886
4921
|
name: "startDate",
|
|
4887
4922
|
type: dateOnly ? "date" : "datetime",
|
|
4888
4923
|
options: dateTimeOptions,
|
|
4889
4924
|
validation: Rule => validation?.startDate ? validation.startDate(Rule) : Rule.required()
|
|
4890
4925
|
}), sanity.defineField({
|
|
4891
|
-
title: "End Date",
|
|
4926
|
+
title: fieldTitles?.endDate || "End Date",
|
|
4927
|
+
description: fieldDescriptions?.endDate || "",
|
|
4892
4928
|
name: "endDate",
|
|
4893
4929
|
type: dateOnly ? "date" : "datetime",
|
|
4894
4930
|
options: dateTimeOptions,
|