@licklist/design 0.44.485-dev.94 → 0.44.485-dev.96

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.
Files changed (26) hide show
  1. package/dist/iframe/event/event-calendar/components/CalendarDate/CalendarDate.js +1 -1
  2. package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.d.ts +5 -1
  3. package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.d.ts.map +1 -1
  4. package/dist/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.js +1 -1
  5. package/dist/styles/resources-blocking/_index.scss +38 -1
  6. package/dist/zone/form/components/AvailableTimesControl.d.ts.map +1 -1
  7. package/dist/zone/form/components/AvailableTimesControl.js +1 -1
  8. package/dist/zone/form/utils/dates.d.ts +0 -1
  9. package/dist/zone/form/utils/dates.d.ts.map +1 -1
  10. package/dist/zone/form/utils/dates.js +1 -1
  11. package/package.json +1 -1
  12. package/src/iframe/back-button/index.ts +0 -1
  13. package/src/iframe/event/event-calendar/components/CalendarDate/CalendarDate.tsx +1 -1
  14. package/src/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.tsx +14 -10
  15. package/src/styles/resources-blocking/_index.scss +38 -1
  16. package/src/zone/form/components/AvailableTimesControl.tsx +2 -4
  17. package/src/zone/form/utils/dates.ts +0 -24
  18. package/dist/assets/dashboard/blockingClock.png +0 -0
  19. package/dist/provider/resources-blocking-modal/ResourcesBlockingModal.d.ts +0 -12
  20. package/dist/provider/resources-blocking-modal/ResourcesBlockingModal.d.ts.map +0 -1
  21. package/dist/provider/resources-blocking-modal/index.d.ts +0 -2
  22. package/dist/provider/resources-blocking-modal/index.d.ts.map +0 -1
  23. package/src/assets/dashboard/blockingClock.png +0 -0
  24. package/src/provider/resources-blocking-modal/ResourcesBlockingModal.stories.tsx +0 -51
  25. package/src/provider/resources-blocking-modal/ResourcesBlockingModal.tsx +0 -134
  26. package/src/provider/resources-blocking-modal/index.ts +0 -1
@@ -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=e(require("react")),a=require("react-bootstrap"),r=e(require("clsx"));exports.CalendarDate=function(e){var i=e.initialDate,d=e.currentDate,n=e.selectedDate,l=e.setSelectedDate,c=e.isDisabled,s=void 0!==c&&c,u=d<i||s;return t.createElement(a.Button,{variant:"link",disabled:u,className:r("calendar-date",n&&+d==+n&&"selected-date",u&&"disabled-date"),onClick:function(){s||l(d)}},d.day)};
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=e(require("react")),a=require("react-bootstrap"),r=e(require("clsx"));exports.CalendarDate=function(e){var d=e.initialDate,i=e.currentDate,l=e.selectedDate,n=e.setSelectedDate,c=e.isDisabled,s=void 0!==c&&c,u=i<d||s;return t.createElement(a.Button,{variant:"link",disabled:u,className:r("calendar-date",(null==l?void 0:l.hasSame(i,"day"))&&"selected-date",u&&"disabled-date"),onClick:function(){s||n(i)}},i.day)};
@@ -2,7 +2,11 @@
2
2
  interface RecurrenceIntervalAndFrequencyInputProps {
3
3
  disabled?: boolean;
4
4
  minDate?: string;
5
+ startDateLabel?: string;
6
+ startTimeLabel?: string;
7
+ endDateLabel?: string;
8
+ endTimeLabel?: string;
5
9
  }
6
- declare function RecurrenceIntervalAndFrequencyInput({ disabled, minDate, }: RecurrenceIntervalAndFrequencyInputProps): JSX.Element;
10
+ declare function RecurrenceIntervalAndFrequencyInput({ disabled, minDate, startDateLabel, startTimeLabel, endDateLabel, endTimeLabel, }: RecurrenceIntervalAndFrequencyInputProps): JSX.Element;
7
11
  export default RecurrenceIntervalAndFrequencyInput;
8
12
  //# sourceMappingURL=RecurrenceIntervalAndFrequencyInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecurrenceIntervalAndFrequencyInput.d.ts","sourceRoot":"","sources":["../../src/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.tsx"],"names":[],"mappings":";AAMA,UAAU,wCAAwC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iBAAS,mCAAmC,CAAC,EAC3C,QAAgB,EAChB,OAAO,GACR,EAAE,wCAAwC,eAkG1C;AAED,eAAe,mCAAmC,CAAC"}
