@licklist/design 0.44.522 → 0.44.523
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/events/edit-event-modal/IntervalInput.d.ts.map +1 -1
- package/dist/events/edit-event-modal/IntervalInput.js +1 -1
- package/dist/recurrence-input/RecurrenceEndInput.d.ts +2 -1
- package/dist/recurrence-input/RecurrenceEndInput.d.ts.map +1 -1
- package/dist/recurrence-input/RecurrenceEndInput.js +1 -1
- package/dist/recurrence-input/RecurrenceInput.d.ts +2 -1
- package/dist/recurrence-input/RecurrenceInput.d.ts.map +1 -1
- package/dist/recurrence-input/RecurrenceInput.js +1 -1
- package/package.json +1 -1
- package/src/events/edit-event-modal/IntervalInput.tsx +3 -0
- package/src/recurrence-input/RecurrenceEndInput.tsx +27 -9
- package/src/recurrence-input/RecurrenceInput.tsx +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntervalInput.d.ts","sourceRoot":"","sources":["../../../src/events/edit-event-modal/IntervalInput.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,6DAA6D,CAAC;AAIzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,UAAU,kBAAkB;IAC1B,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"IntervalInput.d.ts","sourceRoot":"","sources":["../../../src/events/edit-event-modal/IntervalInput.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,6DAA6D,CAAC;AAIzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,UAAU,kBAAkB;IAC1B,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,EAAE,kBAAkB,eAqJpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("tslib"),r=require("react"),n=(e=r)&&"object"==typeof e&&"default"in e?e.default:e,a=require("react-i18next"),o=require("react-bootstrap"),i=require("react-hook-form"),l=require("@react-aria/utils"),u=require("../../static/WarningMessage.js"),d=require("luxon");require("../../static/index.js");var s=require("react-intl"),c=require("../../recurrence-input/RecurrenceInput.js");var m=function(){var e=i.useFormContext().watch,n=e("start"),a=e("end"),o=s.useIntl(),l=o.formatList,u=o.formatNumber;return r.useMemo((function(){var e=d.Interval.fromDateTimes(d.DateTime.fromISO(n),d.DateTime.fromISO(a)).toDuration(["days","hours","minutes"]);if(e.isValid){var r=function(e,t){return u(e,{style:"unit",unit:t,unitDisplay:"long"})},o=[[e.days,"day"],[e.hours,"hour"],[e.minutes,"minute"]].filter((function(e){return t.__read(e,1)[0]}));return l(o.map((function(e){return r.apply(void 0,t.__spreadArray([],t.__read(e),!1))})),{style:"long",type:"unit"})}}),[n,a])},f=function(){var e=i.useFormContext().watch,t=a.useTranslation(["Design","Validation"]).t,n=e("start"),o=e("end");return{start:r.useMemo((function(){return{required:t("Validation:fieldRequired",{attribute:t("start")}),validate:function(e){return d.DateTime.fromISO(e).diffNow().toMillis()>0||t("Validation:fieldValidEventStart")}}}),[]),end:r.useMemo((function(){return{validate:function(e){return!e||(d.DateTime.fromISO(e).diff(d.DateTime.fromISO(n)).toMillis()>0||t("Validation:fieldValidEventEnd"))}}}),[n,o])}};exports.IntervalInput=function(e){var s,v,p=e.disabled,g=void 0!==p&&p,E=e.editedProductSet,I=e.productSetId,F=e.productSets,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("tslib"),r=require("react"),n=(e=r)&&"object"==typeof e&&"default"in e?e.default:e,a=require("react-i18next"),o=require("react-bootstrap"),i=require("react-hook-form"),l=require("@react-aria/utils"),u=require("../../static/WarningMessage.js"),d=require("luxon");require("../../static/index.js");var s=require("react-intl"),c=require("../../recurrence-input/RecurrenceInput.js");var m=function(){var e=i.useFormContext().watch,n=e("start"),a=e("end"),o=s.useIntl(),l=o.formatList,u=o.formatNumber;return r.useMemo((function(){var e=d.Interval.fromDateTimes(d.DateTime.fromISO(n),d.DateTime.fromISO(a)).toDuration(["days","hours","minutes"]);if(e.isValid){var r=function(e,t){return u(e,{style:"unit",unit:t,unitDisplay:"long"})},o=[[e.days,"day"],[e.hours,"hour"],[e.minutes,"minute"]].filter((function(e){return t.__read(e,1)[0]}));return l(o.map((function(e){return r.apply(void 0,t.__spreadArray([],t.__read(e),!1))})),{style:"long",type:"unit"})}}),[n,a])},f=function(){var e=i.useFormContext().watch,t=a.useTranslation(["Design","Validation"]).t,n=e("start"),o=e("end");return{start:r.useMemo((function(){return{required:t("Validation:fieldRequired",{attribute:t("start")}),validate:function(e){return d.DateTime.fromISO(e).diffNow().toMillis()>0||t("Validation:fieldValidEventStart")}}}),[]),end:r.useMemo((function(){return{validate:function(e){return!e||(d.DateTime.fromISO(e).diff(d.DateTime.fromISO(n)).toMillis()>0||t("Validation:fieldValidEventEnd"))}}}),[n,o])}};exports.IntervalInput=function(e){var s,v,p=e.disabled,g=void 0!==p&&p,E=e.editedProductSet,I=e.productSetId,F=e.productSets,y=a.useTranslation(["Design","Validation"]).t,C=i.useFormContext(),h=C.register,b=C.formState.errors,_=C.watch,D=C.control,S=C.trigger,q=C.setValue,T=m(),M=f(),k=_("rrule"),x=_("start"),O=_("end"),V=t.__read(r.useState(Boolean(k)),2),w=V[0],R=V[1],B=t.__read(r.useState(!1),2),j=B[0],G=B[1],P=l.useId(),L=r.useRef(null),N=r.useRef(null);return r.useEffect((function(){E&&R(!1)}),[E]),r.useEffect((function(){if(F){var e=F.find((function(e){return E&&(null==e?void 0:e.id)===(null==E?void 0:E.id)||Boolean(null==e?void 0:e.parentMenuId)&&(null==e?void 0:e.id)===I}));G(Boolean(e))}}),[F,I,G,E]),n.createElement(n.Fragment,null,n.createElement(o.Form.Row,{className:"interval-container"},n.createElement(o.Form.Group,{as:o.Col,controlId:"start"},n.createElement(o.Form.Label,null,y("start")),n.createElement(o.Form.Control,t.__assign({type:"datetime-local"},h("start",M.start),{value:x,name:"start",required:!0,isInvalid:Boolean(b.start),onChange:function(e){var t=e.target.value;R(!1),q("start",t),d.DateTime.fromISO(O).diff(d.DateTime.fromISO(t)).toMillis()<0&&q("end",t)},onClick:function(){var e;return null===(e=null==L?void 0:L.current)||void 0===e?void 0:e.showPicker()},ref:L,disabled:g})),n.createElement(o.Form.Control.Feedback,{type:"invalid"},null===(s=b.start)||void 0===s?void 0:s.message)),n.createElement(o.Form.Group,{as:o.Col,controlId:"end"},n.createElement(o.Form.Label,null,y("end")),n.createElement(o.Form.Control,t.__assign({type:"datetime-local"},h("end",M.end),{value:O,name:"end",onChange:function(e){return function(e){q("end",e),S("end")}(e.target.value)},min:x,isInvalid:Boolean(b.end),onClick:function(){var e;return null===(e=null==N?void 0:N.current)||void 0===e?void 0:e.showPicker()},ref:N,disabled:g})),n.createElement(o.Form.Control.Feedback,{type:"invalid"},null===(v=b.end)||void 0===v?void 0:v.message),n.createElement(o.Form.Text,{muted:!0},T&&"lasts ".concat(T)))),x&&n.createElement(o.Form.Group,{controlId:P},n.createElement(o.Form.Check,{label:"Recurrent",custom:!0,checked:w,onChange:function(e){var t=e.target.checked;R(t)},disabled:g||Boolean(E)}),!w&&n.createElement(o.Form.Text,{muted:!0},y("reccurentDescription",{item:y("event")}))),j&&n.createElement(u.default,{message:y("recurrentOverridesWarining")}),w&&x&&n.createElement(o.Form.Group,null,n.createElement(i.Controller,{control:D,name:"rrule",render:function(e){var t=e.field,r=t.value,a=t.onChange;return n.createElement(c.RecurrenceInput,{value:r,onChange:a,date:x,minDate:d.DateTime.fromISO(x).plus({day:1}).toFormat("yyyy-MM-dd"),disabled:g})}})))};
|
|
@@ -3,6 +3,7 @@ import { SupportedFrequency } from "./utils";
|
|
|
3
3
|
interface Props {
|
|
4
4
|
disabled?: boolean;
|
|
5
5
|
date: string;
|
|
6
|
+
minDate?: string;
|
|
6
7
|
frequency: SupportedFrequency;
|
|
7
8
|
until?: string;
|
|
8
9
|
count?: number;
|
|
@@ -11,6 +12,6 @@ interface Props {
|
|
|
11
12
|
count?: number;
|
|
12
13
|
}) => void;
|
|
13
14
|
}
|
|
14
|
-
declare function RecurrenceEndInput({ disabled, date, frequency, until, count, onChange, }: Props): JSX.Element;
|
|
15
|
+
declare function RecurrenceEndInput({ disabled, date, frequency, until, count, onChange, minDate, }: Props): JSX.Element;
|
|
15
16
|
export default RecurrenceEndInput;
|
|
16
17
|
//# sourceMappingURL=RecurrenceEndInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurrenceEndInput.d.ts","sourceRoot":"","sources":["../../src/recurrence-input/RecurrenceEndInput.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"RecurrenceEndInput.d.ts","sourceRoot":"","sources":["../../src/recurrence-input/RecurrenceEndInput.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG7C,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChE;AAED,iBAAS,kBAAkB,CAAC,EAC1B,QAAgB,EAChB,IAAI,EACJ,SAAS,EACT,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,GACR,EAAE,KAAK,eAmGP;AA2BD,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t,r=require("react"),n=e(r),a=require("react-bootstrap"),
|
|
1
|
+
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t,r=require("react"),n=e(r),a=require("@licklist/core/dist/Config"),l=require("react-i18next"),u=require("react-bootstrap"),c=require("@react-aria/utils"),o=require("luxon"),i=e(require("rrule"));var m=((t={})[i.DAILY]=30,t[i.WEEKLY]=13,t[i.MONTHLY]=12,t[i.YEARLY]=5,t),s=function(e){var t,r,n=e.date,a=e.frequency,l=(t={},t[i.DAILY]="days",t[i.WEEKLY]="weeks",t[i.MONTHLY]="months",t[i.YEARLY]="years",t)[a];return o.DateTime.fromISO(n).plus((r={},r[l]=m[a],r)).toISODate()};exports.default=function(e){var t=e.disabled,i=void 0!==t&&t,d=e.date,E=e.frequency,f=e.until,p=e.count,h=e.onChange,C=e.minDate,v=l.useTranslation("Design").t,b=c.useId(),y=c.useId(),F=c.useId(),k=r.useRef(null);return r.useEffect((function(){var e=o.DateTime.fromFormat(null!=f?f:s({date:d,frequency:E}),a.DATE_FORMAT);o.DateTime.fromFormat(C,a.DATE_FORMAT)>e&&h({until:C})}),[C,h,f,d,E]),n.createElement(u.Form.Group,null,n.createElement(u.Form.Label,null,v("ends")),n.createElement(u.Form.Check,{type:"radio",id:b,custom:!0,className:"mt-3"},n.createElement(u.Form.Check.Input,{type:"radio",checked:!f&&500===p,onChange:function(){return h({count:500})},disabled:i}),n.createElement(u.Form.Check.Label,null,v("never"))),n.createElement(u.Form.Check,{type:"radio",id:y,custom:!0,className:"mt-3"},n.createElement(u.Row,{className:"align-items-center"},n.createElement(u.Col,{xs:2},n.createElement(u.Form.Check.Input,{type:"radio",checked:Boolean(f)&&!p,onChange:function(){return h({until:s({date:d,frequency:E})})},disabled:i}),n.createElement(u.Form.Check.Label,null,v("on"))),n.createElement(u.Col,null,n.createElement(u.Form.Control,{type:"date",min:C,disabled:i||!f,"aria-label":"Date on which the recurrence ends",value:null!=f?f:s({date:d,frequency:E}),className:f&&"date-input-with-value",ref:k,onClick:function(){var e;return null===(e=null==k?void 0:k.current)||void 0===e?void 0:e.showPicker()},onChange:function(e){var t=e.target.value;return h({until:t})}})))),n.createElement(u.Form.Check,{type:"radio",id:F,custom:!0,className:"mt-3"},n.createElement(u.Row,{className:"align-items-center"},n.createElement(u.Col,{xs:2},n.createElement(u.Form.Check.Input,{type:"radio",checked:p<500&&!f,onChange:function(){return h({count:m[E]})},disabled:i}),n.createElement(u.Form.Check.Label,null,v("after"))),n.createElement(u.Col,null,n.createElement(u.InputGroup,null,n.createElement(u.Form.Control,{type:"number",min:1,max:500,disabled:i||!p||500===p,"aria-label":"Occurrence count",value:null!=p?p:m[E],onChange:function(e){var t=e.target.value;return h({count:Number(t)})}}),n.createElement(u.InputGroup.Append,null,n.createElement(u.InputGroup.Text,null,v("occurences"))))))))};
|
|
@@ -3,9 +3,10 @@ import { Frequency } from "rrule";
|
|
|
3
3
|
export interface RecurrenceInputProps {
|
|
4
4
|
disabled?: boolean;
|
|
5
5
|
date: string;
|
|
6
|
+
minDate?: string;
|
|
6
7
|
value?: string;
|
|
7
8
|
onChange: (value: string) => void;
|
|
8
9
|
initialFrequency?: Frequency;
|
|
9
10
|
}
|
|
10
|
-
export declare function RecurrenceInput({ disabled, date, value, onChange, initialFrequency, }: RecurrenceInputProps): JSX.Element;
|
|
11
|
+
export declare function RecurrenceInput({ disabled, date, minDate, value, onChange, initialFrequency, }: RecurrenceInputProps): JSX.Element;
|
|
11
12
|
//# sourceMappingURL=RecurrenceInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurrenceInput.d.ts","sourceRoot":"","sources":["../../src/recurrence-input/RecurrenceInput.tsx"],"names":[],"mappings":";AAIA,OAAc,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAWlD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAgB,EAChB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,gBAAmC,GACpC,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"RecurrenceInput.d.ts","sourceRoot":"","sources":["../../src/recurrence-input/RecurrenceInput.tsx"],"names":[],"mappings":";AAIA,OAAc,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAWlD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAgB,EAChB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,gBAAmC,GACpC,EAAE,oBAAoB,eAqEtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var r=require("tslib"),n=require("react"),t=e(n),a=require("luxon"),u=require("rrule"),i=e(u),d=require("./RecurrenceEndInput.js"),y=require("./RecurrenceIntervalAndFrequencyInput.js"),l=require("./utils.js"),c=require("./RecurrenceMonthlyRepeatByInput.js"),o=require("./RecurrenceWeekdaysInput.js");var s=function(e){var n,t=e.rrule,a=e.date,i=e.initialFrequency,d=void 0===i?u.Frequency.WEEKLY:i,y=r.__assign({interval:1,freq:d},t&&a&&l.parseAndValidateRRule({rrule:t,date:a})),c=y.byweekday;return y.freq!==u.Frequency.WEEKLY||(null===(n=y.byweekday)||void 0===n?void 0:n.length)?y.freq===u.Frequency.MONTHLY&&y.byweekday&&(c=y.byweekday[0]):c=[l.getWeekdayForFrequency({date:a,frequency:y.freq})],r.__assign(r.__assign({},y),{byweekday:c})};exports.RecurrenceInput=function(e){var f=e.disabled,q=void 0!==f&&f,v=e.date,b=e.
|
|
1
|
+
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var r=require("tslib"),n=require("react"),t=e(n),a=require("luxon"),u=require("rrule"),i=e(u),d=require("./RecurrenceEndInput.js"),y=require("./RecurrenceIntervalAndFrequencyInput.js"),l=require("./utils.js"),c=require("./RecurrenceMonthlyRepeatByInput.js"),o=require("./RecurrenceWeekdaysInput.js");var s=function(e){var n,t=e.rrule,a=e.date,i=e.initialFrequency,d=void 0===i?u.Frequency.WEEKLY:i,y=r.__assign({interval:1,freq:d},t&&a&&l.parseAndValidateRRule({rrule:t,date:a})),c=y.byweekday;return y.freq!==u.Frequency.WEEKLY||(null===(n=y.byweekday)||void 0===n?void 0:n.length)?y.freq===u.Frequency.MONTHLY&&y.byweekday&&(c=y.byweekday[0]):c=[l.getWeekdayForFrequency({date:a,frequency:y.freq})],r.__assign(r.__assign({},y),{byweekday:c})};exports.RecurrenceInput=function(e){var f=e.disabled,q=void 0!==f&&f,v=e.date,b=e.minDate,E=e.value,_=e.onChange,g=e.initialFrequency,k=void 0===g?u.Frequency.WEEKLY:g,p=r.__read(n.useReducer((function(e,n){return r.__assign(r.__assign({},e),n)}),s({rrule:E,date:v,initialFrequency:k})),2),w=p[0],F=p[1];return n.useEffect((function(){return _(i.optionsToString(r.__assign(r.__assign({},w),{tzid:"Europe/London"})).replace("RRULE:",""))}),[w]),t.createElement("div",null,t.createElement(y.default,{interval:w.interval,frequency:w.freq,onChange:function(e){var r=e.interval,n=e.frequency;F({interval:r,freq:n,byweekday:n===w.freq?w.byweekday:n===i.WEEKLY?[l.getWeekdayForFrequency({date:v,frequency:n})]:void 0})},disabled:q}),w.freq===i.WEEKLY&&Array.isArray(w.byweekday)&&t.createElement(o.default,{date:v,value:w.byweekday,onChange:function(e){return F({byweekday:e})},disabled:q}),w.freq===i.MONTHLY&&!Array.isArray(w.byweekday)&&t.createElement(c.default,{date:v,value:w.byweekday,onChange:function(e){return F({byweekday:e})},disabled:q}),t.createElement(d.default,{date:v,minDate:b,frequency:w.freq,until:w.until&&a.DateTime.fromJSDate(w.until).toISODate(),count:w.count,onChange:function(e){var r=e.count,n=e.until;return F({count:r,until:n?a.DateTime.fromISO(n).toJSDate():void 0})},disabled:q}))};
|
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import React, { useRef } from "react";
|
|
1
|
+
import React, { useEffect, useRef } from "react";
|
|
2
2
|
import { useId } from "@react-aria/utils";
|
|
3
3
|
import { DateTime, DurationUnit } from "luxon";
|
|
4
4
|
import { Col, Form, InputGroup, Row } from "react-bootstrap";
|
|
5
5
|
import RRule from "rrule";
|
|
6
|
-
|
|
6
|
+
import { DATE_FORMAT } from "@licklist/core/dist/Config";
|
|
7
|
+
import { useTranslation } from "react-i18next";
|
|
7
8
|
import { SupportedFrequency } from "./utils";
|
|
8
9
|
import HTMLInputDateElement from "../types/static/HTMLInputDateElement";
|
|
9
10
|
|
|
10
11
|
interface Props {
|
|
11
12
|
disabled?: boolean;
|
|
12
|
-
date: string;
|
|
13
|
+
date: string; // yyyy-mm-ddThh:mm
|
|
14
|
+
minDate?: string; // should be in yyyy-mm-dd format
|
|
13
15
|
frequency: SupportedFrequency;
|
|
14
|
-
until?: string;
|
|
16
|
+
until?: string; // yyyy-mm-dd
|
|
15
17
|
count?: number;
|
|
16
18
|
onChange: (values: { until?: string; count?: number }) => void;
|
|
17
19
|
}
|
|
@@ -23,16 +25,31 @@ function RecurrenceEndInput({
|
|
|
23
25
|
until,
|
|
24
26
|
count,
|
|
25
27
|
onChange,
|
|
28
|
+
minDate,
|
|
26
29
|
}: Props) {
|
|
30
|
+
const { t } = useTranslation("Design");
|
|
27
31
|
// unique ids for radios
|
|
28
32
|
const neverId = useId();
|
|
29
33
|
const onId = useId();
|
|
30
34
|
const afterId = useId();
|
|
31
35
|
const dateInput = useRef<HTMLInputDateElement | null>(null);
|
|
32
36
|
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const untilDatetime = DateTime.fromFormat(
|
|
39
|
+
until ?? getUntil({ date, frequency }),
|
|
40
|
+
DATE_FORMAT
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const minDatetime = DateTime.fromFormat(minDate, DATE_FORMAT);
|
|
44
|
+
|
|
45
|
+
if (minDatetime > untilDatetime) {
|
|
46
|
+
onChange({ until: minDate });
|
|
47
|
+
}
|
|
48
|
+
}, [minDate, onChange, until, date, frequency]);
|
|
49
|
+
|
|
33
50
|
return (
|
|
34
51
|
<Form.Group>
|
|
35
|
-
<Form.Label>
|
|
52
|
+
<Form.Label>{t("ends")}</Form.Label>
|
|
36
53
|
|
|
37
54
|
<Form.Check type="radio" id={neverId} custom className="mt-3">
|
|
38
55
|
<Form.Check.Input
|
|
@@ -41,7 +58,7 @@ function RecurrenceEndInput({
|
|
|
41
58
|
onChange={() => onChange({ count: 500 })}
|
|
42
59
|
disabled={disabled}
|
|
43
60
|
/>
|
|
44
|
-
<Form.Check.Label>
|
|
61
|
+
<Form.Check.Label>{t("never")}</Form.Check.Label>
|
|
45
62
|
</Form.Check>
|
|
46
63
|
|
|
47
64
|
<Form.Check type="radio" id={onId} custom className="mt-3">
|
|
@@ -55,11 +72,12 @@ function RecurrenceEndInput({
|
|
|
55
72
|
}
|
|
56
73
|
disabled={disabled}
|
|
57
74
|
/>
|
|
58
|
-
<Form.Check.Label>
|
|
75
|
+
<Form.Check.Label>{t("on")}</Form.Check.Label>
|
|
59
76
|
</Col>
|
|
60
77
|
<Col>
|
|
61
78
|
<Form.Control
|
|
62
79
|
type="date"
|
|
80
|
+
min={minDate}
|
|
63
81
|
disabled={disabled || !until}
|
|
64
82
|
aria-label="Date on which the recurrence ends"
|
|
65
83
|
value={until ?? getUntil({ date, frequency })}
|
|
@@ -83,7 +101,7 @@ function RecurrenceEndInput({
|
|
|
83
101
|
}
|
|
84
102
|
disabled={disabled}
|
|
85
103
|
/>
|
|
86
|
-
<Form.Check.Label>
|
|
104
|
+
<Form.Check.Label>{t("after")}</Form.Check.Label>
|
|
87
105
|
</Col>
|
|
88
106
|
<Col>
|
|
89
107
|
<InputGroup>
|
|
@@ -99,7 +117,7 @@ function RecurrenceEndInput({
|
|
|
99
117
|
}
|
|
100
118
|
/>
|
|
101
119
|
<InputGroup.Append>
|
|
102
|
-
<InputGroup.Text>
|
|
120
|
+
<InputGroup.Text>{t("occurences")}</InputGroup.Text>
|
|
103
121
|
</InputGroup.Append>
|
|
104
122
|
</InputGroup>
|
|
105
123
|
</Col>
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
export interface RecurrenceInputProps {
|
|
17
17
|
disabled?: boolean;
|
|
18
18
|
date: string;
|
|
19
|
+
minDate?: string;
|
|
19
20
|
value?: string;
|
|
20
21
|
onChange: (value: string) => void;
|
|
21
22
|
initialFrequency?: Frequency;
|
|
@@ -24,6 +25,7 @@ export interface RecurrenceInputProps {
|
|
|
24
25
|
export function RecurrenceInput({
|
|
25
26
|
disabled = false,
|
|
26
27
|
date,
|
|
28
|
+
minDate,
|
|
27
29
|
value,
|
|
28
30
|
onChange,
|
|
29
31
|
initialFrequency = Frequency.WEEKLY,
|
|
@@ -82,6 +84,7 @@ export function RecurrenceInput({
|
|
|
82
84
|
)}
|
|
83
85
|
<RecurrenceEndInput
|
|
84
86
|
date={date}
|
|
87
|
+
minDate={minDate}
|
|
85
88
|
frequency={state.freq}
|
|
86
89
|
until={state.until && DateTime.fromJSDate(state.until).toISODate()}
|
|
87
90
|
count={state.count}
|