sanity-plugin-recurring-dates 1.3.2 → 1.4.0
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/README.md +22 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.esm.js +54 -23
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +54 -23
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/CustomRule/CustomRule.tsx +31 -7
- package/src/components/RecurringDate.tsx +47 -23
- package/src/schema/recurringDates.tsx +5 -3
- package/src/types.ts +8 -0
package/README.md
CHANGED
|
@@ -71,6 +71,17 @@ export default defineConfig({
|
|
|
71
71
|
|
|
72
72
|
// Changes the date picker to date only, no time
|
|
73
73
|
dateOnly: true, // defaults to false
|
|
74
|
+
|
|
75
|
+
// Change the field titles and descriptions
|
|
76
|
+
// field names will remain "startDate" and "endDate"
|
|
77
|
+
fieldTitles: {
|
|
78
|
+
startDate: 'Event starts',
|
|
79
|
+
endDate: 'Event ends',
|
|
80
|
+
},
|
|
81
|
+
fieldDescriptions: {
|
|
82
|
+
startDate: 'This is the date the event starts',
|
|
83
|
+
endDate: 'This is the date the event ends',
|
|
84
|
+
},
|
|
74
85
|
}),
|
|
75
86
|
],
|
|
76
87
|
})
|
|
@@ -114,6 +125,17 @@ defineField({
|
|
|
114
125
|
startDate: (Rule) => Rule.required() // defaults to (Rule) => Rule.required()
|
|
115
126
|
endDate: (Rule) => Rule.min(Rule.valueOfField('startDate')) // defaults to (Rule) => Rule.min(Rule.valueOfField('startDate'))
|
|
116
127
|
}
|
|
128
|
+
|
|
129
|
+
// Change the field titles and descriptions
|
|
130
|
+
// field names will remain "startDate" and "endDate"
|
|
131
|
+
fieldTitles: {
|
|
132
|
+
startDate: 'Event starts',
|
|
133
|
+
endDate: 'Event ends',
|
|
134
|
+
},
|
|
135
|
+
fieldDescriptions: {
|
|
136
|
+
startDate: 'This is the date the event starts',
|
|
137
|
+
endDate: 'This is the date the event ends',
|
|
138
|
+
},
|
|
117
139
|
},
|
|
118
140
|
})
|
|
119
141
|
```
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,14 @@ export declare interface PluginConfig {
|
|
|
13
13
|
startDate?: (Rule: DateRule) => DateRule
|
|
14
14
|
endDate?: (Rule: DateRule) => DateRule
|
|
15
15
|
}
|
|
16
|
+
fieldTitles?: {
|
|
17
|
+
startDate?: string
|
|
18
|
+
endDate?: string
|
|
19
|
+
}
|
|
20
|
+
fieldDescriptions?: {
|
|
21
|
+
startDate?: string
|
|
22
|
+
endDate?: string
|
|
23
|
+
}
|
|
16
24
|
}
|
|
17
25
|
|
|
18
26
|
export declare interface RecurringDate {
|
package/dist/index.esm.js
CHANGED
|
@@ -4357,6 +4357,7 @@ function CustomRule(_ref8) {
|
|
|
4357
4357
|
onChange,
|
|
4358
4358
|
initialValue,
|
|
4359
4359
|
startDate,
|
|
4360
|
+
endDate,
|
|
4360
4361
|
dateTimeOptions
|
|
4361
4362
|
} = _ref8;
|
|
4362
4363
|
const initialRule = useMemo(() => {
|
|
@@ -4367,6 +4368,7 @@ function CustomRule(_ref8) {
|
|
|
4367
4368
|
const [count, setCount] = useState(initialRule.origOptions.count || null);
|
|
4368
4369
|
const [until, setUntil] = useState(initialRule.origOptions.until || null);
|
|
4369
4370
|
const [byweekday, setByweekday] = useState(initialRule.origOptions.byweekday || null);
|
|
4371
|
+
const [untilValid, setUntilValid] = useState(true);
|
|
4370
4372
|
const handleChange = useCallback(event => {
|
|
4371
4373
|
const {
|
|
4372
4374
|
name,
|
|
@@ -4396,9 +4398,15 @@ function CustomRule(_ref8) {
|
|
|
4396
4398
|
}, [frequency, startDate]);
|
|
4397
4399
|
const handleUntilChange = useCallback(date => {
|
|
4398
4400
|
if (date) {
|
|
4399
|
-
|
|
4401
|
+
const untilDate = toDate$1(`${date}T23:59:59`);
|
|
4402
|
+
if (endDate && untilDate < toDate$1(endDate) || startDate && untilDate < toDate$1(startDate)) {
|
|
4403
|
+
setUntilValid(false);
|
|
4404
|
+
} else {
|
|
4405
|
+
setUntilValid(true);
|
|
4406
|
+
}
|
|
4407
|
+
setUntil(untilDate);
|
|
4400
4408
|
}
|
|
4401
|
-
}, []);
|
|
4409
|
+
}, [endDate, startDate]);
|
|
4402
4410
|
const handleEndChange = useCallback(event => {
|
|
4403
4411
|
const {
|
|
4404
4412
|
value
|
|
@@ -4537,6 +4545,12 @@ function CustomRule(_ref8) {
|
|
|
4537
4545
|
value: until ? formatUntilValue(new Date(until)) : formatUntilValue(getUntilDate()),
|
|
4538
4546
|
readOnly: !until
|
|
4539
4547
|
})
|
|
4548
|
+
}), !untilValid && /* @__PURE__ */jsx(Feedback, {
|
|
4549
|
+
tone: "critical",
|
|
4550
|
+
children: /* @__PURE__ */jsx(Text, {
|
|
4551
|
+
size: 1,
|
|
4552
|
+
children: "Until date must be after event ends"
|
|
4553
|
+
})
|
|
4540
4554
|
})]
|
|
4541
4555
|
}), /* @__PURE__ */jsxs(Flex, {
|
|
4542
4556
|
gap: 2,
|
|
@@ -4590,7 +4604,8 @@ function CustomRule(_ref8) {
|
|
|
4590
4604
|
}), /* @__PURE__ */jsx(Button, {
|
|
4591
4605
|
text: "Done",
|
|
4592
4606
|
tone: "positive",
|
|
4593
|
-
onClick: handleConfirm
|
|
4607
|
+
onClick: handleConfirm,
|
|
4608
|
+
disabled: !untilValid
|
|
4594
4609
|
})]
|
|
4595
4610
|
})
|
|
4596
4611
|
})]
|
|
@@ -4699,33 +4714,44 @@ function RecurringDates(props) {
|
|
|
4699
4714
|
...startDateMember?.field?.schemaType.options,
|
|
4700
4715
|
...dateTimeOptions
|
|
4701
4716
|
};
|
|
4717
|
+
if (dateOnly === true) {
|
|
4718
|
+
startDateMember.field.schemaType.name = "date";
|
|
4719
|
+
} else {
|
|
4720
|
+
startDateMember.field.schemaType.name = "datetime";
|
|
4721
|
+
}
|
|
4722
|
+
if (validation?.startDate) {
|
|
4723
|
+
startDateMember.field.schemaType.validation = CustomValidation => validation?.startDate?.(CustomValidation);
|
|
4724
|
+
} else {
|
|
4725
|
+
startDateMember.field.schemaType.validation = DefaultRule => DefaultRule.required();
|
|
4726
|
+
}
|
|
4727
|
+
if (options?.fieldTitles?.startDate) {
|
|
4728
|
+
startDateMember.field.schemaType.title = options.fieldTitles.startDate;
|
|
4729
|
+
}
|
|
4730
|
+
if (options?.fieldDescriptions?.startDate) {
|
|
4731
|
+
startDateMember.field.schemaType.description = options.fieldDescriptions.startDate;
|
|
4732
|
+
}
|
|
4702
4733
|
}
|
|
4703
4734
|
if (endDateMember?.kind == "field") {
|
|
4704
4735
|
endDateMember.field.schemaType.options = {
|
|
4705
4736
|
...endDateMember?.field?.schemaType.options,
|
|
4706
4737
|
...dateTimeOptions
|
|
4707
4738
|
};
|
|
4708
|
-
|
|
4709
|
-
if (dateOnly === true) {
|
|
4710
|
-
if (startDateMember?.kind == "field") {
|
|
4711
|
-
startDateMember.field.schemaType.name = "date";
|
|
4712
|
-
}
|
|
4713
|
-
if (endDateMember?.kind == "field") {
|
|
4739
|
+
if (dateOnly === true) {
|
|
4714
4740
|
endDateMember.field.schemaType.name = "date";
|
|
4741
|
+
} else {
|
|
4742
|
+
endDateMember.field.schemaType.name = "datetime";
|
|
4715
4743
|
}
|
|
4716
|
-
|
|
4717
|
-
|
|
4718
|
-
|
|
4744
|
+
if (validation?.endDate) {
|
|
4745
|
+
endDateMember.field.schemaType.validation = CustomValidation => validation?.endDate?.(CustomValidation);
|
|
4746
|
+
} else {
|
|
4747
|
+
endDateMember.field.schemaType.validation = DefaultRule => DefaultRule.min(DefaultRule.valueOfField("startDate"));
|
|
4719
4748
|
}
|
|
4720
|
-
if (
|
|
4721
|
-
endDateMember.field.schemaType.
|
|
4749
|
+
if (options?.fieldTitles?.endDate) {
|
|
4750
|
+
endDateMember.field.schemaType.title = options.fieldTitles.endDate;
|
|
4751
|
+
}
|
|
4752
|
+
if (options?.fieldDescriptions?.endDate) {
|
|
4753
|
+
endDateMember.field.schemaType.description = options.fieldDescriptions.endDate;
|
|
4722
4754
|
}
|
|
4723
|
-
}
|
|
4724
|
-
if (validation?.startDate && startDateMember?.kind == "field") {
|
|
4725
|
-
startDateMember.field.schemaType.validation = CustomValidation => validation?.startDate?.(CustomValidation);
|
|
4726
|
-
}
|
|
4727
|
-
if (validation?.endDate && endDateMember?.kind == "field") {
|
|
4728
|
-
endDateMember.field.schemaType.validation = CustomValidation => validation?.endDate?.(CustomValidation);
|
|
4729
4755
|
}
|
|
4730
4756
|
const hasEndDate = currentValue?.endDate;
|
|
4731
4757
|
return /* @__PURE__ */jsxs(Stack, {
|
|
@@ -4796,6 +4822,7 @@ function RecurringDates(props) {
|
|
|
4796
4822
|
onChange,
|
|
4797
4823
|
initialValue: currentValue?.rrule,
|
|
4798
4824
|
startDate: startDateMember?.kind == "field" ? startDateMember?.field?.value : void 0,
|
|
4825
|
+
endDate: endDateMember?.kind == "field" ? endDateMember?.field?.value : void 0,
|
|
4799
4826
|
dateTimeOptions
|
|
4800
4827
|
})]
|
|
4801
4828
|
});
|
|
@@ -4850,7 +4877,9 @@ var recurringDateSchema = config => {
|
|
|
4850
4877
|
const {
|
|
4851
4878
|
dateTimeOptions,
|
|
4852
4879
|
dateOnly,
|
|
4853
|
-
validation
|
|
4880
|
+
validation,
|
|
4881
|
+
fieldTitles,
|
|
4882
|
+
fieldDescriptions
|
|
4854
4883
|
} = config;
|
|
4855
4884
|
return defineField({
|
|
4856
4885
|
name: "recurringDates",
|
|
@@ -4858,13 +4887,15 @@ var recurringDateSchema = config => {
|
|
|
4858
4887
|
type: "object",
|
|
4859
4888
|
icon: CalendarIcon,
|
|
4860
4889
|
fields: [defineField({
|
|
4861
|
-
title: "Start Date",
|
|
4890
|
+
title: fieldTitles?.startDate || "Start Date",
|
|
4891
|
+
description: fieldDescriptions?.startDate || "",
|
|
4862
4892
|
name: "startDate",
|
|
4863
4893
|
type: dateOnly ? "date" : "datetime",
|
|
4864
4894
|
options: dateTimeOptions,
|
|
4865
4895
|
validation: Rule => validation?.startDate ? validation.startDate(Rule) : Rule.required()
|
|
4866
4896
|
}), defineField({
|
|
4867
|
-
title: "End Date",
|
|
4897
|
+
title: fieldTitles?.endDate || "End Date",
|
|
4898
|
+
description: fieldDescriptions?.endDate || "",
|
|
4868
4899
|
name: "endDate",
|
|
4869
4900
|
type: dateOnly ? "date" : "datetime",
|
|
4870
4901
|
options: dateTimeOptions,
|