1
+ {"version":3,"file":"RecurrenceIntervalAndFrequencyInput.d.ts","sourceRoot":"","sources":["../../src/recurring-date-picker-input/RecurrenceIntervalAndFrequencyInput.tsx"],"names":[],"mappings":";AAMA,UAAU,wCAAwC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iBAAS,mCAAmC,CAAC,EAC3C,QAAgB,EAChB,OAAO,EACP,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,GACb,EAAE,wCAAwC,eA8F1C;AAED,eAAe,mCAAmC,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("tslib"),a=require("react"),r=(e=a)&&"object"==typeof e&&"default"in e?e.default:e,l=require("react-i18next"),n=require("react-bootstrap"),o=require("react-hook-form");exports.default=function(e){var a,i,m=e.disabled,s=void 0!==m&&m,u=e.minDate,d=l.useTranslation(["Design","Notification","App"]).t,c=o.useFormContext(),v=c.getValues,g=c.setValue,p=c.formState.errors,E=c.register,F=v("startDate"),f=v("endDate"),D=v("startTime"),b=v("endTime");return r.createElement(r.Fragment,null,r.createElement(n.Row,{className:"align-items-center"},r.createElement(n.Col,{xs:12,sm:6},r.createElement(n.Form.Group,null,r.createElement(n.Form.Label,null,d("Design:fromDate")),r.createElement(n.Form.Control,t.__assign({type:"date"},E("startDate",{required:!0}),{defaultValue:F,className:F&&"date-input-with-value",disabled:s,onChange:function(e){var t=e.target.value;g("startDate",t)},min:u,isInvalid:Boolean(p.startDate)})),r.createElement(n.Form.Control.Feedback,{type:"invalid"},null===(a=p.startDate)||void 0===a?void 0:a.message))),r.createElement(n.Col,{xs:12,sm:6},r.createElement(n.Form.Group,null,r.createElement(n.Form.Label,null,d("Design:toDate")),r.createElement(n.Form.Control,t.__assign({type:"date"},E("endDate",{required:!0}),{defaultValue:f,className:f&&"date-input-with-value",disabled:s,onChange:function(e){var t=e.target.value;g("endDate",t)},min:F||void 0,isInvalid:Boolean(p.endDate)})),r.createElement(n.Form.Control.Feedback,{type:"invalid"},null===(i=p.endDate)||void 0===i?void 0:i.message)))),r.createElement(n.Row,{className:"align-items-center"},r.createElement(n.Col,{xs:12,sm:6},r.createElement(n.Form.Group,null,r.createElement(n.Form.Label,null,d("Design:availableFrom")),r.createElement(n.Form.Control,t.__assign({type:"time"},E("startTime",{required:!1}),{placeholder:"hh:mm",defaultValue:D,disabled:s,onChange:function(e){var t=e.target.value;g("startTime","".concat(t,":00"))},isInvalid:Boolean(p.startTime)})))),r.createElement(n.Col,{xs:12,sm:6},r.createElement(n.Form.Group,null,r.createElement(n.Form.Label,null,d("Design:availableTo")),r.createElement(n.Form.Control,t.__assign({type:"time"},E("endTime",{required:!1}),{placeholder:"hh:mm",defaultValue:b,disabled:s,onChange:function(e){var t=e.target.value;g("endTime","".concat(t,":59"))},isInvalid:Boolean(p.endTime)}))))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("tslib"),a=require("react"),l=(e=a)&&"object"==typeof e&&"default"in e?e.default:e,r=require("react-i18next"),n=require("react-bootstrap"),o=require("react-hook-form");exports.default=function(e){var a,i,m=e.disabled,s=void 0!==m&&m,u=e.minDate,d=e.startDateLabel,c=e.startTimeLabel,v=e.endDateLabel,b=e.endTimeLabel,p=r.useTranslation(["Design","Notification","App"]).t,E=o.useFormContext(),g=E.getValues,D=E.setValue,F=E.formState.errors,f=E.register,C=g("startDate"),h=g("endDate"),T=g("startTime"),_=g("endTime");return l.createElement(l.Fragment,null,l.createElement(n.Row,{className:"align-items-center"},l.createElement(n.Col,{xs:12,sm:6},l.createElement(n.Form.Group,null,l.createElement(n.Form.Label,null,null!=d?d:p("Design:fromDate")),l.createElement(n.Form.Control,t.__assign({type:"date"},f("startDate",{required:!0}),{defaultValue:C,className:C&&"date-input-with-value",disabled:s,onChange:function(e){var t=e.target.value;D("startDate",t)},min:u,isInvalid:Boolean(F.startDate)})),l.createElement(n.Form.Control.Feedback,{type:"invalid"},null===(a=F.startDate)||void 0===a?void 0:a.message))),l.createElement(n.Col,{xs:12,sm:6},l.createElement(n.Form.Group,null,l.createElement(n.Form.Label,null,null!=v?v:p("Design:toDate")),l.createElement(n.Form.Control,t.__assign({type:"date"},f("endDate",{required:!0}),{defaultValue:h,className:h&&"date-input-with-value",disabled:s,onChange:function(e){var t=e.target.value;D("endDate",t)},min:C||void 0,isInvalid:Boolean(F.endDate)})),l.createElement(n.Form.Control.Feedback,{type:"invalid"},null===(i=F.endDate)||void 0===i?void 0:i.message)))),l.createElement(n.Row,{className:"align-items-center"},l.createElement(n.Col,{xs:12,sm:6},l.createElement(n.Form.Group,null,l.createElement(n.Form.Label,null,null!=c?c:p("Design:availableFrom")),l.createElement(n.Form.Control,t.__assign({type:"time"},f("startTime",{required:!1}),{placeholder:"hh:mm",defaultValue:T,disabled:s,isInvalid:Boolean(F.startTime)})))),l.createElement(n.Col,{xs:12,sm:6},l.createElement(n.Form.Group,null,l.createElement(n.Form.Label,null,null!=b?b:p("Design:availableTo")),l.createElement(n.Form.Control,t.__assign({type:"time"},f("endTime",{required:!1}),{placeholder:"hh:mm",defaultValue:_,disabled:s,isInvalid:Boolean(F.endTime)}))))))};
@@ -7,6 +7,37 @@
7
7
  overflow: auto;
8
8
  }
