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/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
- setUntil(dateFnsTz.toDate(`${date}T23:59:59`));
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
- } else {
4741
- if (startDateMember?.kind == "field") {
4742
- startDateMember.field.schemaType.name = "datetime";
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 (endDateMember?.kind == "field") {
4745
- endDateMember.field.schemaType.name = "datetime";
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,