9
9
 
10
+ .reccurrence-interval-container {
11
+ .form-group {
12
+ margin-bottom: 0.5rem;
13
+ .form-control {
14
+ height: 1.5rem;
15
+ font-size: 0.625rem;
16
+ border: 2px solid #dcdcdc;
17
+ border-radius: 0.5rem;
18
+ }
19
+ }
20
+ }
21
+
22
+ .custom-checkbox .custom-control-label::before {
23
+ width: 1.5rem;
24
+ height: 1.5rem;
25
+ border-radius: 0.5rem;
26
+ border: 2px solid #0e8ce2;
27
+ margin-top: -0.3rem;
28
+ }
29
+ .custom-checkbox .custom-control-label::after {
30
+ width: 1.5rem;
31
+ height: 1.5rem;
32
+ top: 0;
33
+ }
34
+
35
+ .custom-control-label {
36
+ padding-left: 0.5rem;
37
+ font-weight: 400;
38
+ font-size: 0.875rem;
39
+ }
40
+
10
41
  label,
11
42
  header,
12
43
  button {
@@ -14,6 +45,10 @@
14
45
  font-size: 0.875rem;
15
46
  }
16
47
 
48
+ .title {
49
+ margin-left: 0.25rem;
50
+ }
51
+
17
52
  header {
18
53
  display: flex;
19
54
  justify-content: space-between;
@@ -46,6 +81,7 @@
46
81
  display: flex;
47
82
  align-items: center;
48
83
  gap: 1rem;
84
+ margin-bottom: 1rem;
49
85
 
50
86
  span {
51
87
  font-weight: 600;
@@ -58,6 +94,7 @@
58
94
  justify-content: space-between;
59
95
  align-items: center;
60
96
  gap: 0.25rem;
97
+ margin-bottom: 0.5rem;
61
98
  }
62
99
 
63
100
  .text-input.form-group {
@@ -90,7 +127,7 @@
90
127
  font-weight: 600;
91
128
  }
92
129
 
93
- .lane {
130
+ .resource {
94
131
  margin-bottom: 0.25rem;
95
132
  }
96
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AvailableTimesControl.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/components/AvailableTimesControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAKf,OAAO,EAAE,QAAQ,EAAE,MAAM,4DAA4D,CAAC;AAMtF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM;QAAE,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAIF,eAAO,MAAM,qBAAqB,6GA4FhC,CAAC"}
1
+ {"version":3,"file":"AvailableTimesControl.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/components/AvailableTimesControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAKf,OAAO,EAAE,QAAQ,EAAE,MAAM,4DAA4D,CAAC;AAItF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM;QAAE,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAIF,eAAO,MAAM,qBAAqB,6GA4FhC,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("tslib"),a=require("react"),t=(e=a)&&"object"==typeof e&&"default"in e?e.default:e,i=require("react-i18next"),l=require("react-bootstrap"),n=require("react-hook-form"),s=require("@react-aria/utils"),o=require("../utils/dates.js"),u=a.forwardRef((function(e,u){var c,m=e.isLoading,d=e.workHours,f=e.defaultValues,v=void 0===f?[]:f,b=s.useId(),g=i.useTranslation(["Design","Validation"]).t,h=n.useForm({mode:"onChange"}),p=h.register,T=h.formState.errors,k=h.reset,_=h.trigger,E=h.getValues,q=h.setValue,y=(0,h.watch)("availableTimes")||[],C=a.useMemo((function(){return o.getCheckboxesByWorkHours(d)}),[d]);a.useImperativeHandle(u,(function(){return{trigger:_,getValues:E}}));return a.useEffect((function(){v&&k({availableTimes:v})}),[v]),t.createElement(l.Form.Group,{controlId:b},t.createElement(l.Form.Label,null,g("Design:startTimes")),t.createElement("div",{className:"zone-available-times"},C.map((function(e){return t.createElement(l.Form.Check,{key:e,inline:!0,custom:!0,id:e},t.createElement(l.Form.Check.Input,{type:"checkbox",value:e,checked:y.includes(o.calculateTimeWithOffset(e)),onChange:function(){return function(e){var a=o.calculateTimeWithOffset(e);y.includes(a)?q("availableTimes",y.filter((function(e){return e!==a}))):q("availableTimes",r.__spreadArray(r.__spreadArray([],r.__read(y),!1),[a],!1))}(e)},disabled:m}),t.createElement(l.Form.Check.Label,null,e))}))),t.createElement(l.Form.Control,r.__assign({type:"hidden"},p("availableTimes",{required:{value:!0,message:g("Validation:fieldMinNumber",{attribute:g("startTimes"),min:1})}}))),t.createElement("div",{className:"manual-form-error"},null===(c=T.availableTimes)||void 0===c?void 0:c.message))}));exports.AvailableTimesControl=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("tslib"),t=require("react"),a=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,i=require("react-i18next"),l=require("react-bootstrap"),s=require("react-hook-form"),n=require("@react-aria/utils"),u=require("@licklist/plugins/dist/utils/time"),o=require("../utils/dates.js"),c=t.forwardRef((function(e,c){var m,d=e.isLoading,f=e.workHours,v=e.defaultValues,b=void 0===v?[]:v,g=n.useId(),p=i.useTranslation(["Design","Validation"]).t,h=s.useForm({mode:"onChange"}),T=h.register,k=h.formState.errors,_=h.reset,q=h.trigger,E=h.getValues,y=h.setValue,C=(0,h.watch)("availableTimes")||[],F=t.useMemo((function(){return o.getCheckboxesByWorkHours(f)}),[f]);t.useImperativeHandle(c,(function(){return{trigger:q,getValues:E}}));return t.useEffect((function(){b&&_({availableTimes:b})}),[b]),a.createElement(l.Form.Group,{controlId:g},a.createElement(l.Form.Label,null,p("Design:startTimes")),a.createElement("div",{className:"zone-available-times"},F.map((function(e){return a.createElement(l.Form.Check,{key:e,inline:!0,custom:!0,id:e},a.createElement(l.Form.Check.Input,{type:"checkbox",value:e,checked:C.includes(u.calculateTimeWithOffset(e)),onChange:function(){return function(e){var t=u.calculateTimeWithOffset(e);C.includes(t)?y("availableTimes",C.filter((function(e){return e!==t}))):y("availableTimes",r.__spreadArray(r.__spreadArray([],r.__read(C),!1),[t],!1))}(e)},disabled:d}),a.createElement(l.Form.Check.Label,null,e))}))),a.createElement(l.Form.Control,r.__assign({type:"hidden"},T("availableTimes",{required:{value:!0,message:p("Validation:fieldMinNumber",{attribute:p("startTimes"),min:1})}}))),a.createElement("div",{className:"manual-form-error"},null===(m=k.availableTimes)||void 0===m?void 0:m.message))}));exports.AvailableTimesControl=c;
@@ -1,5 +1,4 @@
1
1
  import { WorkHour } from "@licklist/core/dist/DataMapper/Provider/WorkHourDataMapper";
2
2
  export declare const getTimeCheckboxRanges: (startTime: string, endTime: string, range?: number) => string[];
3
3
  export declare const getCheckboxesByWorkHours: (workHours?: WorkHour[]) => string[];
4
- export declare const calculateTimeWithOffset: (time: string) => string;
5
4
  //# sourceMappingURL=dates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/utils/dates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,4DAA4D,CAAC;AAKtF,eAAO,MAAM,qBAAqB,cACrB,MAAM,WACR,MAAM,6BA8ChB,CAAC;AAEF,eAAO,MAAM,wBAAwB,eAAgB,QAAQ,EAAE,aA0C9D,CAAC;AAGF,eAAO,MAAM,uBAAuB,SAAU,MAAM,KAAG,MAStD,CAAC"}
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../../src/zone/form/utils/dates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,4DAA4D,CAAC;AAKtF,eAAO,MAAM,qBAAqB,cACrB,MAAM,WACR,MAAM,6BA8ChB,CAAC;AAEF,eAAO,MAAM,wBAAwB,eAAgB,QAAQ,EAAE,aA0C9D,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),r=require("@licklist/core/dist/Services/Date"),t="00:00",a="23:59",n=function(t,a,n){void 0===n&&(n=5);for(var i=new Date,u=e.__read(t.split(r.TIME_SEPARATOR),2),o=u[0],s=u[1],_=e.__read(a.split(r.TIME_SEPARATOR),2),c=_[0],l=_[1],d=r.datetime(i.getFullYear(),i.getMonth()+1,i.getDate(),Number(o),Number(s)),f=r.datetime(i.getFullYear(),i.getMonth()+1,i.getDate(),Number(c),Number(l)),p={},g=0;f>=d;)d=new Date(d.getTime()+60*n*1e3),p[g]=d,g+=1;var v=Object.keys(p).map((function(t){var a=p[t];if(a<f){var n=e.__read(a.toISOString().split("T"),2)[1],i=e.__read(n.split(r.TIME_SEPARATOR),2);return[i[0],i[1]].join(r.TIME_SEPARATOR)}return null})).filter(Boolean);return v},i=function(e){var r=e+(new Date).getTimezoneOffset()/60;return r>24?r-24:r<0?r+24:r};exports.calculateTimeWithOffset=function(r){var t=e.__read(r.split(":"),2),a=t[0],n=t[1],u=i(+a).toString().padStart(2,"0");return"".concat(u,":").concat(n)},exports.getCheckboxesByWorkHours=function(r){if(!r||!r.length)return n(t,a);var i=r.reduce((function(r,t){var a=t.start,n=t.end;return a&&n?e.__spreadArray(e.__spreadArray([],e.__read(r),!1),[{start:a,end:n}],!1):r}),[]);if(7!==i.length)return n(t,a);var u=i.reduce((function(r,t){var a=t.start,n=t.end;return e.__spreadArray(e.__spreadArray([],e.__read(r),!1),[a,n],!1)}),[]).sort((function(e,r){return e.localeCompare(r)}));return n(u[0]||t,u[u.length-1]||a)},exports.getTimeCheckboxRanges=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),r=require("@licklist/core/dist/Services/Date"),t="00:00",a="23:59",n=function(t,a,n){void 0===n&&(n=5);for(var i=new Date,u=e.__read(t.split(r.TIME_SEPARATOR),2),o=u[0],s=u[1],_=e.__read(a.split(r.TIME_SEPARATOR),2),l=_[0],d=_[1],c=r.datetime(i.getFullYear(),i.getMonth()+1,i.getDate(),Number(o),Number(s)),g=r.datetime(i.getFullYear(),i.getMonth()+1,i.getDate(),Number(l),Number(d)),p={},f=0;g>=c;)c=new Date(c.getTime()+60*n*1e3),p[f]=c,f+=1;var v=Object.keys(p).map((function(t){var a=p[t];if(a<g){var n=e.__read(a.toISOString().split("T"),2)[1],i=e.__read(n.split(r.TIME_SEPARATOR),2);return[i[0],i[1]].join(r.TIME_SEPARATOR)}return null})).filter(Boolean);return v};exports.getCheckboxesByWorkHours=function(r){if(!r||!r.length)return n(t,a);var i=r.reduce((function(r,t){var a=t.start,n=t.end;return a&&n?e.__spreadArray(e.__spreadArray([],e.__read(r),!1),[{start:a,end:n}],!1):r}),[]);if(7!==i.length)return n(t,a);var u=i.reduce((function(r,t){var a=t.start,n=t.end;return e.__spreadArray(e.__spreadArray([],e.__read(r),!1),[a,n],!1)}),[]).sort((function(e,r){return e.localeCompare(r)}));return n(u[0]||t,u[u.length-1]||a)},exports.getTimeCheckboxRanges=n;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@licklist/design",
3
- "version": "0.44.485-dev.94",
3
+ "version": "0.44.485-dev.96",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@bitbucket.org/artelogicsoft/licklist_design.git"
@@ -1,2 +1 @@
1
1
  export * from "./BackButton";
2
-
@@ -32,7 +32,7 @@ export const CalendarDate = ({
32
32
  disabled={disabled}
33
33
  className={clsx(
34
34
  "calendar-date",
35
- selectedDate && +currentDate === +selectedDate && "selected-date",
35
+ selectedDate?.hasSame(currentDate, "day") && "selected-date",
36
36
  disabled && "disabled-date"
37
37
  )}
38
38
  onClick={onClick}
@@ -7,11 +7,19 @@ import { RecurringDatePickerInputValues } from "./RecurringDatePickerInput";
7
7
  interface RecurrenceIntervalAndFrequencyInputProps {
8
8
  disabled?: boolean;
9
9
  minDate?: string;
10
+ startDateLabel?: string;
11
+ startTimeLabel?: string;
12
+ endDateLabel?: string;
13
+ endTimeLabel?: string;
10
14
  }
11
15
 
12
16
  function RecurrenceIntervalAndFrequencyInput({
13
17
  disabled = false,
14
18
  minDate,
19
+ startDateLabel,
20
+ startTimeLabel,
21
+ endDateLabel,
22
+ endTimeLabel,
15
23
  }: RecurrenceIntervalAndFrequencyInputProps) {
16
24
  const { t } = useTranslation(["Design", "Notification", "App"]);
17
25
 
@@ -32,7 +40,7 @@ function RecurrenceIntervalAndFrequencyInput({
32
40
  <Row className="align-items-center">
33
41
  <Col xs={12} sm={6}>
34
42
  <Form.Group>
35
- <Form.Label>{t("Design:fromDate")}</Form.Label>
43
+ <Form.Label>{startDateLabel ?? t("Design:fromDate")}</Form.Label>
36
44
  <Form.Control
37
45
  type="date"
38
46
  {...register("startDate", { required: true })}
@@ -53,7 +61,7 @@ function RecurrenceIntervalAndFrequencyInput({
53
61
 
54
62
  <Col xs={12} sm={6}>
55
63
  <Form.Group>
56
- <Form.Label>{t("Design:toDate")}</Form.Label>
64
+ <Form.Label>{endDateLabel ?? t("Design:toDate")}</Form.Label>
57
65
  <Form.Control
58
66
  type="date"
59
67
  {...register("endDate", { required: true })}
@@ -76,16 +84,15 @@ function RecurrenceIntervalAndFrequencyInput({
76
84
  <Row className="align-items-center">
77
85
  <Col xs={12} sm={6}>
78
86
  <Form.Group>
79
- <Form.Label>{t("Design:availableFrom")}</Form.Label>
87
+ <Form.Label>
88
+ {startTimeLabel ?? t("Design:availableFrom")}
89
+ </Form.Label>
80
90
  <Form.Control
81
91
  type="time"
82
92
  {...register("startTime", { required: false })}
83
93
  placeholder="hh:mm"
84
94
  defaultValue={startTime}
85
95
  disabled={disabled}
86
- onChange={({ target: { value } }) => {
87
- setValue("startTime", `${value}:00`);
88
- }}
89
96
  isInvalid={Boolean(errors.startTime)}
90
97
  />
91
98
  </Form.Group>
@@ -93,16 +100,13 @@ function RecurrenceIntervalAndFrequencyInput({
93
100
 
94
101
  <Col xs={12} sm={6}>
95
102
  <Form.Group>
96
- <Form.Label>{t("Design:availableTo")}</Form.Label>
103
+ <Form.Label>{endTimeLabel ?? t("Design:availableTo")}</Form.Label>
97
104
  <Form.Control
98
105
  type="time"
99
106
  {...register("endTime", { required: false })}
100
107
  placeholder="hh:mm"
101
108
  defaultValue={endTime}
102
109
  disabled={disabled}
103
- onChange={({ target: { value } }) => {
104
- setValue("endTime", `${value}:59`);
105
- }}
106
110
  isInvalid={Boolean(errors.endTime)}
107
111
  />
108
112
  </Form.Group>
@@ -7,6 +7,37 @@
7
7
  overflow: auto;
8
8
  }
9
9
 
10
+ .reccurrence-interval-container {
11
+ .form-group {
12
+ margin-bottom: 0.5rem;
13
+ .form-control {
14
+ height: 1.5rem;
15
+ font-size: 0.625rem;
16
+ border: 2px solid #dcdcdc;
17
+ border-radius: 0.5rem;
18
+ }
19
+ }
20
+ }
21
+
22
+ .custom-checkbox .custom-control-label::before {
23
+ width: 1.5rem;
24
+ height: 1.5rem;
25
+ border-radius: 0.5rem;
26
+ border: 2px solid #0e8ce2;
27
+ margin-top: -0.3rem;
28
+ }
29
+ .custom-checkbox .custom-control-label::after {
30
+ width: 1.5rem;
31
+ height: 1.5rem;
32
+ top: 0;
33
+ }
34
+
35
+ .custom-control-label {
36
+ padding-left: 0.5rem;
37
+ font-weight: 400;
38
+ font-size: 0.875rem;
39
+ }
40
+
10
41
  label,
11
42
  header,
12
43
  button {
@@ -14,6 +45,10 @@
14
45
  font-size: 0.875rem;
15
46
  }
16
47
 
48
+ .title {
49
+ margin-left: 0.25rem;
50
+ }
51
+
17
52
  header {
18
53
  display: flex;
19
54
  justify-content: space-between;
@@ -46,6 +81,7 @@
46
81
  display: flex;
47
82
  align-items: center;
48
83
  gap: 1rem;
84
+ margin-bottom: 1rem;
49
85
 
50
86
  span {
51
87
  font-weight: 600;
@@ -58,6 +94,7 @@
58
94
  justify-content: space-between;
59
95
  align-items: center;
60
96
  gap: 0.25rem;
97
+ margin-bottom: 0.5rem;
61
98
  }
62
99
 
63
100
  .text-input.form-group {
@@ -90,7 +127,7 @@
90
127
  font-weight: 600;
91
128
  }
92
129
 
93
- .lane {
130
+ .resource {
94
131
  margin-bottom: 0.25rem;
95
132
  }
96
133
  }
@@ -9,10 +9,8 @@ import { Form } from "react-bootstrap";
9
9
  import { useForm } from "react-hook-form";
10
10
  import { useId } from "@react-aria/utils";
11
11
  import { WorkHour } from "@licklist/core/dist/DataMapper/Provider/WorkHourDataMapper";
12
- import {
13
- calculateTimeWithOffset,
14
- getCheckboxesByWorkHours,
15
- } from "../utils/dates";
12
+ import { calculateTimeWithOffset } from "@licklist/plugins/dist/utils/time";
13
+ import { getCheckboxesByWorkHours } from "../utils/dates";
16
14
 
17
15
  export type AvailableTimesControlRef = {
18
16
  trigger: () => Promise<boolean>;
@@ -97,27 +97,3 @@ export const getCheckboxesByWorkHours = (workHours?: WorkHour[]) => {
97
97
  DEFAULT_END_DAY_TIME
98
98
  );
99
99
  };
100
-
101
- // adds time zone offset to times selected by user
102
- export const calculateTimeWithOffset = (time: string): string => {
103
- // time has format "HH:mm"
104
- const [hours, minutes] = time.split(":");
105
-
106
- const hoursWithOffset = addOffsetToHours(+hours);
107
-
108
- const hoursWithPadding = hoursWithOffset.toString().padStart(2, "0");
109
-
110
- return `${hoursWithPadding}:${minutes}`;
111
- };
112
-
113
- const addOffsetToHours = (hours: number): number => {
114
- const timeZoneOffset = new Date().getTimezoneOffset() / 60;
115
-
116
- const hoursWithOffset = hours + timeZoneOffset;
117
-
118
- if (hoursWithOffset > 24) return hoursWithOffset - 24;
119
-
120
- if (hoursWithOffset < 0) return hoursWithOffset + 24;
121
-
122
- return hoursWithOffset;
123
- };
@@ -1,12 +0,0 @@
1
- /// <reference types="react" />
2
- import { Zone } from "@licklist/core/dist/DataMapper/Provider/ZoneDataMapper";
3
- export type ResourcesBlockingModalProps = {
4
- show: boolean;
5
- zones: Zone[];
6
- lanes: {
7
- zoneId: Zone["id"];
8
- lanes: string[];
9
- }[];
10
- };
11
- export declare const ResourcesBlockingModal: ({ show, zones, lanes, }: ResourcesBlockingModalProps) => JSX.Element;
12
- //# sourceMappingURL=ResourcesBlockingModal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResourcesBlockingModal.d.ts","sourceRoot":"","sources":["../../../src/provider/resources-blocking-modal/ResourcesBlockingModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,wDAAwD,CAAC;AAc9E,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,sBAAsB,4BAIhC,2BAA2B,gBAwE7B,CAAC"}
@@ -1,2 +0,0 @@
1
- export { ResourcesBlockingModal } from "./ResourcesBlockingModal";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/provider/resources-blocking-modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,51 +0,0 @@
1
- import { Meta, Story } from "@storybook/react";
2
- import React from "react";
3
- import {
4
- ResourcesBlockingModal,
5
- ResourcesBlockingModalProps,
6
- } from "./ResourcesBlockingModal";
7
-
8
- export default {
9
- title: "Provider/ResourcesBlockingModal",
10
- component: ResourcesBlockingModal,
11
- } as Meta;
12
-
13
- export const Default: Story<ResourcesBlockingModalProps> = (props) => {
14
- return <ResourcesBlockingModal {...props} />;
15
- };
16
-
17
- Default.args = {
18
- show: true,
19
- zones: [
20
- {
21
- id: 1,
22
- name: "Zone 1",
23
- providerId: 1,
24
- type: "standard",
25
- sort: null,
26
- description: "description",
27
- createdAt: "2021-09-01T12:00:00.000Z",
28
- updatedAt: null,
29
- deletedAt: null,
30
- zoneRecurrences: null,
31
- image: null,
32
- },
33
- {
34
- id: 2,
35
- name: "Zone 2",
36
- providerId: 1,
37
- type: "standard",
38
- sort: null,
39
- description: "description",
40
- createdAt: "2021-09-01T12:00:00.000Z",
41
- updatedAt: null,
42
- deletedAt: null,
43
- zoneRecurrences: null,
44
- image: null,
45
- },
46
- ],
47
- lanes: [
48
- { zoneId: 1, lanes: ["Lane 1", "Lane 2", "Lane 3", "Lane 4"] },
49
- { zoneId: 2, lanes: ["Lane 5", "Lane 6", "Lane 7", "Lane 8"] },
50
- ],
51
- };
@@ -1,134 +0,0 @@
1
- import { Button, Form, Modal } from "react-bootstrap";
2
- import React from "react";
3
- import { useId } from "@react-aria/utils";
4
- import { useTranslation } from "react-i18next";
5
- import { Zone } from "@licklist/core/dist/DataMapper/Provider/ZoneDataMapper";
6
- import Image from "../../static/Image";
7
- import src from "../../assets/dashboard/blockingClock.png";
8
-
9
- const WEEKDAYS = [
10
- "mondayShort",
11
- "tuesdayShort",
12
- "wednesdayShort",
13
- "thursdayShort",
14
- "fridayShort",
15
- "saturdayShort",
16
- "sundayShort",
17
- ];
18
-
19
- export type ResourcesBlockingModalProps = {
20
- show: boolean;
21
- zones: Zone[];
22
- lanes: { zoneId: Zone["id"]; lanes: string[] }[];
23
- };
24
-
25
- export const ResourcesBlockingModal = ({
26
- show,
27
- zones,
28
- lanes,
29
- }: ResourcesBlockingModalProps) => {
30
- const { t } = useTranslation("Design");
31
- const allId = useId();
32
- const resourcesId = useId();
33
-
34
- return (
35
- <Modal centered show={show} className="resources-blocking-modal">
36
- <header>
37
- <span>{t("resourcesBlocking")}</span>
38
- <Image src={src} />
39
- </header>
40
-
41
- <Modal.Body>
42
- <div className="checkbox-with-description">
43
- <span>{t("dayOfTheWeek")}</span>
44
- <Form.Group className="custom-checkbox">
45
- <Form.Check custom type="checkbox" id={allId}>
46
- <Form.Check.Input type="checkbox" />
47
- <Form.Check.Label>{t("all")}</Form.Check.Label>
48
- </Form.Check>
49
- </Form.Group>
50
- </div>
51
-
52
- <Form.Group className="custom-checkbox days-list">
53
- {WEEKDAYS.map((weekday) => (
54
- <Checkbox key={weekday} label={t(weekday)} />
55
- ))}
56
- </Form.Group>
57
-
58
- <div className="date-time-inputs">
59
- <Input label={t("from")} placeholder="DD.MM.YYYY" />
60
- <Input label={t("until")} placeholder="DD.MM.YYYY" />
61
-
62
- <Input label={t("startTime")} placeholder="00:00" />
63
- <Input label={t("endTime")} placeholder="00:00" />
64
- </div>
65
-
66
- <Form.Group className="text-input">
67
- <Form.Label>{t("textLabel")}</Form.Label>
68
- <Form.Control />
69
- </Form.Group>
70
-
71
- <div className="checkbox-with-description">
72
- <span>{t("resources")}</span>
73
- <Form.Group className="custom-checkbox">
74
- <Form.Check custom type="checkbox" id={resourcesId}>
75
- <Form.Check.Input type="checkbox" />
76
- <Form.Check.Label>{t("all")}</Form.Check.Label>
77
- </Form.Check>
78
- </Form.Group>
79
- </div>
80
-
81
- {zones.map((zone) => (
82
- <Form.Group key={zone.id} className="zone-wrapper custom-checkbox">
83
- <div className="zone-name">{zone.name}</div>
84
-
85
- {lanes
86
- .find((lane) => lane.zoneId === zone.id)
87
- .lanes.map((lane) => (
88
- <Checkbox key={lane} label={lane} className="lane" />
89
- ))}
90
- </Form.Group>
91
- ))}
92
-
93
- <footer>
94
- <Button>Save</Button>
95
- <Button variant="secondary">Close</Button>
96
- <Button variant="danger">Delete</Button>
97
- </footer>
98
- </Modal.Body>
99
- </Modal>
100
- );
101
- };
102
-
103
- const Checkbox = ({
104
- label,
105
- className = "",
106
- }: {
107
- label: string;
108
- className?: string;
109
- }) => {
110
- const id = useId();
111
-
112
- return (
113
- <Form.Check custom type="checkbox" className={className} id={id}>
114
- <Form.Check.Input type="checkbox" />
115
- <Form.Check.Label>{label}</Form.Check.Label>
116
- </Form.Check>
117
- );
118
- };
119
-
120
- const Input = ({
121
- label,
122
- placeholder,
123
- }: {
124
- label: string;
125
- placeholder: string;
126
- }) => {
127
- return (
128
- <Form.Group className="text-input">
129
- <Form.Label>{label}</Form.Label>
130
-
131
- <Form.Control placeholder={placeholder} />
132
- </Form.Group>
133
- );
134
- };
@@ -1 +0,0 @@
1
- export { ResourcesBlockingModal } from "./ResourcesBlockingModal";