@corva/ui 3.76.0-10 → 3.76.0-12
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/cjs-bundle/componentsV2/DatePicker/TimePicker/TimePicker.js +1 -1
- package/cjs-bundle/componentsV2/DatePicker/TimePicker/TimePicker.js.map +1 -1
- package/cjs-bundle/componentsV2/DatePicker/utils.js +1 -1
- package/cjs-bundle/componentsV2/DatePicker/utils.js.map +1 -1
- package/cjs-bundle/componentsV2/Modal/Modal.js +1 -1
- package/cjs-bundle/componentsV2/Modal/Modal.js.map +1 -1
- package/componentsV2/DatePicker/TimePicker/TimePicker.js +1 -1
- package/componentsV2/DatePicker/TimePicker/TimePicker.js.map +1 -1
- package/componentsV2/DatePicker/utils.js +1 -1
- package/componentsV2/DatePicker/utils.js.map +1 -1
- package/componentsV2/Modal/Modal.d.ts.map +1 -1
- package/componentsV2/Modal/Modal.js +1 -1
- package/componentsV2/Modal/Modal.js.map +1 -1
- package/mcp-server/server.mjs +5 -5
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var s=require("@babel/runtime/helpers/defineProperty"),e=require("@babel/runtime/helpers/slicedToArray"),o=require("react"),n=require("classnames"),c=require("moment-timezone"),r=require("lodash"),i=require("../../TextInputNext/TextInputNext.js"),t=require("../../Text/Text.js"),u=require("../../ToggleButtons/ToggleButtons.js"),a=require("../utils.js"),l=require("../../Button/Button.js"),m=require("./TimePicker.scss.js"),d=require("../../../icons/iconParkIcons.js");require("../../../icons/customIcons/icons/AddMessage.js"),require("../../../icons/customIcons/icons/DragOne.js"),require("../../../icons/customIcons/icons/Attention.js"),require("../../../icons/customIcons/icons/Collapse.js"),require("../../../icons/customIcons/icons/Dashboard.js"),require("../../../icons/customIcons/icons/Expand.js"),require("../../../icons/customIcons/icons/FolderClosed.js"),require("../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../icons/customIcons/icons/FolderOpened.js"),require("../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../icons/customIcons/icons/Search.js"),require("../../../icons/customIcons/icons/SearchOne.js"),require("../../../icons/customIcons/icons/Wellhub.js"),require("../../../icons/customIcons/icons/MultiRuler.js"),require("../../../icons/customIcons/icons/Checkbox.js"),require("../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../icons/customIcons/icons/Radio.js"),require("../../../icons/customIcons/icons/RadioChecked.js"),require("../../../icons/customIcons/icons/SimulFrac.js"),require("../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../icons/customIcons/icons/CautionFilled.js"),require("../../../icons/customIcons/icons/InfoRounded.js"),require("../../../icons/customIcons/icons/FlameFilled.js"),require("../../../icons/customIcons/icons/MoreApp.js"),require("../../../icons/customIcons/icons/Pad.js"),require("../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../icons/customIcons/icons/FracFleet.js"),require("../../../icons/customIcons/icons/Global.js"),require("../../../icons/customIcons/icons/Program.js"),require("../../../icons/customIcons/icons/Rig.js"),require("../../../icons/customIcons/icons/Well.js"),require("../../../icons/customIcons/icons/Gap.js"),require("../../../icons/customIcons/icons/Pin.js"),require("../../../icons/customIcons/icons/PinOne.js"),require("../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../icons/customIcons/icons/Archive.js"),require("../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../icons/customIcons/icons/Unarchive.js"),require("../../../icons/customIcons/icons/Archived.js"),require("../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../icons/customIcons/icons/CloudDelete.js"),require("../../../icons/customIcons/icons/Lasso.js"),require("../../../icons/customIcons/icons/Radius.js"),require("../../../icons/customIcons/icons/ErrorOps.js"),require("../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../icons/customIcons/icons/CriticalOps.js"),require("../../../icons/customIcons/icons/Company.js"),require("../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../icons/customIcons/icons/Connect.js"),require("../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../icons/customIcons/icons/Feed.js"),require("../../../icons/customIcons/icons/Prompt.js"),require("../../../icons/customIcons/icons/Companies.js"),require("../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../icons/customIcons/icons/Key.js"),require("../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../icons/customIcons/icons/MappingManual.js"),require("../../../icons/customIcons/icons/Mapping.js"),require("../../../icons/customIcons/icons/Metrics.js"),require("../../../icons/customIcons/icons/Drops.js"),require("../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../icons/customIcons/icons/Template.js"),require("../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../icons/customIcons/icons/UnitConversion.js"),require("../../../icons/customIcons/icons/NPT.js"),require("../../../icons/customIcons/icons/GuidedFrac.js");var j=require("react/jsx-runtime");function q(s){return s&&"object"==typeof s&&"default"in s?s:{default:s}}var I=q(s),p=q(e),f=q(n),h=q(c);function v(s,e){var o=Object.keys(s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(s);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable}))),o.push.apply(o,n)}return o}function b(s){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?v(Object(o),!0).forEach((function(e){I.default(s,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(o)):v(Object(o)).forEach((function(e){Object.defineProperty(s,e,Object.getOwnPropertyDescriptor(o,e))}))}return s}var g=[{value:"am",label:"AM"},{value:"pm",label:"PM"}],C=function(s){return s.replace(/[^\d]/g,"").substring(0,2)},x=function(s){return Number(s)>=0&&Number(s)<=12},O=function(s){return Number(s)>=0&&Number(s)<60},y=O,T=function(s){return s.getTime()-h.default(s).startOf("day").toDate().getTime()},N=function(s){return void 0!==s?r.padStart(String(s),2,"0"):""},P=function(s){return"12"===s?"00":s};exports.TimePicker=function(s){var e=s.value,n=s.onChange,c=s.minDate,r=s.maxDate,q=s.saveTime,I=s.goToToday,v=s.clear,D=!e,F=o.useRef(null),k=o.useRef(null),S=o.useRef(null),M=o.useRef(),A=o.useMemo((function(){var s=e?T(e)>=432e5?"pm":"am":void 0,o="pm"===s?12:0,n=e?e.getHours()-o:void 0;return{hours:N(void 0!==n&&
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var s=require("@babel/runtime/helpers/defineProperty"),e=require("@babel/runtime/helpers/slicedToArray"),o=require("react"),n=require("classnames"),c=require("moment-timezone"),r=require("lodash"),i=require("../../TextInputNext/TextInputNext.js"),t=require("../../Text/Text.js"),u=require("../../ToggleButtons/ToggleButtons.js"),a=require("../utils.js"),l=require("../../Button/Button.js"),m=require("./TimePicker.scss.js"),d=require("../../../icons/iconParkIcons.js");require("../../../icons/customIcons/icons/AddMessage.js"),require("../../../icons/customIcons/icons/DragOne.js"),require("../../../icons/customIcons/icons/Attention.js"),require("../../../icons/customIcons/icons/Collapse.js"),require("../../../icons/customIcons/icons/Dashboard.js"),require("../../../icons/customIcons/icons/Expand.js"),require("../../../icons/customIcons/icons/FolderClosed.js"),require("../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../icons/customIcons/icons/FolderOpened.js"),require("../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../icons/customIcons/icons/Search.js"),require("../../../icons/customIcons/icons/SearchOne.js"),require("../../../icons/customIcons/icons/Wellhub.js"),require("../../../icons/customIcons/icons/MultiRuler.js"),require("../../../icons/customIcons/icons/Checkbox.js"),require("../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../icons/customIcons/icons/Radio.js"),require("../../../icons/customIcons/icons/RadioChecked.js"),require("../../../icons/customIcons/icons/SimulFrac.js"),require("../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../icons/customIcons/icons/CautionFilled.js"),require("../../../icons/customIcons/icons/InfoRounded.js"),require("../../../icons/customIcons/icons/FlameFilled.js"),require("../../../icons/customIcons/icons/MoreApp.js"),require("../../../icons/customIcons/icons/Pad.js"),require("../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../icons/customIcons/icons/FracFleet.js"),require("../../../icons/customIcons/icons/Global.js"),require("../../../icons/customIcons/icons/Program.js"),require("../../../icons/customIcons/icons/Rig.js"),require("../../../icons/customIcons/icons/Well.js"),require("../../../icons/customIcons/icons/Gap.js"),require("../../../icons/customIcons/icons/Pin.js"),require("../../../icons/customIcons/icons/PinOne.js"),require("../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../icons/customIcons/icons/Archive.js"),require("../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../icons/customIcons/icons/Unarchive.js"),require("../../../icons/customIcons/icons/Archived.js"),require("../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../icons/customIcons/icons/CloudDelete.js"),require("../../../icons/customIcons/icons/Lasso.js"),require("../../../icons/customIcons/icons/Radius.js"),require("../../../icons/customIcons/icons/ErrorOps.js"),require("../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../icons/customIcons/icons/CriticalOps.js"),require("../../../icons/customIcons/icons/Company.js"),require("../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../icons/customIcons/icons/Connect.js"),require("../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../icons/customIcons/icons/Feed.js"),require("../../../icons/customIcons/icons/Prompt.js"),require("../../../icons/customIcons/icons/Companies.js"),require("../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../icons/customIcons/icons/Key.js"),require("../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../icons/customIcons/icons/MappingManual.js"),require("../../../icons/customIcons/icons/Mapping.js"),require("../../../icons/customIcons/icons/Metrics.js"),require("../../../icons/customIcons/icons/Drops.js"),require("../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../icons/customIcons/icons/Template.js"),require("../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../icons/customIcons/icons/UnitConversion.js"),require("../../../icons/customIcons/icons/NPT.js"),require("../../../icons/customIcons/icons/GuidedFrac.js");var j=require("react/jsx-runtime");function q(s){return s&&"object"==typeof s&&"default"in s?s:{default:s}}var I=q(s),p=q(e),f=q(n),h=q(c);function v(s,e){var o=Object.keys(s);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(s);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable}))),o.push.apply(o,n)}return o}function b(s){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?v(Object(o),!0).forEach((function(e){I.default(s,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(o)):v(Object(o)).forEach((function(e){Object.defineProperty(s,e,Object.getOwnPropertyDescriptor(o,e))}))}return s}var g=[{value:"am",label:"AM"},{value:"pm",label:"PM"}],C=function(s){return s.replace(/[^\d]/g,"").substring(0,2)},x=function(s){return Number(s)>=0&&Number(s)<=12},O=function(s){return Number(s)>=0&&Number(s)<60},y=O,T=function(s){return s.getTime()-h.default(s).startOf("day").toDate().getTime()},N=function(s){return void 0!==s?r.padStart(String(s),2,"0"):""},P=function(s){return"12"===s?"00":s};exports.TimePicker=function(s){var e=s.value,n=s.onChange,c=s.minDate,r=s.maxDate,q=s.saveTime,I=s.goToToday,v=s.clear,D=!e,F=o.useRef(null),k=o.useRef(null),S=o.useRef(null),M=o.useRef(),A=o.useMemo((function(){var s=e?T(e)>=432e5?"pm":"am":void 0,o="pm"===s?12:0,n=e?e.getHours()-o:void 0;return{hours:N(void 0!==n&&12===n?0:n),minutes:N(null==e?void 0:e.getMinutes()),seconds:N(null==e?void 0:e.getSeconds()),partOfDay:s}}),[e]),B=o.useState(A.hours),R=p.default(B,2),z=R[0],w=R[1],E=o.useState(A.minutes),H=p.default(E,2),G=H[0],U=H[1],L=o.useState(A.seconds),W=p.default(L,2),_=W[0],K=W[1];o.useEffect((function(){M.current!==F.current&&w(A.hours),M.current!==k.current&&U(A.minutes),M.current!==S.current&&K(A.seconds)}),[A.hours,A.minutes,A.seconds]);var Z=o.useMemo((function(){var s=a.isSameDay(c,e)&&h.default(c).format("hh:mm:ss A"),o=a.isSameDay(r,e)&&h.default(r).format("hh:mm:ss A");return s&&o?"In ".concat(s," - ").concat(o," range"):s?"Can’t be earlier than ".concat(s):o?"Can’t be later than ".concat(o):void 0}),[r,c,e]),J=o.useMemo((function(){return g.map((function(s){var o="am"===s.value&&!!c&&a.isSameDay(e,c)&&T(c)>=432e5,n="pm"===s.value&&!!r&&a.isSameDay(e,r)&&T(r)<432e5;return b(b({},s),{},{disabled:D||o||n})}))}),[D,r,c,e]),Q=o.useCallback((function(s,o){if(e){var c=new Date(e);if("hours"===s&&x(o)){var r="pm"===A.partOfDay?12:0;c.setHours(r+Number(o))}else if("minutes"===s&&O(o))c.setMinutes(Number(o));else if("seconds"===s&&y(o))c.setSeconds(Number(o));else if("partOfDay"===s&&("am"===o||"pm"===o)){var i=c.getHours()%12;c.setHours(("pm"===o?12:0)+i)}Math.floor(c.getTime()/1e3)!==Math.floor(e.getTime()/1e3)&&n(c)}}),[A.partOfDay,n,e]),V=o.useCallback((function(s){s.target.select(),M.current=s.target}),[]),X=o.useCallback((function(s){var e=C(s.target.value);if(s.target===F.current){var o=P(e),n=x(o)?N(o):A.hours;w(n),Q("hours",n)}if(s.target===k.current){var c=O(e)?N(e):A.minutes;U(c),Q("minutes",c)}if(s.target===S.current){var r=y(e)?N(e):A.seconds;K(r),Q("seconds",r)}M.current=void 0}),[A.hours,A.minutes,A.seconds,Q]),Y=o.useCallback((function(s){var e,o=C(s),n=P(o);(w(o),2===o.length&&x(o))&&(Q("hours",n),null===(e=k.current)||void 0===e||e.focus())}),[Q]),$=o.useCallback((function(s){var e,o=C(s);(U(o),2===o.length&&O(o))&&(Q("minutes",o),null===(e=S.current)||void 0===e||e.focus())}),[Q]),ss=o.useCallback((function(s){var e=C(s);K(e),y(e)&&Q("seconds",e)}),[Q]),es=o.useCallback((function(s){Q("partOfDay",s)}),[Q]),os=Number(null==e?void 0:e.getTime())>Number(null==r?void 0:r.getTime())||Number(null==e?void 0:e.getTime())<Number(null==c?void 0:c.getTime()),ns=!x(z)||os,cs=!O(G)||os,rs=!y(_)||os;return j.jsxs(j.Fragment,{children:[j.jsxs("div",{className:f.default(m.timePicker),children:[j.jsxs(t.Text,{className:m.header,size:14,children:[j.jsx("span",{className:f.default(m.headerText,D&&m.disabled),children:"Time"}),Z&&j.jsxs(j.Fragment,{children:[j.jsx(d.InfoIcon,{className:m.constraintIcon,size:16}),Z]})]}),j.jsx(i.TextInputNext,{placeholder:"HH",className:m.input,disabled:D,value:z,onChange:Y,status:ns?"error":void 0,inputRef:F,onFocus:V,onBlur:X}),j.jsx(t.Text,{color:"T9",size:14,children:":"}),j.jsx(i.TextInputNext,{placeholder:"MM",className:m.input,disabled:D,value:G,onChange:$,status:cs?"error":void 0,inputRef:k,onFocus:V,onBlur:X}),j.jsx(t.Text,{color:"T9",size:14,children:":"}),j.jsx(i.TextInputNext,{placeholder:"SS",className:m.input,disabled:D,value:_,onChange:ss,status:rs?"error":void 0,inputRef:S,onFocus:V,onBlur:X}),j.jsx(u.ToggleButtons,{options:J,className:m.tabs,size:"small",value:A.partOfDay,onChange:es})]}),j.jsxs("div",{className:m.footer,children:[I&&j.jsx(l.Button,{onClick:I,type:"tertiary",size:"small",children:"Today"}),j.jsxs("div",{className:m.actions,children:[v&&j.jsx(l.Button,{onClick:v,type:"tertiary",size:"small",disabled:!e,children:"Clear"}),j.jsx(l.Button,{onClick:q,type:"secondary",size:"small",disabled:!e||ns||cs||rs,children:"Save"})]})]})]})};
|
|
2
2
|
//# sourceMappingURL=TimePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimePicker.js","sources":["../../../../../src/componentsV2/DatePicker/TimePicker/TimePicker.tsx"],"sourcesContent":["import { FocusEventHandler, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport { padStart } from 'lodash';\n\nimport { TextInputNext } from '../../TextInputNext';\nimport { Text } from '../../Text';\nimport { ToggleButtons } from '../../ToggleButtons';\nimport { isSameDay } from '../utils';\nimport { Button } from '../../Button';\n\nimport styles from './TimePicker.scss';\n\nimport { InfoIcon } from '~/icons';\n\ntype AmPm = 'am' | 'pm';\n\nconst HalfOfDayMs = 12 * 60 * 60 * 1000;\n\nconst ToggleButtonsOptions: { value: AmPm; label: string }[] = [\n { value: 'am', label: 'AM' },\n { value: 'pm', label: 'PM' },\n];\n\nexport type TimePickerProps = {\n value?: Date;\n onChange: (date: Date) => void;\n saveTime: () => void;\n maxDate?: Date;\n minDate?: Date;\n\n goToToday?: () => void;\n clear?: () => void;\n};\n\nconst sanitize = (value: string) => value.replace(/[^\\d]/g, '').substring(0, 2);\nconst validateHours = (value?: string) => Number(value) >= 0 && Number(value) <= 12;\nconst validateMinutes = (value?: string) => Number(value) >= 0 && Number(value) < 60;\nconst validateSeconds = validateMinutes;\n\nconst getOffsetFromDayStart = (date: Date) => {\n return date.getTime() - moment(date).startOf('day').toDate().getTime();\n};\n\nconst formatTimePart = (part?: string | number) =>\n part !== undefined ? padStart(String(part), 2, '0') : '';\n\nconst getPartOfDay = (date: Date) => {\n return getOffsetFromDayStart(date) >= HalfOfDayMs ? 'pm' : 'am';\n};\n\nconst getActualHours = (sanitized: string) => (sanitized === '12' ? '00' : sanitized);\n\nexport const TimePicker = ({\n value,\n onChange,\n minDate,\n maxDate,\n saveTime,\n goToToday,\n clear,\n}: TimePickerProps) => {\n const disabled = !value;\n\n const hoursInputRef = useRef<HTMLInputElement>(null);\n const minutesInputRef = useRef<HTMLInputElement>(null);\n const secondsInputRef = useRef<HTMLInputElement>(null);\n\n const focusedInputRef = useRef<HTMLInputElement>();\n\n const timeParts = useMemo(() => {\n const partOfDay = value ? getPartOfDay(value) : undefined;\n\n const hourOffset = partOfDay === 'pm' ? 12 : 0;\n\n const hours = value ? value.getHours() - hourOffset : undefined;\n\n const hoursAmPm = hours !== undefined && hours === 0 ? 12 : hours;\n\n return {\n hours: formatTimePart(hoursAmPm),\n minutes: formatTimePart(value?.getMinutes()),\n seconds: formatTimePart(value?.getSeconds()),\n partOfDay,\n };\n }, [value]);\n\n const [hours, setHours] = useState(timeParts.hours);\n const [minutes, setMinutes] = useState(timeParts.minutes);\n const [seconds, setSeconds] = useState(timeParts.seconds);\n\n useEffect(() => {\n if (focusedInputRef.current !== hoursInputRef.current) {\n setHours(timeParts.hours);\n }\n if (focusedInputRef.current !== minutesInputRef.current) {\n setMinutes(timeParts.minutes);\n }\n if (focusedInputRef.current !== secondsInputRef.current) {\n setSeconds(timeParts.seconds);\n }\n }, [timeParts.hours, timeParts.minutes, timeParts.seconds]);\n\n const constraintText = useMemo(() => {\n const minValue = isSameDay(minDate, value) && moment(minDate).format('hh:mm:ss A');\n const maxValue = isSameDay(maxDate, value) && moment(maxDate).format('hh:mm:ss A');\n\n if (minValue && maxValue) {\n return `In ${minValue} - ${maxValue} range`;\n } else if (minValue) {\n return `Can’t be earlier than ${minValue}`;\n } else if (maxValue) {\n return `Can’t be later than ${maxValue}`;\n }\n return undefined;\n }, [maxDate, minDate, value]);\n\n const amPmOptions = useMemo(\n () =>\n ToggleButtonsOptions.map(item => {\n const isAmDisabled =\n item.value === 'am' &&\n !!minDate &&\n isSameDay(value, minDate) &&\n getOffsetFromDayStart(minDate) >= HalfOfDayMs;\n\n const isPmDisabled =\n item.value === 'pm' &&\n !!maxDate &&\n isSameDay(value, maxDate) &&\n getOffsetFromDayStart(maxDate) < HalfOfDayMs;\n\n return { ...item, disabled: disabled || isAmDisabled || isPmDisabled };\n }),\n [disabled, maxDate, minDate, value]\n );\n\n const updateValue = useCallback(\n (type: 'hours' | 'minutes' | 'seconds' | 'partOfDay', newValue: string) => {\n if (!value) {\n return;\n }\n\n const newDate = new Date(value);\n\n if (type === 'hours' && validateHours(newValue)) {\n const partOfDayOffset = timeParts.partOfDay === 'pm' ? 12 : 0;\n newDate.setHours(partOfDayOffset + Number(newValue));\n } else if (type === 'minutes' && validateMinutes(newValue)) {\n newDate.setMinutes(Number(newValue));\n } else if (type === 'seconds' && validateSeconds(newValue)) {\n newDate.setSeconds(Number(newValue));\n } else if (type === 'partOfDay' && (newValue === 'am' || newValue === 'pm')) {\n const hoursOffset = newDate.getHours() % 12;\n newDate.setHours((newValue === 'pm' ? 12 : 0) + hoursOffset);\n }\n\n if (Math.floor(newDate.getTime() / 1000) !== Math.floor(value.getTime() / 1000)) {\n onChange(newDate);\n }\n },\n [timeParts.partOfDay, onChange, value]\n );\n\n const onFieldFocus = useCallback<FocusEventHandler<HTMLInputElement>>(e => {\n e.target.select();\n focusedInputRef.current = e.target;\n }, []);\n\n const onFieldBlur = useCallback<FocusEventHandler<HTMLInputElement>>(\n e => {\n const fieldValue = sanitize(e.target.value);\n\n if (e.target === hoursInputRef.current) {\n const actualHours = getActualHours(fieldValue);\n const newHours = validateHours(actualHours) ? formatTimePart(actualHours) : timeParts.hours;\n setHours(newHours);\n updateValue('hours', newHours);\n }\n if (e.target === minutesInputRef.current) {\n const newMinutes = validateMinutes(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.minutes;\n setMinutes(newMinutes);\n updateValue('minutes', newMinutes);\n }\n if (e.target === secondsInputRef.current) {\n const newSeconds = validateSeconds(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.seconds;\n setSeconds(newSeconds);\n updateValue('seconds', newSeconds);\n }\n\n focusedInputRef.current = undefined;\n },\n [timeParts.hours, timeParts.minutes, timeParts.seconds, updateValue]\n );\n\n const onChangeHours = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n const actualHours = getActualHours(sanitized);\n setHours(sanitized);\n if (sanitized.length === 2 && validateHours(sanitized)) {\n updateValue('hours', actualHours);\n minutesInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeMinutes = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setMinutes(sanitized);\n if (sanitized.length === 2 && validateMinutes(sanitized)) {\n updateValue('minutes', sanitized);\n secondsInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeSeconds = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setSeconds(sanitized);\n if (validateSeconds(sanitized)) {\n updateValue('seconds', sanitized);\n }\n },\n [updateValue]\n );\n\n const setPartOfDay = useCallback(\n (newValue: string) => {\n updateValue('partOfDay', newValue);\n },\n [updateValue]\n );\n\n const outOfBounds =\n Number(value?.getTime()) > Number(maxDate?.getTime()) ||\n Number(value?.getTime()) < Number(minDate?.getTime());\n\n const hoursInvalid = !validateHours(hours) || outOfBounds;\n const minutesInvalid = !validateMinutes(minutes) || outOfBounds;\n const secondsInvalid = !validateSeconds(seconds) || outOfBounds;\n\n return (\n <>\n <div className={classNames(styles.timePicker)}>\n <Text className={styles.header} size={14}>\n <span className={classNames(styles.headerText, disabled && styles.disabled)}>Time</span>\n {constraintText && (\n <>\n <InfoIcon className={styles.constraintIcon} size={16} />\n {constraintText}\n </>\n )}\n </Text>\n\n <TextInputNext\n placeholder=\"HH\"\n className={styles.input}\n disabled={disabled}\n value={hours}\n onChange={onChangeHours}\n status={hoursInvalid ? 'error' : undefined}\n inputRef={hoursInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"MM\"\n className={styles.input}\n disabled={disabled}\n value={minutes}\n onChange={onChangeMinutes}\n status={minutesInvalid ? 'error' : undefined}\n inputRef={minutesInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"SS\"\n className={styles.input}\n disabled={disabled}\n value={seconds}\n onChange={onChangeSeconds}\n status={secondsInvalid ? 'error' : undefined}\n inputRef={secondsInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <ToggleButtons\n options={amPmOptions}\n className={styles.tabs}\n size=\"small\"\n value={timeParts.partOfDay}\n onChange={setPartOfDay}\n />\n </div>\n <div className={styles.footer}>\n {goToToday && (\n <Button onClick={goToToday} type=\"tertiary\" size=\"small\">\n Today\n </Button>\n )}\n\n <div className={styles.actions}>\n {clear && (\n <Button onClick={clear} type=\"tertiary\" size=\"small\" disabled={!value}>\n Clear\n </Button>\n )}\n\n <Button\n onClick={saveTime}\n type=\"secondary\"\n size=\"small\"\n disabled={!value || hoursInvalid || minutesInvalid || secondsInvalid}\n >\n Save\n </Button>\n </div>\n </div>\n </>\n );\n};\n"],"names":["ToggleButtonsOptions","value","label","sanitize","replace","substring","validateHours","Number","validateMinutes","validateSeconds","getOffsetFromDayStart","date","getTime","moment","startOf","toDate","formatTimePart","part","undefined","padStart","String","getActualHours","sanitized","_ref","onChange","minDate","maxDate","saveTime","goToToday","clear","disabled","hoursInputRef","useRef","minutesInputRef","secondsInputRef","focusedInputRef","timeParts","useMemo","partOfDay","hourOffset","hours","getHours","minutes","getMinutes","seconds","getSeconds","_useState","useState","_useState2","_slicedToArray","setHours","_useState3","_useState4","setMinutes","_useState5","_useState6","setSeconds","useEffect","current","constraintText","minValue","isSameDay","format","maxValue","concat","amPmOptions","map","item","isAmDisabled","isPmDisabled","_objectSpread","updateValue","useCallback","type","newValue","newDate","Date","partOfDayOffset","hoursOffset","Math","floor","onFieldFocus","e","target","select","onFieldBlur","fieldValue","actualHours","newHours","newMinutes","newSeconds","onChangeHours","_minutesInputRef$curr","length","focus","onChangeMinutes","_secondsInputRef$curr","onChangeSeconds","setPartOfDay","outOfBounds","hoursInvalid","minutesInvalid","secondsInvalid","_jsxs","_Fragment","children","jsxs","className","classNames","styles","timePicker","Text","header","size","_jsx","jsx","headerText","InfoIcon","constraintIcon","TextInputNext","placeholder","input","status","inputRef","onFocus","onBlur","color","ToggleButtons","options","tabs","footer","Button","onClick","actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TimePicker.js","sources":["../../../../../src/componentsV2/DatePicker/TimePicker/TimePicker.tsx"],"sourcesContent":["import { FocusEventHandler, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport { padStart } from 'lodash';\n\nimport { TextInputNext } from '../../TextInputNext';\nimport { Text } from '../../Text';\nimport { ToggleButtons } from '../../ToggleButtons';\nimport { isSameDay } from '../utils';\nimport { Button } from '../../Button';\n\nimport styles from './TimePicker.scss';\n\nimport { InfoIcon } from '~/icons';\n\ntype AmPm = 'am' | 'pm';\n\nconst HalfOfDayMs = 12 * 60 * 60 * 1000;\n\nconst ToggleButtonsOptions: { value: AmPm; label: string }[] = [\n { value: 'am', label: 'AM' },\n { value: 'pm', label: 'PM' },\n];\n\nexport type TimePickerProps = {\n value?: Date;\n onChange: (date: Date) => void;\n saveTime: () => void;\n maxDate?: Date;\n minDate?: Date;\n\n goToToday?: () => void;\n clear?: () => void;\n};\n\nconst sanitize = (value: string) => value.replace(/[^\\d]/g, '').substring(0, 2);\nconst validateHours = (value?: string) => Number(value) >= 0 && Number(value) <= 12;\nconst validateMinutes = (value?: string) => Number(value) >= 0 && Number(value) < 60;\nconst validateSeconds = validateMinutes;\n\nconst getOffsetFromDayStart = (date: Date) => {\n return date.getTime() - moment(date).startOf('day').toDate().getTime();\n};\n\nconst formatTimePart = (part?: string | number) =>\n part !== undefined ? padStart(String(part), 2, '0') : '';\n\nconst getPartOfDay = (date: Date) => {\n return getOffsetFromDayStart(date) >= HalfOfDayMs ? 'pm' : 'am';\n};\n\nconst getActualHours = (sanitized: string) => (sanitized === '12' ? '00' : sanitized);\n\nexport const TimePicker = ({\n value,\n onChange,\n minDate,\n maxDate,\n saveTime,\n goToToday,\n clear,\n}: TimePickerProps) => {\n const disabled = !value;\n\n const hoursInputRef = useRef<HTMLInputElement>(null);\n const minutesInputRef = useRef<HTMLInputElement>(null);\n const secondsInputRef = useRef<HTMLInputElement>(null);\n\n const focusedInputRef = useRef<HTMLInputElement>();\n\n const timeParts = useMemo(() => {\n const partOfDay = value ? getPartOfDay(value) : undefined;\n\n const hourOffset = partOfDay === 'pm' ? 12 : 0;\n\n const hours = value ? value.getHours() - hourOffset : undefined;\n\n const hoursAmPm = hours !== undefined && hours === 12 ? 0 : hours;\n\n return {\n hours: formatTimePart(hoursAmPm),\n minutes: formatTimePart(value?.getMinutes()),\n seconds: formatTimePart(value?.getSeconds()),\n partOfDay,\n };\n }, [value]);\n\n const [hours, setHours] = useState(timeParts.hours);\n const [minutes, setMinutes] = useState(timeParts.minutes);\n const [seconds, setSeconds] = useState(timeParts.seconds);\n\n useEffect(() => {\n if (focusedInputRef.current !== hoursInputRef.current) {\n setHours(timeParts.hours);\n }\n if (focusedInputRef.current !== minutesInputRef.current) {\n setMinutes(timeParts.minutes);\n }\n if (focusedInputRef.current !== secondsInputRef.current) {\n setSeconds(timeParts.seconds);\n }\n }, [timeParts.hours, timeParts.minutes, timeParts.seconds]);\n\n const constraintText = useMemo(() => {\n const minValue = isSameDay(minDate, value) && moment(minDate).format('hh:mm:ss A');\n const maxValue = isSameDay(maxDate, value) && moment(maxDate).format('hh:mm:ss A');\n\n if (minValue && maxValue) {\n return `In ${minValue} - ${maxValue} range`;\n } else if (minValue) {\n return `Can’t be earlier than ${minValue}`;\n } else if (maxValue) {\n return `Can’t be later than ${maxValue}`;\n }\n return undefined;\n }, [maxDate, minDate, value]);\n\n const amPmOptions = useMemo(\n () =>\n ToggleButtonsOptions.map(item => {\n const isAmDisabled =\n item.value === 'am' &&\n !!minDate &&\n isSameDay(value, minDate) &&\n getOffsetFromDayStart(minDate) >= HalfOfDayMs;\n\n const isPmDisabled =\n item.value === 'pm' &&\n !!maxDate &&\n isSameDay(value, maxDate) &&\n getOffsetFromDayStart(maxDate) < HalfOfDayMs;\n\n return { ...item, disabled: disabled || isAmDisabled || isPmDisabled };\n }),\n [disabled, maxDate, minDate, value]\n );\n\n const updateValue = useCallback(\n (type: 'hours' | 'minutes' | 'seconds' | 'partOfDay', newValue: string) => {\n if (!value) {\n return;\n }\n\n const newDate = new Date(value);\n\n if (type === 'hours' && validateHours(newValue)) {\n const partOfDayOffset = timeParts.partOfDay === 'pm' ? 12 : 0;\n newDate.setHours(partOfDayOffset + Number(newValue));\n } else if (type === 'minutes' && validateMinutes(newValue)) {\n newDate.setMinutes(Number(newValue));\n } else if (type === 'seconds' && validateSeconds(newValue)) {\n newDate.setSeconds(Number(newValue));\n } else if (type === 'partOfDay' && (newValue === 'am' || newValue === 'pm')) {\n const hoursOffset = newDate.getHours() % 12;\n newDate.setHours((newValue === 'pm' ? 12 : 0) + hoursOffset);\n }\n\n if (Math.floor(newDate.getTime() / 1000) !== Math.floor(value.getTime() / 1000)) {\n onChange(newDate);\n }\n },\n [timeParts.partOfDay, onChange, value]\n );\n\n const onFieldFocus = useCallback<FocusEventHandler<HTMLInputElement>>(e => {\n e.target.select();\n focusedInputRef.current = e.target;\n }, []);\n\n const onFieldBlur = useCallback<FocusEventHandler<HTMLInputElement>>(\n e => {\n const fieldValue = sanitize(e.target.value);\n\n if (e.target === hoursInputRef.current) {\n const actualHours = getActualHours(fieldValue);\n const newHours = validateHours(actualHours) ? formatTimePart(actualHours) : timeParts.hours;\n setHours(newHours);\n updateValue('hours', newHours);\n }\n if (e.target === minutesInputRef.current) {\n const newMinutes = validateMinutes(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.minutes;\n setMinutes(newMinutes);\n updateValue('minutes', newMinutes);\n }\n if (e.target === secondsInputRef.current) {\n const newSeconds = validateSeconds(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.seconds;\n setSeconds(newSeconds);\n updateValue('seconds', newSeconds);\n }\n\n focusedInputRef.current = undefined;\n },\n [timeParts.hours, timeParts.minutes, timeParts.seconds, updateValue]\n );\n\n const onChangeHours = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n const actualHours = getActualHours(sanitized);\n setHours(sanitized);\n if (sanitized.length === 2 && validateHours(sanitized)) {\n updateValue('hours', actualHours);\n minutesInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeMinutes = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setMinutes(sanitized);\n if (sanitized.length === 2 && validateMinutes(sanitized)) {\n updateValue('minutes', sanitized);\n secondsInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeSeconds = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setSeconds(sanitized);\n if (validateSeconds(sanitized)) {\n updateValue('seconds', sanitized);\n }\n },\n [updateValue]\n );\n\n const setPartOfDay = useCallback(\n (newValue: string) => {\n updateValue('partOfDay', newValue);\n },\n [updateValue]\n );\n\n const outOfBounds =\n Number(value?.getTime()) > Number(maxDate?.getTime()) ||\n Number(value?.getTime()) < Number(minDate?.getTime());\n\n const hoursInvalid = !validateHours(hours) || outOfBounds;\n const minutesInvalid = !validateMinutes(minutes) || outOfBounds;\n const secondsInvalid = !validateSeconds(seconds) || outOfBounds;\n\n return (\n <>\n <div className={classNames(styles.timePicker)}>\n <Text className={styles.header} size={14}>\n <span className={classNames(styles.headerText, disabled && styles.disabled)}>Time</span>\n {constraintText && (\n <>\n <InfoIcon className={styles.constraintIcon} size={16} />\n {constraintText}\n </>\n )}\n </Text>\n\n <TextInputNext\n placeholder=\"HH\"\n className={styles.input}\n disabled={disabled}\n value={hours}\n onChange={onChangeHours}\n status={hoursInvalid ? 'error' : undefined}\n inputRef={hoursInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"MM\"\n className={styles.input}\n disabled={disabled}\n value={minutes}\n onChange={onChangeMinutes}\n status={minutesInvalid ? 'error' : undefined}\n inputRef={minutesInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"SS\"\n className={styles.input}\n disabled={disabled}\n value={seconds}\n onChange={onChangeSeconds}\n status={secondsInvalid ? 'error' : undefined}\n inputRef={secondsInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <ToggleButtons\n options={amPmOptions}\n className={styles.tabs}\n size=\"small\"\n value={timeParts.partOfDay}\n onChange={setPartOfDay}\n />\n </div>\n <div className={styles.footer}>\n {goToToday && (\n <Button onClick={goToToday} type=\"tertiary\" size=\"small\">\n Today\n </Button>\n )}\n\n <div className={styles.actions}>\n {clear && (\n <Button onClick={clear} type=\"tertiary\" size=\"small\" disabled={!value}>\n Clear\n </Button>\n )}\n\n <Button\n onClick={saveTime}\n type=\"secondary\"\n size=\"small\"\n disabled={!value || hoursInvalid || minutesInvalid || secondsInvalid}\n >\n Save\n </Button>\n </div>\n </div>\n </>\n );\n};\n"],"names":["ToggleButtonsOptions","value","label","sanitize","replace","substring","validateHours","Number","validateMinutes","validateSeconds","getOffsetFromDayStart","date","getTime","moment","startOf","toDate","formatTimePart","part","undefined","padStart","String","getActualHours","sanitized","_ref","onChange","minDate","maxDate","saveTime","goToToday","clear","disabled","hoursInputRef","useRef","minutesInputRef","secondsInputRef","focusedInputRef","timeParts","useMemo","partOfDay","hourOffset","hours","getHours","minutes","getMinutes","seconds","getSeconds","_useState","useState","_useState2","_slicedToArray","setHours","_useState3","_useState4","setMinutes","_useState5","_useState6","setSeconds","useEffect","current","constraintText","minValue","isSameDay","format","maxValue","concat","amPmOptions","map","item","isAmDisabled","isPmDisabled","_objectSpread","updateValue","useCallback","type","newValue","newDate","Date","partOfDayOffset","hoursOffset","Math","floor","onFieldFocus","e","target","select","onFieldBlur","fieldValue","actualHours","newHours","newMinutes","newSeconds","onChangeHours","_minutesInputRef$curr","length","focus","onChangeMinutes","_secondsInputRef$curr","onChangeSeconds","setPartOfDay","outOfBounds","hoursInvalid","minutesInvalid","secondsInvalid","_jsxs","_Fragment","children","jsxs","className","classNames","styles","timePicker","Text","header","size","_jsx","jsx","headerText","InfoIcon","constraintIcon","TextInputNext","placeholder","input","status","inputRef","onFocus","onBlur","color","ToggleButtons","options","tabs","footer","Button","onClick","actions"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t={date:"DD
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t={date:"MMM DD YYYY",dateTime:"MMM DD YYYY hh:mm A",month:"MMMM YYYY"},e={date:"MM/DD/YYYY",dateTime:"MM/DD/YYYY hh:mm A",month:"MMM YYYY"},l=["D","M","Y","h","m","s","S"],n=[].concat(l,["A"]),i=new RegExp("^([^".concat(n.join(""),"]+)"),"gi"),r={month:"MM/YYYY",date:"MM/DD/YYYY",dateTime:"MM/DD/YYYY hh:mm A"},o={month:[r.month,"MMMM YYYY","MMM YYYY"],date:[r.date,"M/D/YYYY"],dateTime:[r.dateTime,"M/D/YYYY hh:mm A"]},u=function(t,e){return!!t&&!!e&&t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()};exports.DefaultFormatByType=t,exports.DefaultFormatByTypeRange=e,exports.InputAutocompleteFormats=r,exports.InputParseFormats=o,exports.MonthOptions=[{id:1,title:"Jan",fullTitle:"January"},{id:2,title:"Feb",fullTitle:"February"},{id:3,title:"Mar",fullTitle:"March"},{id:4,title:"Apr",fullTitle:"April"},{id:5,title:"May",fullTitle:"May"},{id:6,title:"Jun",fullTitle:"June"},{id:7,title:"Jul",fullTitle:"July"},{id:8,title:"Aug",fullTitle:"August"},{id:9,title:"Sep",fullTitle:"September"},{id:10,title:"Oct",fullTitle:"October"},{id:11,title:"Nov",fullTitle:"November"},{id:12,title:"Dec",fullTitle:"December"}],exports.autocompleteValue=function(t){var e=t.value,n=t.type,o=t.range,u=t.prevValue,a=r[n],Y=o?"".concat(a," - ").concat(a):a,M=e.toLocaleLowerCase().replace(/([ap])m/gi,"$1");if(e.length<=u.length||!function(t,e){return e.length<=t.length&&e.split("").every((function(e,n){var i,r=t[n];if(l.includes(r))return null==(i=e)?void 0:i.match(/\d/);if("A"===r){var o=e.toLocaleLowerCase();return"a"===o||"p"===o}return r===e}))}(Y,M)||Y.length<=M.length)return e;var c=function(t,e){var l;return(null===(l=t.substring(e).match(i))||void 0===l?void 0:l[0])||""}(Y,M.length);return"".concat(e).concat(c)},exports.getDateWithSameTime=function(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate(),(null==e?void 0:e.getHours())||0,(null==e?void 0:e.getMinutes())||0,(null==e?void 0:e.getSeconds())||0)},exports.getDefaultFormat=function(l,n){return(n?e:t)[l]},exports.getMaxDate=function(t,e){return t&&e?t>e?t:e:t||e},exports.getMinDate=function(t,e){return t&&e?t<e?t:e:t||e},exports.isSameDay=function(t,e){return u(t,e)&&(null==t?void 0:t.getDate())===(null==e?void 0:e.getDate())},exports.isSameMonth=u;
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/componentsV2/DatePicker/utils.tsx"],"sourcesContent":["export type DatePickerType = 'date' | 'dateTime' | 'month';\n\nexport type DatePickerValue<IsRange extends boolean | undefined = false> = IsRange extends\n | undefined\n | false\n ? Date | undefined\n : [Date, Date] | undefined;\n\nexport type DatePickerChangeHandler<IsRange extends boolean | undefined = false> = (\n value: DatePickerValue<IsRange>\n) => void;\n\n// startDate - initial state, no start date selected\n// endDate - start done, no end date selected\nexport type RangeSelectionStep = 'startDate' | 'endDate';\n\nexport const DefaultFormatByType: Record<DatePickerType, string> = {\n date: 'DD
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/componentsV2/DatePicker/utils.tsx"],"sourcesContent":["export type DatePickerType = 'date' | 'dateTime' | 'month';\n\nexport type DatePickerValue<IsRange extends boolean | undefined = false> = IsRange extends\n | undefined\n | false\n ? Date | undefined\n : [Date, Date] | undefined;\n\nexport type DatePickerChangeHandler<IsRange extends boolean | undefined = false> = (\n value: DatePickerValue<IsRange>\n) => void;\n\n// startDate - initial state, no start date selected\n// endDate - start done, no end date selected\nexport type RangeSelectionStep = 'startDate' | 'endDate';\n\nexport const DefaultFormatByType: Record<DatePickerType, string> = {\n date: 'MMM DD YYYY',\n dateTime: 'MMM DD YYYY hh:mm A',\n month: 'MMMM YYYY',\n};\n\nexport const DefaultFormatByTypeRange: Record<DatePickerType, string> = {\n date: 'MM/DD/YYYY',\n dateTime: 'MM/DD/YYYY hh:mm A',\n month: 'MMM YYYY',\n};\n\nexport const getDefaultFormat = (type: DatePickerType, range?: boolean) => {\n const map = range ? DefaultFormatByTypeRange : DefaultFormatByType;\n return map[type];\n};\n\nconst NumericLetters = ['D', 'M', 'Y', 'h', 'm', 's', 'S'];\nconst AllLetters = [...NumericLetters, 'A'];\nconst GetSeparatorRegex = new RegExp(`^([^${AllLetters.join('')}]+)`, 'gi');\n\n// These formats should be composed only of `AllLetters` as placeholders only\nexport const InputAutocompleteFormats: Record<DatePickerType, string> = {\n month: 'MM/YYYY',\n date: 'MM/DD/YYYY',\n dateTime: 'MM/DD/YYYY hh:mm A',\n};\n\nexport const InputParseFormats: Record<DatePickerType, string[]> = {\n month: [InputAutocompleteFormats.month, 'MMMM YYYY', 'MMM YYYY'],\n date: [InputAutocompleteFormats.date, 'M/D/YYYY'],\n dateTime: [InputAutocompleteFormats.dateTime, 'M/D/YYYY hh:mm A'],\n};\n\nconst isDigit = (symbol?: string) => symbol?.match(/\\d/);\n\nconst isInFormatSoFar = (format: string, value: string) => {\n if (value.length <= format.length) {\n const valueArr = value.split('');\n\n return valueArr.every((valueChar, pos) => {\n const formatChar = format[pos];\n\n if (NumericLetters.includes(formatChar)) {\n return isDigit(valueChar);\n }\n\n if (formatChar === 'A') {\n const lcChar = valueChar.toLocaleLowerCase();\n return lcChar === 'a' || lcChar === 'p';\n }\n\n return formatChar === valueChar;\n });\n }\n\n return false;\n};\n\nconst getSeparator = (format: string, startIndex: number) => {\n return format.substring(startIndex).match(GetSeparatorRegex)?.[0] || '';\n};\n\nexport const autocompleteValue = ({\n value,\n type,\n range,\n prevValue,\n}: {\n type: DatePickerType;\n range?: boolean;\n value: string;\n prevValue: string;\n}) => {\n const formatPart = InputAutocompleteFormats[type];\n const format = range ? `${formatPart} - ${formatPart}` : formatPart;\n\n const preparedValue = value.toLocaleLowerCase().replace(/([ap])m/gi, '$1');\n\n if (\n value.length <= prevValue.length ||\n !isInFormatSoFar(format, preparedValue) ||\n format.length <= preparedValue.length\n ) {\n return value;\n }\n\n // Only autocomplete if user types something\n // Check if conforms to format so far\n // Adding separators if needed\n const separator = getSeparator(format, preparedValue.length);\n\n return `${value}${separator}`;\n};\n\nexport const isSameMonth = (a?: Date, b?: Date) =>\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n\nexport const isSameDay = (a?: Date, b?: Date) => isSameMonth(a, b) && a?.getDate() === b?.getDate();\n\nexport const getMinDate = (a?: Date, b?: Date) => {\n if (a && b) {\n return a < b ? a : b;\n }\n\n return a || b;\n};\n\nexport const getMaxDate = (a?: Date, b?: Date) => {\n if (a && b) {\n return a > b ? a : b;\n }\n\n return a || b;\n};\n\nexport const MonthOptions = [\n { id: 1, title: 'Jan', fullTitle: 'January' },\n { id: 2, title: 'Feb', fullTitle: 'February' },\n { id: 3, title: 'Mar', fullTitle: 'March' },\n { id: 4, title: 'Apr', fullTitle: 'April' },\n { id: 5, title: 'May', fullTitle: 'May' },\n { id: 6, title: 'Jun', fullTitle: 'June' },\n { id: 7, title: 'Jul', fullTitle: 'July' },\n { id: 8, title: 'Aug', fullTitle: 'August' },\n { id: 9, title: 'Sep', fullTitle: 'September' },\n { id: 10, title: 'Oct', fullTitle: 'October' },\n { id: 11, title: 'Nov', fullTitle: 'November' },\n { id: 12, title: 'Dec', fullTitle: 'December' },\n];\n\nexport type DatePickerCalendarView = 'year' | 'month';\n\nexport const getDateWithSameTime = (date: Date, timeDate?: Date) =>\n new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n timeDate?.getHours() || 0,\n timeDate?.getMinutes() || 0,\n timeDate?.getSeconds() || 0\n );\n"],"names":["DefaultFormatByType","date","dateTime","month","DefaultFormatByTypeRange","NumericLetters","AllLetters","concat","GetSeparatorRegex","RegExp","join","InputAutocompleteFormats","InputParseFormats","isSameMonth","a","b","getFullYear","getMonth","id","title","fullTitle","_ref","value","type","range","prevValue","formatPart","format","preparedValue","toLocaleLowerCase","replace","length","split","every","valueChar","pos","symbol","formatChar","includes","match","lcChar","isInFormatSoFar","separator","startIndex","_format$substring$mat","substring","getSeparator","timeDate","Date","getDate","getHours","getMinutes","getSeconds"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/objectWithoutProperties"),o=require("@material-ui/core"),n=require("react"),t=require("classnames"),s=require("../../effects/useDelayedDcFullscreenElemOpen.js"),c=require("../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider.js"),l=require("../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js"),i=require("../ModalWindow/ModalWindow.js"),u=require("./constants.js"),a=require("./Modal.scss.js"),p=require("react/jsx-runtime");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=d(e),O=d(r),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/objectWithoutProperties"),o=require("@material-ui/core"),n=require("react"),t=require("classnames"),s=require("../../effects/useDelayedDcFullscreenElemOpen.js"),c=require("../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider.js"),l=require("../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js"),i=require("../ModalWindow/ModalWindow.js"),u=require("./constants.js"),a=require("./Modal.scss.js"),p=require("react/jsx-runtime");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=d(e),O=d(r),b=d(t),j=["open","onClose","size","showCloseButton","closeOnBackdropClick","closeOnEscape"],v=["open"];function C(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function m(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?C(Object(o),!0).forEach((function(r){f.default(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):C(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}var D=function(e){var r=e.open,t=e.onClose,s=e.size,c=void 0===s?"medium":s,l=e.showCloseButton,d=void 0===l||l,f=e.closeOnBackdropClick,v=void 0===f||f,C=e.closeOnEscape,D=void 0===C||C,y=O.default(e,j),P=n.useCallback((function(e,r){t&&("backdropClick"===r&&v&&t("backdropClick"),"escapeKeyDown"===r&&D&&t("escapeKey"))}),[t,v,D]),w=n.useCallback((function(){null==t||t("closeButtonClick")}),[t]);return p.jsx(o.Modal,{open:r,className:b.default(u.MODAL_ROOT_CLASS,a.root),onClose:P,disableEnforceFocus:!0,children:p.jsx(i.ModalWindow,m(m({},y),{},{onClose:w,showCloseButton:d,size:c}))})},y=function(e){var r=e.open,o=O.default(e,v),n=s.useDelayedDcFullscreenElemOpen({isOpen:r},!0).delayedIsOpen;return p.jsx(c.IsInsideDcFullscreenElemProvider,{children:p.jsx(D,m({open:n},o))})};exports.Modal=function(e){var r=l.useIsInsideIsolatedDcApp(),o=c.useIsInsideDcFullscreenElem(),n=r&&!o?y:D;return p.jsx(n,m({},e))};
|
|
2
2
|
//# sourceMappingURL=Modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../../src/componentsV2/Modal/Modal.tsx"],"sourcesContent":["// TODO Move these hooks to better place so the imports won't be as hideous\nimport { Modal as MuiModal, ModalProps as MuiModalProps } from '@material-ui/core';\nimport { useCallback } from 'react';\nimport classNames from 'classnames';\n\nimport { useDelayedDcFullscreenElemOpen } from '../../effects/useDelayedDcFullscreenElemOpen';\nimport {\n IsInsideDcFullscreenElemProvider,\n useIsInsideDcFullscreenElem,\n} from '../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider';\nimport { useIsInsideIsolatedDcApp } from '../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { ModalWindow, ModalWindowProps } from '../ModalWindow';\n\nimport { MODAL_ROOT_CLASS } from './constants';\n\nimport styles from './Modal.scss';\n\nexport type ModalProps = Omit<ModalWindowProps, 'onClose'> & {\n open: boolean;\n onClose?: (reason: 'backdropClick' | 'escapeKey' | 'closeButtonClick') => void;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n};\n\nconst ActualModal = ({\n open,\n onClose,\n size = 'medium',\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n ...restProps\n}: ModalProps) => {\n const modalCloseHandler = useCallback<Required<MuiModalProps>['onClose']>(\n (_event, reason) => {\n if (onClose) {\n if (reason === 'backdropClick' && closeOnBackdropClick) {\n onClose('backdropClick');\n }\n if (reason === 'escapeKeyDown' && closeOnEscape) {\n onClose('escapeKey');\n }\n }\n },\n [onClose, closeOnBackdropClick, closeOnEscape]\n );\n\n const closeButtonClickHandler = useCallback(() => {\n onClose?.('closeButtonClick');\n }, [onClose]);\n\n return (\n <MuiModal\n open={open}\n className={classNames(MODAL_ROOT_CLASS, styles.root)}\n onClose={modalCloseHandler}\n >\n <ModalWindow\n {...restProps}\n onClose={closeButtonClickHandler}\n showCloseButton={showCloseButton}\n size={size}\n />\n </MuiModal>\n );\n};\n\nconst DcModal = ({ open: openProp, ...otherProps }: ModalProps) => {\n const { delayedIsOpen } = useDelayedDcFullscreenElemOpen({ isOpen: openProp }, true);\n\n return (\n <IsInsideDcFullscreenElemProvider>\n <ActualModal open={delayedIsOpen} {...otherProps} />\n </IsInsideDcFullscreenElemProvider>\n );\n};\n\nexport const Modal = (props: ModalProps) => {\n const isInsideDcApp = useIsInsideIsolatedDcApp();\n const isInsideDcFullscreenElem = useIsInsideDcFullscreenElem();\n\n const ModalComponent = isInsideDcApp && !isInsideDcFullscreenElem ? DcModal : ActualModal;\n\n return <ModalComponent {...props} />;\n};\n"],"names":["ActualModal","_ref","open","onClose","_ref$size","size","_ref$showCloseButton","showCloseButton","_ref$closeOnBackdropC","closeOnBackdropClick","_ref$closeOnEscape","closeOnEscape","restProps","_objectWithoutProperties","_excluded","modalCloseHandler","useCallback","_event","reason","closeButtonClickHandler","_jsx","MuiModal","className","classNames","MODAL_ROOT_CLASS","styles","root","children","ModalWindow","_objectSpread","DcModal","_ref2","openProp","otherProps","_excluded2","delayedIsOpen","useDelayedDcFullscreenElemOpen","isOpen","IsInsideDcFullscreenElemProvider","props","isInsideDcApp","useIsInsideIsolatedDcApp","isInsideDcFullscreenElem","useIsInsideDcFullscreenElem","ModalComponent"],"mappings":"q8CAwBA,IAAMA,EAAc,SAQFC,GAAA,IAPhBC,IAAAA,KACAC,IAAAA,QAAOC,EAAAH,EACPI,KAAAA,aAAO,SAAQD,EAAAE,EAAAL,EACfM,gBAAAA,cAAsBD,EAAAE,EAAAP,EACtBQ,qBAAAA,cAA2BD,EAAAE,EAAAT,EAC3BU,cAAAA,cAAoBD,EACjBE,EAASC,EAAA,QAAAZ,EAAAa,GAENC,EAAoBC,EAAAA,aACxB,SAACC,EAAQC,GACHf,IACa,kBAAXe,GAA8BT,GAChCN,EAAQ,iBAEK,kBAAXe,GAA8BP,GAChCR,EAAQ,aAGb,GACD,CAACA,EAASM,EAAsBE,IAG5BQ,EAA0BH,EAAAA,aAAY,WAC1Cb,SAAAA,EAAU,mBACZ,GAAG,CAACA,IAEJ,OACEiB,EAAAA,IAACC,EAAAA,MAAQ,CACPnB,KAAMA,EACNoB,UAAWC,EAAU,QAACC,mBAAkBC,EAAOC,MAC/CvB,QAASY,
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../src/componentsV2/Modal/Modal.tsx"],"sourcesContent":["// TODO Move these hooks to better place so the imports won't be as hideous\nimport { Modal as MuiModal, ModalProps as MuiModalProps } from '@material-ui/core';\nimport { useCallback } from 'react';\nimport classNames from 'classnames';\n\nimport { useDelayedDcFullscreenElemOpen } from '../../effects/useDelayedDcFullscreenElemOpen';\nimport {\n IsInsideDcFullscreenElemProvider,\n useIsInsideDcFullscreenElem,\n} from '../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider';\nimport { useIsInsideIsolatedDcApp } from '../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { ModalWindow, ModalWindowProps } from '../ModalWindow';\n\nimport { MODAL_ROOT_CLASS } from './constants';\n\nimport styles from './Modal.scss';\n\nexport type ModalProps = Omit<ModalWindowProps, 'onClose'> & {\n open: boolean;\n onClose?: (reason: 'backdropClick' | 'escapeKey' | 'closeButtonClick') => void;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n};\n\nconst ActualModal = ({\n open,\n onClose,\n size = 'medium',\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n ...restProps\n}: ModalProps) => {\n const modalCloseHandler = useCallback<Required<MuiModalProps>['onClose']>(\n (_event, reason) => {\n if (onClose) {\n if (reason === 'backdropClick' && closeOnBackdropClick) {\n onClose('backdropClick');\n }\n if (reason === 'escapeKeyDown' && closeOnEscape) {\n onClose('escapeKey');\n }\n }\n },\n [onClose, closeOnBackdropClick, closeOnEscape]\n );\n\n const closeButtonClickHandler = useCallback(() => {\n onClose?.('closeButtonClick');\n }, [onClose]);\n\n return (\n <MuiModal\n open={open}\n className={classNames(MODAL_ROOT_CLASS, styles.root)}\n onClose={modalCloseHandler}\n disableEnforceFocus\n >\n <ModalWindow\n {...restProps}\n onClose={closeButtonClickHandler}\n showCloseButton={showCloseButton}\n size={size}\n />\n </MuiModal>\n );\n};\n\nconst DcModal = ({ open: openProp, ...otherProps }: ModalProps) => {\n const { delayedIsOpen } = useDelayedDcFullscreenElemOpen({ isOpen: openProp }, true);\n\n return (\n <IsInsideDcFullscreenElemProvider>\n <ActualModal open={delayedIsOpen} {...otherProps} />\n </IsInsideDcFullscreenElemProvider>\n );\n};\n\nexport const Modal = (props: ModalProps) => {\n const isInsideDcApp = useIsInsideIsolatedDcApp();\n const isInsideDcFullscreenElem = useIsInsideDcFullscreenElem();\n\n const ModalComponent = isInsideDcApp && !isInsideDcFullscreenElem ? DcModal : ActualModal;\n\n return <ModalComponent {...props} />;\n};\n"],"names":["ActualModal","_ref","open","onClose","_ref$size","size","_ref$showCloseButton","showCloseButton","_ref$closeOnBackdropC","closeOnBackdropClick","_ref$closeOnEscape","closeOnEscape","restProps","_objectWithoutProperties","_excluded","modalCloseHandler","useCallback","_event","reason","closeButtonClickHandler","_jsx","MuiModal","className","classNames","MODAL_ROOT_CLASS","styles","root","disableEnforceFocus","children","ModalWindow","_objectSpread","DcModal","_ref2","openProp","otherProps","_excluded2","delayedIsOpen","useDelayedDcFullscreenElemOpen","isOpen","IsInsideDcFullscreenElemProvider","props","isInsideDcApp","useIsInsideIsolatedDcApp","isInsideDcFullscreenElem","useIsInsideDcFullscreenElem","ModalComponent"],"mappings":"q8CAwBA,IAAMA,EAAc,SAQFC,GAAA,IAPhBC,IAAAA,KACAC,IAAAA,QAAOC,EAAAH,EACPI,KAAAA,aAAO,SAAQD,EAAAE,EAAAL,EACfM,gBAAAA,cAAsBD,EAAAE,EAAAP,EACtBQ,qBAAAA,cAA2BD,EAAAE,EAAAT,EAC3BU,cAAAA,cAAoBD,EACjBE,EAASC,EAAA,QAAAZ,EAAAa,GAENC,EAAoBC,EAAAA,aACxB,SAACC,EAAQC,GACHf,IACa,kBAAXe,GAA8BT,GAChCN,EAAQ,iBAEK,kBAAXe,GAA8BP,GAChCR,EAAQ,aAGb,GACD,CAACA,EAASM,EAAsBE,IAG5BQ,EAA0BH,EAAAA,aAAY,WAC1Cb,SAAAA,EAAU,mBACZ,GAAG,CAACA,IAEJ,OACEiB,EAAAA,IAACC,EAAAA,MAAQ,CACPnB,KAAMA,EACNoB,UAAWC,EAAU,QAACC,mBAAkBC,EAAOC,MAC/CvB,QAASY,EACTY,qBAAmB,EAAAC,SAEnBR,EAAAA,IAACS,EAAAA,YAAWC,EAAAA,EAAA,GACNlB,GAAS,GAAA,CACbT,QAASgB,EACTZ,gBAAiBA,EACjBF,KAAMA,MAId,EAEM0B,EAAU,SAAmDC,GAAA,IAA1CC,IAAN/B,KAAmBgC,EAAUrB,EAAA,QAAAmB,EAAAG,GACtCC,EAAkBC,EAAAA,+BAA+B,CAAEC,OAAQL,IAAY,GAAvEG,cAER,OACEhB,EAAAA,IAACmB,EAAAA,iCAAgC,CAAAX,SAC/BR,EAAAA,IAACpB,EAAW8B,EAAA,CAAC5B,KAAMkC,GAAmBF,KAG5C,gBAEqB,SAACM,GACpB,IAAMC,EAAgBC,EAAAA,2BAChBC,EAA2BC,EAAAA,8BAE3BC,EAAiBJ,IAAkBE,EAA2BZ,EAAU/B,EAE9E,OAAOoB,EAAAA,IAACyB,EAAmBL,EAAAA,CAAAA,EAAAA,GAC7B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/slicedToArray";import{useRef as n,useMemo as c,useState as i,useEffect as t,useCallback as e}from"react";import r from"classnames";import m from"moment-timezone";import{padStart as u}from"lodash";import{TextInputNext as a}from"../../TextInputNext/TextInputNext.js";import{Text as l}from"../../Text/Text.js";import{ToggleButtons as p}from"../../ToggleButtons/ToggleButtons.js";import{isSameDay as d}from"../utils.js";import{Button as j}from"../../Button/Button.js";import I from"./TimePicker.scss.js";import{InfoIcon as f}from"../../../icons/iconParkIcons.js";import"../../../icons/customIcons/icons/AddMessage.js";import"../../../icons/customIcons/icons/DragOne.js";import"../../../icons/customIcons/icons/Attention.js";import"../../../icons/customIcons/icons/Collapse.js";import"../../../icons/customIcons/icons/Dashboard.js";import"../../../icons/customIcons/icons/Expand.js";import"../../../icons/customIcons/icons/FolderClosed.js";import"../../../icons/customIcons/icons/FolderClosedFilled.js";import"../../../icons/customIcons/icons/FolderOpened.js";import"../../../icons/customIcons/icons/GreaterOrEqual.js";import"../../../icons/customIcons/icons/LessOrEqual.js";import"../../../icons/customIcons/icons/Search.js";import"../../../icons/customIcons/icons/SearchOne.js";import"../../../icons/customIcons/icons/Wellhub.js";import"../../../icons/customIcons/icons/MultiRuler.js";import"../../../icons/customIcons/icons/Checkbox.js";import"../../../icons/customIcons/icons/CheckboxChecked.js";import"../../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../../icons/customIcons/icons/Radio.js";import"../../../icons/customIcons/icons/RadioChecked.js";import"../../../icons/customIcons/icons/SimulFrac.js";import"../../../icons/customIcons/icons/ZipperFrac.js";import"../../../icons/customIcons/icons/CautionFilled.js";import"../../../icons/customIcons/icons/InfoRounded.js";import"../../../icons/customIcons/icons/FlameFilled.js";import"../../../icons/customIcons/icons/MoreApp.js";import"../../../icons/customIcons/icons/Pad.js";import"../../../icons/customIcons/icons/DrilloutUnit.js";import"../../../icons/customIcons/icons/FracFleet.js";import"../../../icons/customIcons/icons/Global.js";import"../../../icons/customIcons/icons/Program.js";import"../../../icons/customIcons/icons/Rig.js";import"../../../icons/customIcons/icons/Well.js";import"../../../icons/customIcons/icons/Gap.js";import"../../../icons/customIcons/icons/Pin.js";import"../../../icons/customIcons/icons/PinOne.js";import"../../../icons/customIcons/icons/PinOneCrossed.js";import"../../../icons/customIcons/icons/CloseOneFilled.js";import"../../../icons/customIcons/icons/AttentionFilled.js";import"../../../icons/customIcons/icons/CheckOneFilled.js";import"../../../icons/customIcons/icons/Archive.js";import"../../../icons/customIcons/icons/ArchiveCancel.js";import"../../../icons/customIcons/icons/Unarchive.js";import"../../../icons/customIcons/icons/Archived.js";import"../../../icons/customIcons/icons/InterventionUnit.js";import"../../../icons/customIcons/icons/CloudDelete.js";import"../../../icons/customIcons/icons/Lasso.js";import"../../../icons/customIcons/icons/Radius.js";import"../../../icons/customIcons/icons/ErrorOps.js";import"../../../icons/customIcons/icons/DataTypeOps.js";import"../../../icons/customIcons/icons/FalsePositiveOps.js";import"../../../icons/customIcons/icons/CalibrationOps.js";import"../../../icons/customIcons/icons/CriticalOps.js";import"../../../icons/customIcons/icons/Company.js";import"../../../icons/customIcons/icons/ArchiveOne.js";import"../../../icons/customIcons/icons/ParseBotFusion.js";import"../../../icons/customIcons/icons/Connect.js";import"../../../icons/customIcons/icons/PuzzleOne.js";import"../../../icons/customIcons/icons/Feed.js";import"../../../icons/customIcons/icons/Prompt.js";import"../../../icons/customIcons/icons/Companies.js";import"../../../icons/customIcons/icons/ClipboardAi.js";import"../../../icons/customIcons/icons/Key.js";import"../../../icons/customIcons/icons/AtSignCrossed.js";import"../../../icons/customIcons/icons/MappingManual.js";import"../../../icons/customIcons/icons/Mapping.js";import"../../../icons/customIcons/icons/Metrics.js";import"../../../icons/customIcons/icons/Drops.js";import"../../../icons/customIcons/icons/ClipboardSearch.js";import"../../../icons/customIcons/icons/Template.js";import"../../../icons/customIcons/icons/ClipboardMetrics.js";import"../../../icons/customIcons/icons/ClipboardBuilder.js";import"../../../icons/customIcons/icons/UnitConversion.js";import"../../../icons/customIcons/icons/NPT.js";import"../../../icons/customIcons/icons/GuidedFrac.js";import{jsxs as h,Fragment as v,jsx as b}from"react/jsx-runtime";function g(o,s){var n=Object.keys(o);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(o);s&&(c=c.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),n.push.apply(n,c)}return n}function O(s){for(var n=1;n<arguments.length;n++){var c=null!=arguments[n]?arguments[n]:{};n%2?g(Object(c),!0).forEach((function(n){o(s,n,c[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(c)):g(Object(c)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(c,o))}))}return s}var C=[{value:"am",label:"AM"},{value:"pm",label:"PM"}],y=function(o){return o.replace(/[^\d]/g,"").substring(0,2)},T=function(o){return Number(o)>=0&&Number(o)<=12},N=function(o){return Number(o)>=0&&Number(o)<60},P=N,F=function(o){return o.getTime()-m(o).startOf("day").toDate().getTime()},D=function(o){return void 0!==o?u(String(o),2,"0"):""},M=function(o){return"12"===o?"00":o},x=function(o){var u=o.value,g=o.onChange,x=o.minDate,A=o.maxDate,k=o.saveTime,S=o.goToToday,z=o.clear,B=!u,R=n(null),w=n(null),E=n(null),H=n(),G=c((function(){var o=u?F(u)>=432e5?"pm":"am":void 0,s="pm"===o?12:0,n=u?u.getHours()-s:void 0;return{hours:D(void 0!==n&&
|
|
1
|
+
import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/slicedToArray";import{useRef as n,useMemo as c,useState as i,useEffect as t,useCallback as e}from"react";import r from"classnames";import m from"moment-timezone";import{padStart as u}from"lodash";import{TextInputNext as a}from"../../TextInputNext/TextInputNext.js";import{Text as l}from"../../Text/Text.js";import{ToggleButtons as p}from"../../ToggleButtons/ToggleButtons.js";import{isSameDay as d}from"../utils.js";import{Button as j}from"../../Button/Button.js";import I from"./TimePicker.scss.js";import{InfoIcon as f}from"../../../icons/iconParkIcons.js";import"../../../icons/customIcons/icons/AddMessage.js";import"../../../icons/customIcons/icons/DragOne.js";import"../../../icons/customIcons/icons/Attention.js";import"../../../icons/customIcons/icons/Collapse.js";import"../../../icons/customIcons/icons/Dashboard.js";import"../../../icons/customIcons/icons/Expand.js";import"../../../icons/customIcons/icons/FolderClosed.js";import"../../../icons/customIcons/icons/FolderClosedFilled.js";import"../../../icons/customIcons/icons/FolderOpened.js";import"../../../icons/customIcons/icons/GreaterOrEqual.js";import"../../../icons/customIcons/icons/LessOrEqual.js";import"../../../icons/customIcons/icons/Search.js";import"../../../icons/customIcons/icons/SearchOne.js";import"../../../icons/customIcons/icons/Wellhub.js";import"../../../icons/customIcons/icons/MultiRuler.js";import"../../../icons/customIcons/icons/Checkbox.js";import"../../../icons/customIcons/icons/CheckboxChecked.js";import"../../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../../icons/customIcons/icons/Radio.js";import"../../../icons/customIcons/icons/RadioChecked.js";import"../../../icons/customIcons/icons/SimulFrac.js";import"../../../icons/customIcons/icons/ZipperFrac.js";import"../../../icons/customIcons/icons/CautionFilled.js";import"../../../icons/customIcons/icons/InfoRounded.js";import"../../../icons/customIcons/icons/FlameFilled.js";import"../../../icons/customIcons/icons/MoreApp.js";import"../../../icons/customIcons/icons/Pad.js";import"../../../icons/customIcons/icons/DrilloutUnit.js";import"../../../icons/customIcons/icons/FracFleet.js";import"../../../icons/customIcons/icons/Global.js";import"../../../icons/customIcons/icons/Program.js";import"../../../icons/customIcons/icons/Rig.js";import"../../../icons/customIcons/icons/Well.js";import"../../../icons/customIcons/icons/Gap.js";import"../../../icons/customIcons/icons/Pin.js";import"../../../icons/customIcons/icons/PinOne.js";import"../../../icons/customIcons/icons/PinOneCrossed.js";import"../../../icons/customIcons/icons/CloseOneFilled.js";import"../../../icons/customIcons/icons/AttentionFilled.js";import"../../../icons/customIcons/icons/CheckOneFilled.js";import"../../../icons/customIcons/icons/Archive.js";import"../../../icons/customIcons/icons/ArchiveCancel.js";import"../../../icons/customIcons/icons/Unarchive.js";import"../../../icons/customIcons/icons/Archived.js";import"../../../icons/customIcons/icons/InterventionUnit.js";import"../../../icons/customIcons/icons/CloudDelete.js";import"../../../icons/customIcons/icons/Lasso.js";import"../../../icons/customIcons/icons/Radius.js";import"../../../icons/customIcons/icons/ErrorOps.js";import"../../../icons/customIcons/icons/DataTypeOps.js";import"../../../icons/customIcons/icons/FalsePositiveOps.js";import"../../../icons/customIcons/icons/CalibrationOps.js";import"../../../icons/customIcons/icons/CriticalOps.js";import"../../../icons/customIcons/icons/Company.js";import"../../../icons/customIcons/icons/ArchiveOne.js";import"../../../icons/customIcons/icons/ParseBotFusion.js";import"../../../icons/customIcons/icons/Connect.js";import"../../../icons/customIcons/icons/PuzzleOne.js";import"../../../icons/customIcons/icons/Feed.js";import"../../../icons/customIcons/icons/Prompt.js";import"../../../icons/customIcons/icons/Companies.js";import"../../../icons/customIcons/icons/ClipboardAi.js";import"../../../icons/customIcons/icons/Key.js";import"../../../icons/customIcons/icons/AtSignCrossed.js";import"../../../icons/customIcons/icons/MappingManual.js";import"../../../icons/customIcons/icons/Mapping.js";import"../../../icons/customIcons/icons/Metrics.js";import"../../../icons/customIcons/icons/Drops.js";import"../../../icons/customIcons/icons/ClipboardSearch.js";import"../../../icons/customIcons/icons/Template.js";import"../../../icons/customIcons/icons/ClipboardMetrics.js";import"../../../icons/customIcons/icons/ClipboardBuilder.js";import"../../../icons/customIcons/icons/UnitConversion.js";import"../../../icons/customIcons/icons/NPT.js";import"../../../icons/customIcons/icons/GuidedFrac.js";import{jsxs as h,Fragment as v,jsx as b}from"react/jsx-runtime";function g(o,s){var n=Object.keys(o);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(o);s&&(c=c.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),n.push.apply(n,c)}return n}function O(s){for(var n=1;n<arguments.length;n++){var c=null!=arguments[n]?arguments[n]:{};n%2?g(Object(c),!0).forEach((function(n){o(s,n,c[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(c)):g(Object(c)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(c,o))}))}return s}var C=[{value:"am",label:"AM"},{value:"pm",label:"PM"}],y=function(o){return o.replace(/[^\d]/g,"").substring(0,2)},T=function(o){return Number(o)>=0&&Number(o)<=12},N=function(o){return Number(o)>=0&&Number(o)<60},P=N,F=function(o){return o.getTime()-m(o).startOf("day").toDate().getTime()},D=function(o){return void 0!==o?u(String(o),2,"0"):""},M=function(o){return"12"===o?"00":o},x=function(o){var u=o.value,g=o.onChange,x=o.minDate,A=o.maxDate,k=o.saveTime,S=o.goToToday,z=o.clear,B=!u,R=n(null),w=n(null),E=n(null),H=n(),G=c((function(){var o=u?F(u)>=432e5?"pm":"am":void 0,s="pm"===o?12:0,n=u?u.getHours()-s:void 0;return{hours:D(void 0!==n&&12===n?0:n),minutes:D(null==u?void 0:u.getMinutes()),seconds:D(null==u?void 0:u.getSeconds()),partOfDay:o}}),[u]),U=i(G.hours),q=s(U,2),L=q[0],W=q[1],K=i(G.minutes),Z=s(K,2),J=Z[0],Q=Z[1],V=i(G.seconds),X=s(V,2),Y=X[0],$=X[1];t((function(){H.current!==R.current&&W(G.hours),H.current!==w.current&&Q(G.minutes),H.current!==E.current&&$(G.seconds)}),[G.hours,G.minutes,G.seconds]);var _=c((function(){var o=d(x,u)&&m(x).format("hh:mm:ss A"),s=d(A,u)&&m(A).format("hh:mm:ss A");return o&&s?"In ".concat(o," - ").concat(s," range"):o?"Can’t be earlier than ".concat(o):s?"Can’t be later than ".concat(s):void 0}),[A,x,u]),oo=c((function(){return C.map((function(o){var s="am"===o.value&&!!x&&d(u,x)&&F(x)>=432e5,n="pm"===o.value&&!!A&&d(u,A)&&F(A)<432e5;return O(O({},o),{},{disabled:B||s||n})}))}),[B,A,x,u]),so=e((function(o,s){if(u){var n=new Date(u);if("hours"===o&&T(s)){var c="pm"===G.partOfDay?12:0;n.setHours(c+Number(s))}else if("minutes"===o&&N(s))n.setMinutes(Number(s));else if("seconds"===o&&P(s))n.setSeconds(Number(s));else if("partOfDay"===o&&("am"===s||"pm"===s)){var i=n.getHours()%12;n.setHours(("pm"===s?12:0)+i)}Math.floor(n.getTime()/1e3)!==Math.floor(u.getTime()/1e3)&&g(n)}}),[G.partOfDay,g,u]),no=e((function(o){o.target.select(),H.current=o.target}),[]),co=e((function(o){var s=y(o.target.value);if(o.target===R.current){var n=M(s),c=T(n)?D(n):G.hours;W(c),so("hours",c)}if(o.target===w.current){var i=N(s)?D(s):G.minutes;Q(i),so("minutes",i)}if(o.target===E.current){var t=P(s)?D(s):G.seconds;$(t),so("seconds",t)}H.current=void 0}),[G.hours,G.minutes,G.seconds,so]),io=e((function(o){var s,n=y(o),c=M(n);(W(n),2===n.length&&T(n))&&(so("hours",c),null===(s=w.current)||void 0===s||s.focus())}),[so]),to=e((function(o){var s,n=y(o);(Q(n),2===n.length&&N(n))&&(so("minutes",n),null===(s=E.current)||void 0===s||s.focus())}),[so]),eo=e((function(o){var s=y(o);$(s),P(s)&&so("seconds",s)}),[so]),ro=e((function(o){so("partOfDay",o)}),[so]),mo=Number(null==u?void 0:u.getTime())>Number(null==A?void 0:A.getTime())||Number(null==u?void 0:u.getTime())<Number(null==x?void 0:x.getTime()),uo=!T(L)||mo,ao=!N(J)||mo,lo=!P(Y)||mo;return h(v,{children:[h("div",{className:r(I.timePicker),children:[h(l,{className:I.header,size:14,children:[b("span",{className:r(I.headerText,B&&I.disabled),children:"Time"}),_&&h(v,{children:[b(f,{className:I.constraintIcon,size:16}),_]})]}),b(a,{placeholder:"HH",className:I.input,disabled:B,value:L,onChange:io,status:uo?"error":void 0,inputRef:R,onFocus:no,onBlur:co}),b(l,{color:"T9",size:14,children:":"}),b(a,{placeholder:"MM",className:I.input,disabled:B,value:J,onChange:to,status:ao?"error":void 0,inputRef:w,onFocus:no,onBlur:co}),b(l,{color:"T9",size:14,children:":"}),b(a,{placeholder:"SS",className:I.input,disabled:B,value:Y,onChange:eo,status:lo?"error":void 0,inputRef:E,onFocus:no,onBlur:co}),b(p,{options:oo,className:I.tabs,size:"small",value:G.partOfDay,onChange:ro})]}),h("div",{className:I.footer,children:[S&&b(j,{onClick:S,type:"tertiary",size:"small",children:"Today"}),h("div",{className:I.actions,children:[z&&b(j,{onClick:z,type:"tertiary",size:"small",disabled:!u,children:"Clear"}),b(j,{onClick:k,type:"secondary",size:"small",disabled:!u||uo||ao||lo,children:"Save"})]})]})]})};export{x as TimePicker};
|
|
2
2
|
//# sourceMappingURL=TimePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimePicker.js","sources":["../../../../src/componentsV2/DatePicker/TimePicker/TimePicker.tsx"],"sourcesContent":["import { FocusEventHandler, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport { padStart } from 'lodash';\n\nimport { TextInputNext } from '../../TextInputNext';\nimport { Text } from '../../Text';\nimport { ToggleButtons } from '../../ToggleButtons';\nimport { isSameDay } from '../utils';\nimport { Button } from '../../Button';\n\nimport styles from './TimePicker.scss';\n\nimport { InfoIcon } from '~/icons';\n\ntype AmPm = 'am' | 'pm';\n\nconst HalfOfDayMs = 12 * 60 * 60 * 1000;\n\nconst ToggleButtonsOptions: { value: AmPm; label: string }[] = [\n { value: 'am', label: 'AM' },\n { value: 'pm', label: 'PM' },\n];\n\nexport type TimePickerProps = {\n value?: Date;\n onChange: (date: Date) => void;\n saveTime: () => void;\n maxDate?: Date;\n minDate?: Date;\n\n goToToday?: () => void;\n clear?: () => void;\n};\n\nconst sanitize = (value: string) => value.replace(/[^\\d]/g, '').substring(0, 2);\nconst validateHours = (value?: string) => Number(value) >= 0 && Number(value) <= 12;\nconst validateMinutes = (value?: string) => Number(value) >= 0 && Number(value) < 60;\nconst validateSeconds = validateMinutes;\n\nconst getOffsetFromDayStart = (date: Date) => {\n return date.getTime() - moment(date).startOf('day').toDate().getTime();\n};\n\nconst formatTimePart = (part?: string | number) =>\n part !== undefined ? padStart(String(part), 2, '0') : '';\n\nconst getPartOfDay = (date: Date) => {\n return getOffsetFromDayStart(date) >= HalfOfDayMs ? 'pm' : 'am';\n};\n\nconst getActualHours = (sanitized: string) => (sanitized === '12' ? '00' : sanitized);\n\nexport const TimePicker = ({\n value,\n onChange,\n minDate,\n maxDate,\n saveTime,\n goToToday,\n clear,\n}: TimePickerProps) => {\n const disabled = !value;\n\n const hoursInputRef = useRef<HTMLInputElement>(null);\n const minutesInputRef = useRef<HTMLInputElement>(null);\n const secondsInputRef = useRef<HTMLInputElement>(null);\n\n const focusedInputRef = useRef<HTMLInputElement>();\n\n const timeParts = useMemo(() => {\n const partOfDay = value ? getPartOfDay(value) : undefined;\n\n const hourOffset = partOfDay === 'pm' ? 12 : 0;\n\n const hours = value ? value.getHours() - hourOffset : undefined;\n\n const hoursAmPm = hours !== undefined && hours === 0 ? 12 : hours;\n\n return {\n hours: formatTimePart(hoursAmPm),\n minutes: formatTimePart(value?.getMinutes()),\n seconds: formatTimePart(value?.getSeconds()),\n partOfDay,\n };\n }, [value]);\n\n const [hours, setHours] = useState(timeParts.hours);\n const [minutes, setMinutes] = useState(timeParts.minutes);\n const [seconds, setSeconds] = useState(timeParts.seconds);\n\n useEffect(() => {\n if (focusedInputRef.current !== hoursInputRef.current) {\n setHours(timeParts.hours);\n }\n if (focusedInputRef.current !== minutesInputRef.current) {\n setMinutes(timeParts.minutes);\n }\n if (focusedInputRef.current !== secondsInputRef.current) {\n setSeconds(timeParts.seconds);\n }\n }, [timeParts.hours, timeParts.minutes, timeParts.seconds]);\n\n const constraintText = useMemo(() => {\n const minValue = isSameDay(minDate, value) && moment(minDate).format('hh:mm:ss A');\n const maxValue = isSameDay(maxDate, value) && moment(maxDate).format('hh:mm:ss A');\n\n if (minValue && maxValue) {\n return `In ${minValue} - ${maxValue} range`;\n } else if (minValue) {\n return `Can’t be earlier than ${minValue}`;\n } else if (maxValue) {\n return `Can’t be later than ${maxValue}`;\n }\n return undefined;\n }, [maxDate, minDate, value]);\n\n const amPmOptions = useMemo(\n () =>\n ToggleButtonsOptions.map(item => {\n const isAmDisabled =\n item.value === 'am' &&\n !!minDate &&\n isSameDay(value, minDate) &&\n getOffsetFromDayStart(minDate) >= HalfOfDayMs;\n\n const isPmDisabled =\n item.value === 'pm' &&\n !!maxDate &&\n isSameDay(value, maxDate) &&\n getOffsetFromDayStart(maxDate) < HalfOfDayMs;\n\n return { ...item, disabled: disabled || isAmDisabled || isPmDisabled };\n }),\n [disabled, maxDate, minDate, value]\n );\n\n const updateValue = useCallback(\n (type: 'hours' | 'minutes' | 'seconds' | 'partOfDay', newValue: string) => {\n if (!value) {\n return;\n }\n\n const newDate = new Date(value);\n\n if (type === 'hours' && validateHours(newValue)) {\n const partOfDayOffset = timeParts.partOfDay === 'pm' ? 12 : 0;\n newDate.setHours(partOfDayOffset + Number(newValue));\n } else if (type === 'minutes' && validateMinutes(newValue)) {\n newDate.setMinutes(Number(newValue));\n } else if (type === 'seconds' && validateSeconds(newValue)) {\n newDate.setSeconds(Number(newValue));\n } else if (type === 'partOfDay' && (newValue === 'am' || newValue === 'pm')) {\n const hoursOffset = newDate.getHours() % 12;\n newDate.setHours((newValue === 'pm' ? 12 : 0) + hoursOffset);\n }\n\n if (Math.floor(newDate.getTime() / 1000) !== Math.floor(value.getTime() / 1000)) {\n onChange(newDate);\n }\n },\n [timeParts.partOfDay, onChange, value]\n );\n\n const onFieldFocus = useCallback<FocusEventHandler<HTMLInputElement>>(e => {\n e.target.select();\n focusedInputRef.current = e.target;\n }, []);\n\n const onFieldBlur = useCallback<FocusEventHandler<HTMLInputElement>>(\n e => {\n const fieldValue = sanitize(e.target.value);\n\n if (e.target === hoursInputRef.current) {\n const actualHours = getActualHours(fieldValue);\n const newHours = validateHours(actualHours) ? formatTimePart(actualHours) : timeParts.hours;\n setHours(newHours);\n updateValue('hours', newHours);\n }\n if (e.target === minutesInputRef.current) {\n const newMinutes = validateMinutes(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.minutes;\n setMinutes(newMinutes);\n updateValue('minutes', newMinutes);\n }\n if (e.target === secondsInputRef.current) {\n const newSeconds = validateSeconds(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.seconds;\n setSeconds(newSeconds);\n updateValue('seconds', newSeconds);\n }\n\n focusedInputRef.current = undefined;\n },\n [timeParts.hours, timeParts.minutes, timeParts.seconds, updateValue]\n );\n\n const onChangeHours = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n const actualHours = getActualHours(sanitized);\n setHours(sanitized);\n if (sanitized.length === 2 && validateHours(sanitized)) {\n updateValue('hours', actualHours);\n minutesInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeMinutes = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setMinutes(sanitized);\n if (sanitized.length === 2 && validateMinutes(sanitized)) {\n updateValue('minutes', sanitized);\n secondsInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeSeconds = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setSeconds(sanitized);\n if (validateSeconds(sanitized)) {\n updateValue('seconds', sanitized);\n }\n },\n [updateValue]\n );\n\n const setPartOfDay = useCallback(\n (newValue: string) => {\n updateValue('partOfDay', newValue);\n },\n [updateValue]\n );\n\n const outOfBounds =\n Number(value?.getTime()) > Number(maxDate?.getTime()) ||\n Number(value?.getTime()) < Number(minDate?.getTime());\n\n const hoursInvalid = !validateHours(hours) || outOfBounds;\n const minutesInvalid = !validateMinutes(minutes) || outOfBounds;\n const secondsInvalid = !validateSeconds(seconds) || outOfBounds;\n\n return (\n <>\n <div className={classNames(styles.timePicker)}>\n <Text className={styles.header} size={14}>\n <span className={classNames(styles.headerText, disabled && styles.disabled)}>Time</span>\n {constraintText && (\n <>\n <InfoIcon className={styles.constraintIcon} size={16} />\n {constraintText}\n </>\n )}\n </Text>\n\n <TextInputNext\n placeholder=\"HH\"\n className={styles.input}\n disabled={disabled}\n value={hours}\n onChange={onChangeHours}\n status={hoursInvalid ? 'error' : undefined}\n inputRef={hoursInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"MM\"\n className={styles.input}\n disabled={disabled}\n value={minutes}\n onChange={onChangeMinutes}\n status={minutesInvalid ? 'error' : undefined}\n inputRef={minutesInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"SS\"\n className={styles.input}\n disabled={disabled}\n value={seconds}\n onChange={onChangeSeconds}\n status={secondsInvalid ? 'error' : undefined}\n inputRef={secondsInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <ToggleButtons\n options={amPmOptions}\n className={styles.tabs}\n size=\"small\"\n value={timeParts.partOfDay}\n onChange={setPartOfDay}\n />\n </div>\n <div className={styles.footer}>\n {goToToday && (\n <Button onClick={goToToday} type=\"tertiary\" size=\"small\">\n Today\n </Button>\n )}\n\n <div className={styles.actions}>\n {clear && (\n <Button onClick={clear} type=\"tertiary\" size=\"small\" disabled={!value}>\n Clear\n </Button>\n )}\n\n <Button\n onClick={saveTime}\n type=\"secondary\"\n size=\"small\"\n disabled={!value || hoursInvalid || minutesInvalid || secondsInvalid}\n >\n Save\n </Button>\n </div>\n </div>\n </>\n );\n};\n"],"names":["ToggleButtonsOptions","value","label","sanitize","replace","substring","validateHours","Number","validateMinutes","validateSeconds","getOffsetFromDayStart","date","getTime","moment","startOf","toDate","formatTimePart","part","undefined","padStart","String","getActualHours","sanitized","TimePicker","_ref","onChange","minDate","maxDate","saveTime","goToToday","clear","disabled","hoursInputRef","useRef","minutesInputRef","secondsInputRef","focusedInputRef","timeParts","useMemo","partOfDay","hourOffset","hours","getHours","minutes","getMinutes","seconds","getSeconds","_useState","useState","_useState2","_slicedToArray","setHours","_useState3","_useState4","setMinutes","_useState5","_useState6","setSeconds","useEffect","current","constraintText","minValue","isSameDay","format","maxValue","concat","amPmOptions","map","item","isAmDisabled","isPmDisabled","_objectSpread","updateValue","useCallback","type","newValue","newDate","Date","partOfDayOffset","hoursOffset","Math","floor","onFieldFocus","e","target","select","onFieldBlur","fieldValue","actualHours","newHours","newMinutes","newSeconds","onChangeHours","_minutesInputRef$curr","length","focus","onChangeMinutes","_secondsInputRef$curr","onChangeSeconds","setPartOfDay","outOfBounds","hoursInvalid","minutesInvalid","secondsInvalid","_jsxs","_Fragment","children","className","classNames","styles","timePicker","Text","header","size","_jsx","headerText","InfoIcon","constraintIcon","TextInputNext","placeholder","input","status","inputRef","onFocus","onBlur","color","ToggleButtons","options","tabs","footer","Button","onClick","actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TimePicker.js","sources":["../../../../src/componentsV2/DatePicker/TimePicker/TimePicker.tsx"],"sourcesContent":["import { FocusEventHandler, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport { padStart } from 'lodash';\n\nimport { TextInputNext } from '../../TextInputNext';\nimport { Text } from '../../Text';\nimport { ToggleButtons } from '../../ToggleButtons';\nimport { isSameDay } from '../utils';\nimport { Button } from '../../Button';\n\nimport styles from './TimePicker.scss';\n\nimport { InfoIcon } from '~/icons';\n\ntype AmPm = 'am' | 'pm';\n\nconst HalfOfDayMs = 12 * 60 * 60 * 1000;\n\nconst ToggleButtonsOptions: { value: AmPm; label: string }[] = [\n { value: 'am', label: 'AM' },\n { value: 'pm', label: 'PM' },\n];\n\nexport type TimePickerProps = {\n value?: Date;\n onChange: (date: Date) => void;\n saveTime: () => void;\n maxDate?: Date;\n minDate?: Date;\n\n goToToday?: () => void;\n clear?: () => void;\n};\n\nconst sanitize = (value: string) => value.replace(/[^\\d]/g, '').substring(0, 2);\nconst validateHours = (value?: string) => Number(value) >= 0 && Number(value) <= 12;\nconst validateMinutes = (value?: string) => Number(value) >= 0 && Number(value) < 60;\nconst validateSeconds = validateMinutes;\n\nconst getOffsetFromDayStart = (date: Date) => {\n return date.getTime() - moment(date).startOf('day').toDate().getTime();\n};\n\nconst formatTimePart = (part?: string | number) =>\n part !== undefined ? padStart(String(part), 2, '0') : '';\n\nconst getPartOfDay = (date: Date) => {\n return getOffsetFromDayStart(date) >= HalfOfDayMs ? 'pm' : 'am';\n};\n\nconst getActualHours = (sanitized: string) => (sanitized === '12' ? '00' : sanitized);\n\nexport const TimePicker = ({\n value,\n onChange,\n minDate,\n maxDate,\n saveTime,\n goToToday,\n clear,\n}: TimePickerProps) => {\n const disabled = !value;\n\n const hoursInputRef = useRef<HTMLInputElement>(null);\n const minutesInputRef = useRef<HTMLInputElement>(null);\n const secondsInputRef = useRef<HTMLInputElement>(null);\n\n const focusedInputRef = useRef<HTMLInputElement>();\n\n const timeParts = useMemo(() => {\n const partOfDay = value ? getPartOfDay(value) : undefined;\n\n const hourOffset = partOfDay === 'pm' ? 12 : 0;\n\n const hours = value ? value.getHours() - hourOffset : undefined;\n\n const hoursAmPm = hours !== undefined && hours === 12 ? 0 : hours;\n\n return {\n hours: formatTimePart(hoursAmPm),\n minutes: formatTimePart(value?.getMinutes()),\n seconds: formatTimePart(value?.getSeconds()),\n partOfDay,\n };\n }, [value]);\n\n const [hours, setHours] = useState(timeParts.hours);\n const [minutes, setMinutes] = useState(timeParts.minutes);\n const [seconds, setSeconds] = useState(timeParts.seconds);\n\n useEffect(() => {\n if (focusedInputRef.current !== hoursInputRef.current) {\n setHours(timeParts.hours);\n }\n if (focusedInputRef.current !== minutesInputRef.current) {\n setMinutes(timeParts.minutes);\n }\n if (focusedInputRef.current !== secondsInputRef.current) {\n setSeconds(timeParts.seconds);\n }\n }, [timeParts.hours, timeParts.minutes, timeParts.seconds]);\n\n const constraintText = useMemo(() => {\n const minValue = isSameDay(minDate, value) && moment(minDate).format('hh:mm:ss A');\n const maxValue = isSameDay(maxDate, value) && moment(maxDate).format('hh:mm:ss A');\n\n if (minValue && maxValue) {\n return `In ${minValue} - ${maxValue} range`;\n } else if (minValue) {\n return `Can’t be earlier than ${minValue}`;\n } else if (maxValue) {\n return `Can’t be later than ${maxValue}`;\n }\n return undefined;\n }, [maxDate, minDate, value]);\n\n const amPmOptions = useMemo(\n () =>\n ToggleButtonsOptions.map(item => {\n const isAmDisabled =\n item.value === 'am' &&\n !!minDate &&\n isSameDay(value, minDate) &&\n getOffsetFromDayStart(minDate) >= HalfOfDayMs;\n\n const isPmDisabled =\n item.value === 'pm' &&\n !!maxDate &&\n isSameDay(value, maxDate) &&\n getOffsetFromDayStart(maxDate) < HalfOfDayMs;\n\n return { ...item, disabled: disabled || isAmDisabled || isPmDisabled };\n }),\n [disabled, maxDate, minDate, value]\n );\n\n const updateValue = useCallback(\n (type: 'hours' | 'minutes' | 'seconds' | 'partOfDay', newValue: string) => {\n if (!value) {\n return;\n }\n\n const newDate = new Date(value);\n\n if (type === 'hours' && validateHours(newValue)) {\n const partOfDayOffset = timeParts.partOfDay === 'pm' ? 12 : 0;\n newDate.setHours(partOfDayOffset + Number(newValue));\n } else if (type === 'minutes' && validateMinutes(newValue)) {\n newDate.setMinutes(Number(newValue));\n } else if (type === 'seconds' && validateSeconds(newValue)) {\n newDate.setSeconds(Number(newValue));\n } else if (type === 'partOfDay' && (newValue === 'am' || newValue === 'pm')) {\n const hoursOffset = newDate.getHours() % 12;\n newDate.setHours((newValue === 'pm' ? 12 : 0) + hoursOffset);\n }\n\n if (Math.floor(newDate.getTime() / 1000) !== Math.floor(value.getTime() / 1000)) {\n onChange(newDate);\n }\n },\n [timeParts.partOfDay, onChange, value]\n );\n\n const onFieldFocus = useCallback<FocusEventHandler<HTMLInputElement>>(e => {\n e.target.select();\n focusedInputRef.current = e.target;\n }, []);\n\n const onFieldBlur = useCallback<FocusEventHandler<HTMLInputElement>>(\n e => {\n const fieldValue = sanitize(e.target.value);\n\n if (e.target === hoursInputRef.current) {\n const actualHours = getActualHours(fieldValue);\n const newHours = validateHours(actualHours) ? formatTimePart(actualHours) : timeParts.hours;\n setHours(newHours);\n updateValue('hours', newHours);\n }\n if (e.target === minutesInputRef.current) {\n const newMinutes = validateMinutes(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.minutes;\n setMinutes(newMinutes);\n updateValue('minutes', newMinutes);\n }\n if (e.target === secondsInputRef.current) {\n const newSeconds = validateSeconds(fieldValue)\n ? formatTimePart(fieldValue)\n : timeParts.seconds;\n setSeconds(newSeconds);\n updateValue('seconds', newSeconds);\n }\n\n focusedInputRef.current = undefined;\n },\n [timeParts.hours, timeParts.minutes, timeParts.seconds, updateValue]\n );\n\n const onChangeHours = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n const actualHours = getActualHours(sanitized);\n setHours(sanitized);\n if (sanitized.length === 2 && validateHours(sanitized)) {\n updateValue('hours', actualHours);\n minutesInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeMinutes = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setMinutes(sanitized);\n if (sanitized.length === 2 && validateMinutes(sanitized)) {\n updateValue('minutes', sanitized);\n secondsInputRef.current?.focus();\n }\n },\n [updateValue]\n );\n\n const onChangeSeconds = useCallback(\n (newValue: string) => {\n const sanitized = sanitize(newValue);\n setSeconds(sanitized);\n if (validateSeconds(sanitized)) {\n updateValue('seconds', sanitized);\n }\n },\n [updateValue]\n );\n\n const setPartOfDay = useCallback(\n (newValue: string) => {\n updateValue('partOfDay', newValue);\n },\n [updateValue]\n );\n\n const outOfBounds =\n Number(value?.getTime()) > Number(maxDate?.getTime()) ||\n Number(value?.getTime()) < Number(minDate?.getTime());\n\n const hoursInvalid = !validateHours(hours) || outOfBounds;\n const minutesInvalid = !validateMinutes(minutes) || outOfBounds;\n const secondsInvalid = !validateSeconds(seconds) || outOfBounds;\n\n return (\n <>\n <div className={classNames(styles.timePicker)}>\n <Text className={styles.header} size={14}>\n <span className={classNames(styles.headerText, disabled && styles.disabled)}>Time</span>\n {constraintText && (\n <>\n <InfoIcon className={styles.constraintIcon} size={16} />\n {constraintText}\n </>\n )}\n </Text>\n\n <TextInputNext\n placeholder=\"HH\"\n className={styles.input}\n disabled={disabled}\n value={hours}\n onChange={onChangeHours}\n status={hoursInvalid ? 'error' : undefined}\n inputRef={hoursInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"MM\"\n className={styles.input}\n disabled={disabled}\n value={minutes}\n onChange={onChangeMinutes}\n status={minutesInvalid ? 'error' : undefined}\n inputRef={minutesInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <Text color=\"T9\" size={14}>\n :\n </Text>\n\n <TextInputNext\n placeholder=\"SS\"\n className={styles.input}\n disabled={disabled}\n value={seconds}\n onChange={onChangeSeconds}\n status={secondsInvalid ? 'error' : undefined}\n inputRef={secondsInputRef}\n onFocus={onFieldFocus}\n onBlur={onFieldBlur}\n />\n\n <ToggleButtons\n options={amPmOptions}\n className={styles.tabs}\n size=\"small\"\n value={timeParts.partOfDay}\n onChange={setPartOfDay}\n />\n </div>\n <div className={styles.footer}>\n {goToToday && (\n <Button onClick={goToToday} type=\"tertiary\" size=\"small\">\n Today\n </Button>\n )}\n\n <div className={styles.actions}>\n {clear && (\n <Button onClick={clear} type=\"tertiary\" size=\"small\" disabled={!value}>\n Clear\n </Button>\n )}\n\n <Button\n onClick={saveTime}\n type=\"secondary\"\n size=\"small\"\n disabled={!value || hoursInvalid || minutesInvalid || secondsInvalid}\n >\n Save\n </Button>\n </div>\n </div>\n </>\n );\n};\n"],"names":["ToggleButtonsOptions","value","label","sanitize","replace","substring","validateHours","Number","validateMinutes","validateSeconds","getOffsetFromDayStart","date","getTime","moment","startOf","toDate","formatTimePart","part","undefined","padStart","String","getActualHours","sanitized","TimePicker","_ref","onChange","minDate","maxDate","saveTime","goToToday","clear","disabled","hoursInputRef","useRef","minutesInputRef","secondsInputRef","focusedInputRef","timeParts","useMemo","partOfDay","hourOffset","hours","getHours","minutes","getMinutes","seconds","getSeconds","_useState","useState","_useState2","_slicedToArray","setHours","_useState3","_useState4","setMinutes","_useState5","_useState6","setSeconds","useEffect","current","constraintText","minValue","isSameDay","format","maxValue","concat","amPmOptions","map","item","isAmDisabled","isPmDisabled","_objectSpread","updateValue","useCallback","type","newValue","newDate","Date","partOfDayOffset","hoursOffset","Math","floor","onFieldFocus","e","target","select","onFieldBlur","fieldValue","actualHours","newHours","newMinutes","newSeconds","onChangeHours","_minutesInputRef$curr","length","focus","onChangeMinutes","_secondsInputRef$curr","onChangeSeconds","setPartOfDay","outOfBounds","hoursInvalid","minutesInvalid","secondsInvalid","_jsxs","_Fragment","children","className","classNames","styles","timePicker","Text","header","size","_jsx","headerText","InfoIcon","constraintIcon","TextInputNext","placeholder","input","status","inputRef","onFocus","onBlur","color","ToggleButtons","options","tabs","footer","Button","onClick","actions"],"mappings":"2wKAiBA,IAEMA,EAAyD,CAC7D,CAAEC,MAAO,KAAMC,MAAO,MACtB,CAAED,MAAO,KAAMC,MAAO,OAclBC,EAAW,SAACF,GAAa,OAAKA,EAAMG,QAAQ,SAAU,IAAIC,UAAU,EAAG,EAAE,EACzEC,EAAgB,SAACL,GAAc,OAAKM,OAAON,IAAU,GAAKM,OAAON,IAAU,EAAE,EAC7EO,EAAkB,SAACP,GAAc,OAAKM,OAAON,IAAU,GAAKM,OAAON,GAAS,EAAE,EAC9EQ,EAAkBD,EAElBE,EAAwB,SAACC,GAC7B,OAAOA,EAAKC,UAAYC,EAAOF,GAAMG,QAAQ,OAAOC,SAASH,SAC/D,EAEMI,EAAiB,SAACC,GAAsB,YACnCC,IAATD,EAAqBE,EAASC,OAAOH,GAAO,EAAG,KAAO,EAAE,EAMpDI,EAAiB,SAACC,GAAiB,MAAoB,OAAdA,EAAqB,KAAOA,CAAS,EAEvEC,EAAa,SAQHC,GAAA,IAPrBvB,IAAAA,MACAwB,IAAAA,SACAC,IAAAA,QACAC,IAAAA,QACAC,IAAAA,SACAC,IAAAA,UACAC,IAAAA,MAEMC,GAAY9B,EAEZ+B,EAAgBC,EAAyB,MACzCC,EAAkBD,EAAyB,MAC3CE,EAAkBF,EAAyB,MAE3CG,EAAkBH,IAElBI,EAAYC,GAAQ,WACxB,IAAMC,EAAYtC,EAvBbS,EAuBkCT,IAtDvB,MA+BkC,KAAO,UAuBTiB,EAE1CsB,EAA2B,OAAdD,EAAqB,GAAK,EAEvCE,EAAQxC,EAAQA,EAAMyC,WAAaF,OAAatB,EAItD,MAAO,CACLuB,MAAOzB,OAHmBE,IAAVuB,GAAiC,KAAVA,EAAe,EAAIA,GAI1DE,QAAS3B,EAAef,aAAK,EAALA,EAAO2C,cAC/BC,QAAS7B,EAAef,aAAK,EAALA,EAAO6C,cAC/BP,UAAAA,EAEJ,GAAG,CAACtC,IAEJ8C,EAA0BC,EAASX,EAAUI,OAAMQ,EAAAC,EAAAH,EAAA,GAA5CN,EAAKQ,EAAA,GAAEE,EAAQF,EAAA,GACtBG,EAA8BJ,EAASX,EAAUM,SAAQU,EAAAH,EAAAE,EAAA,GAAlDT,EAAOU,EAAA,GAAEC,EAAUD,EAAA,GAC1BE,EAA8BP,EAASX,EAAUQ,SAAQW,EAAAN,EAAAK,EAAA,GAAlDV,EAAOW,EAAA,GAAEC,EAAUD,EAAA,GAE1BE,GAAU,WACJtB,EAAgBuB,UAAY3B,EAAc2B,SAC5CR,EAASd,EAAUI,OAEjBL,EAAgBuB,UAAYzB,EAAgByB,SAC9CL,EAAWjB,EAAUM,SAEnBP,EAAgBuB,UAAYxB,EAAgBwB,SAC9CF,EAAWpB,EAAUQ,QAEzB,GAAG,CAACR,EAAUI,MAAOJ,EAAUM,QAASN,EAAUQ,UAElD,IAAMe,EAAiBtB,GAAQ,WAC7B,IAAMuB,EAAWC,EAAUpC,EAASzB,IAAUY,EAAOa,GAASqC,OAAO,cAC/DC,EAAWF,EAAUnC,EAAS1B,IAAUY,EAAOc,GAASoC,OAAO,cAErE,OAAIF,GAAYG,EACDH,MAAAA,OAAAA,gBAAcG,EAAQ,UAC1BH,EACT,yBAAAI,OAAgCJ,GACvBG,EACT,uBAAAC,OAA8BD,QADzB,CAIR,GAAE,CAACrC,EAASD,EAASzB,IAEhBiE,GAAc5B,GAClB,WAAA,OACEtC,EAAqBmE,KAAI,SAAAC,GACvB,IAAMC,EACW,OAAfD,EAAKnE,SACHyB,GACFoC,EAAU7D,EAAOyB,IACjBhB,EAAsBgB,IA3GZ,MA6GN4C,EACW,OAAfF,EAAKnE,SACH0B,GACFmC,EAAU7D,EAAO0B,IACjBjB,EAAsBiB,GAjHZ,MAmHZ,OAAA4C,EAAAA,EAAA,CAAA,EAAYH,GAAI,CAAA,EAAA,CAAErC,SAAUA,GAAYsC,GAAgBC,GAC1D,GACF,GAAA,CAACvC,EAAUJ,EAASD,EAASzB,IAGzBuE,GAAcC,GAClB,SAACC,EAAqDC,GACpD,GAAK1E,EAAL,CAIA,IAAM2E,EAAU,IAAIC,KAAK5E,GAEzB,GAAa,UAATyE,GAAoBpE,EAAcqE,GAAW,CAC/C,IAAMG,EAA0C,OAAxBzC,EAAUE,UAAqB,GAAK,EAC5DqC,EAAQzB,SAAS2B,EAAkBvE,OAAOoE,GAC3C,MAAM,GAAa,YAATD,GAAsBlE,EAAgBmE,GAC/CC,EAAQtB,WAAW/C,OAAOoE,SACrB,GAAa,YAATD,GAAsBjE,EAAgBkE,GAC/CC,EAAQnB,WAAWlD,OAAOoE,SACrB,GAAa,cAATD,IAAsC,OAAbC,GAAkC,OAAbA,GAAoB,CAC3E,IAAMI,EAAcH,EAAQlC,WAAa,GACzCkC,EAAQzB,UAAuB,OAAbwB,EAAoB,GAAK,GAAKI,EAClD,CAEIC,KAAKC,MAAML,EAAQhE,UAAY,OAAUoE,KAAKC,MAAMhF,EAAMW,UAAY,MACxEa,EAASmD,EAjBX,CAmBD,GACD,CAACvC,EAAUE,UAAWd,EAAUxB,IAG5BiF,GAAeT,GAAiD,SAAAU,GACpEA,EAAEC,OAAOC,SACTjD,EAAgBuB,QAAUwB,EAAEC,MAC7B,GAAE,IAEGE,GAAcb,GAClB,SAAAU,GACE,IAAMI,EAAapF,EAASgF,EAAEC,OAAOnF,OAErC,GAAIkF,EAAEC,SAAWpD,EAAc2B,QAAS,CACtC,IAAM6B,EAAcnE,EAAekE,GAC7BE,EAAWnF,EAAckF,GAAexE,EAAewE,GAAenD,EAAUI,MACtFU,EAASsC,GACTjB,GAAY,QAASiB,EACvB,CACA,GAAIN,EAAEC,SAAWlD,EAAgByB,QAAS,CACxC,IAAM+B,EAAalF,EAAgB+E,GAC/BvE,EAAeuE,GACflD,EAAUM,QACdW,EAAWoC,GACXlB,GAAY,UAAWkB,EACzB,CACA,GAAIP,EAAEC,SAAWjD,EAAgBwB,QAAS,CACxC,IAAMgC,EAAalF,EAAgB8E,GAC/BvE,EAAeuE,GACflD,EAAUQ,QACdY,EAAWkC,GACXnB,GAAY,UAAWmB,EACzB,CAEAvD,EAAgBuB,aAAUzC,CAC5B,GACA,CAACmB,EAAUI,MAAOJ,EAAUM,QAASN,EAAUQ,QAAS2B,KAGpDoB,GAAgBnB,GACpB,SAACE,GACC,IAGwDkB,EAHlDvE,EAAYnB,EAASwE,GACrBa,EAAcnE,EAAeC,IACnC6B,EAAS7B,GACgB,IAArBA,EAAUwE,QAAgBxF,EAAcgB,MAC1CkD,GAAY,QAASgB,GACrB,QAAAK,EAAA3D,EAAgByB,eAAhB,IAAAkC,GAAAA,EAAyBE,QAE7B,GACA,CAACvB,KAGGwB,GAAkBvB,GACtB,SAACE,GACC,IAE0DsB,EAFpD3E,EAAYnB,EAASwE,IAC3BrB,EAAWhC,GACc,IAArBA,EAAUwE,QAAgBtF,EAAgBc,MAC5CkD,GAAY,UAAWlD,GACvB,QAAA2E,EAAA9D,EAAgBwB,eAAhB,IAAAsC,GAAAA,EAAyBF,QAE7B,GACA,CAACvB,KAGG0B,GAAkBzB,GACtB,SAACE,GACC,IAAMrD,EAAYnB,EAASwE,GAC3BlB,EAAWnC,GACPb,EAAgBa,IAClBkD,GAAY,UAAWlD,EAE3B,GACA,CAACkD,KAGG2B,GAAe1B,GACnB,SAACE,GACCH,GAAY,YAAaG,EAC3B,GACA,CAACH,KAGG4B,GACJ7F,OAAON,aAAAA,EAAAA,EAAOW,WAAaL,OAAOoB,aAAO,EAAPA,EAASf,YAC3CL,OAAON,aAAAA,EAAAA,EAAOW,WAAaL,OAAOmB,eAAAA,EAASd,WAEvCyF,IAAgB/F,EAAcmC,IAAU2D,GACxCE,IAAkB9F,EAAgBmC,IAAYyD,GAC9CG,IAAkB9F,EAAgBoC,IAAYuD,GAEpD,OACEI,EAAAC,EAAA,CAAAC,SACE,CAAAF,EAAA,MAAA,CAAKG,UAAWC,EAAWC,EAAOC,YAAYJ,SAAA,CAC5CF,EAACO,EAAI,CAACJ,UAAWE,EAAOG,OAAQC,KAAM,GAAGP,SACvC,CAAAQ,EAAA,OAAA,CAAMP,UAAWC,EAAWC,EAAOM,WAAYpF,GAAY8E,EAAO9E,UAAU2E,SAAA,SAC3E9C,GACC4C,EAAAC,EAAA,CAAAC,SAAA,CACEQ,EAACE,EAAQ,CAACT,UAAWE,EAAOQ,eAAgBJ,KAAM,KACjDrD,QAKPsD,EAACI,EAAa,CACZC,YAAY,KACZZ,UAAWE,EAAOW,MAClBzF,SAAUA,EACV9B,MAAOwC,EACPhB,SAAUmE,GACV6B,OAAQpB,GAAe,aAAUnF,EACjCwG,SAAU1F,EACV2F,QAASzC,GACT0C,OAAQtC,KAGV4B,EAACH,EAAI,CAACc,MAAM,KAAKZ,KAAM,GAAGP,SAAA,MAI1BQ,EAACI,EAAa,CACZC,YAAY,KACZZ,UAAWE,EAAOW,MAClBzF,SAAUA,EACV9B,MAAO0C,EACPlB,SAAUuE,GACVyB,OAAQnB,GAAiB,aAAUpF,EACnCwG,SAAUxF,EACVyF,QAASzC,GACT0C,OAAQtC,KAGV4B,EAACH,EAAI,CAACc,MAAM,KAAKZ,KAAM,GAAGP,SAAA,MAI1BQ,EAACI,EAAa,CACZC,YAAY,KACZZ,UAAWE,EAAOW,MAClBzF,SAAUA,EACV9B,MAAO4C,EACPpB,SAAUyE,GACVuB,OAAQlB,GAAiB,aAAUrF,EACnCwG,SAAUvF,EACVwF,QAASzC,GACT0C,OAAQtC,KAGV4B,EAACY,EAAa,CACZC,QAAS7D,GACTyC,UAAWE,EAAOmB,KAClBf,KAAK,QACLhH,MAAOoC,EAAUE,UACjBd,SAAU0E,QAGdK,EAAA,MAAA,CAAKG,UAAWE,EAAOoB,OAAOvB,SAC3B7E,CAAAA,GACCqF,EAACgB,EAAM,CAACC,QAAStG,EAAW6C,KAAK,WAAWuC,KAAK,QAAOP,SAAA,UAK1DF,EAAA,MAAA,CAAKG,UAAWE,EAAOuB,QAAQ1B,SAC5B5E,CAAAA,GACCoF,EAACgB,EAAM,CAACC,QAASrG,EAAO4C,KAAK,WAAWuC,KAAK,QAAQlF,UAAW9B,EAAMyG,SAAA,UAKxEQ,EAACgB,EAAM,CACLC,QAASvG,EACT8C,KAAK,YACLuC,KAAK,QACLlF,UAAW9B,GAASoG,IAAgBC,IAAkBC,GAAeG,SAAA,iBAQjF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var t={date:"DD
|
|
1
|
+
var t={date:"MMM DD YYYY",dateTime:"MMM DD YYYY hh:mm A",month:"MMMM YYYY"},e={date:"MM/DD/YYYY",dateTime:"MM/DD/YYYY hh:mm A",month:"MMM YYYY"},l=function(l,n){return(n?e:t)[l]},n=["D","M","Y","h","m","s","S"],i=[].concat(n,["A"]),u=new RegExp("^([^".concat(i.join(""),"]+)"),"gi"),Y={month:"MM/YYYY",date:"MM/DD/YYYY",dateTime:"MM/DD/YYYY hh:mm A"},r={month:[Y.month,"MMMM YYYY","MMM YYYY"],date:[Y.date,"M/D/YYYY"],dateTime:[Y.dateTime,"M/D/YYYY hh:mm A"]},a=function(t){var e=t.value,l=t.type,i=t.range,r=t.prevValue,a=Y[l],o=i?"".concat(a," - ").concat(a):a,M=e.toLocaleLowerCase().replace(/([ap])m/gi,"$1");if(e.length<=r.length||!function(t,e){return e.length<=t.length&&e.split("").every((function(e,l){var i,u=t[l];if(n.includes(u))return null==(i=e)?void 0:i.match(/\d/);if("A"===u){var Y=e.toLocaleLowerCase();return"a"===Y||"p"===Y}return u===e}))}(o,M)||o.length<=M.length)return e;var c=function(t,e){var l;return(null===(l=t.substring(e).match(u))||void 0===l?void 0:l[0])||""}(o,M.length);return"".concat(e).concat(c)},o=function(t,e){return!!t&&!!e&&t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()},M=function(t,e){return o(t,e)&&(null==t?void 0:t.getDate())===(null==e?void 0:e.getDate())},c=function(t,e){return t&&e?t<e?t:e:t||e},d=function(t,e){return t&&e?t>e?t:e:t||e},h=[{id:1,title:"Jan",fullTitle:"January"},{id:2,title:"Feb",fullTitle:"February"},{id:3,title:"Mar",fullTitle:"March"},{id:4,title:"Apr",fullTitle:"April"},{id:5,title:"May",fullTitle:"May"},{id:6,title:"Jun",fullTitle:"June"},{id:7,title:"Jul",fullTitle:"July"},{id:8,title:"Aug",fullTitle:"August"},{id:9,title:"Sep",fullTitle:"September"},{id:10,title:"Oct",fullTitle:"October"},{id:11,title:"Nov",fullTitle:"November"},{id:12,title:"Dec",fullTitle:"December"}],g=function(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate(),(null==e?void 0:e.getHours())||0,(null==e?void 0:e.getMinutes())||0,(null==e?void 0:e.getSeconds())||0)};export{t as DefaultFormatByType,e as DefaultFormatByTypeRange,Y as InputAutocompleteFormats,r as InputParseFormats,h as MonthOptions,a as autocompleteValue,g as getDateWithSameTime,l as getDefaultFormat,d as getMaxDate,c as getMinDate,M as isSameDay,o as isSameMonth};
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/componentsV2/DatePicker/utils.tsx"],"sourcesContent":["export type DatePickerType = 'date' | 'dateTime' | 'month';\n\nexport type DatePickerValue<IsRange extends boolean | undefined = false> = IsRange extends\n | undefined\n | false\n ? Date | undefined\n : [Date, Date] | undefined;\n\nexport type DatePickerChangeHandler<IsRange extends boolean | undefined = false> = (\n value: DatePickerValue<IsRange>\n) => void;\n\n// startDate - initial state, no start date selected\n// endDate - start done, no end date selected\nexport type RangeSelectionStep = 'startDate' | 'endDate';\n\nexport const DefaultFormatByType: Record<DatePickerType, string> = {\n date: 'DD
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/componentsV2/DatePicker/utils.tsx"],"sourcesContent":["export type DatePickerType = 'date' | 'dateTime' | 'month';\n\nexport type DatePickerValue<IsRange extends boolean | undefined = false> = IsRange extends\n | undefined\n | false\n ? Date | undefined\n : [Date, Date] | undefined;\n\nexport type DatePickerChangeHandler<IsRange extends boolean | undefined = false> = (\n value: DatePickerValue<IsRange>\n) => void;\n\n// startDate - initial state, no start date selected\n// endDate - start done, no end date selected\nexport type RangeSelectionStep = 'startDate' | 'endDate';\n\nexport const DefaultFormatByType: Record<DatePickerType, string> = {\n date: 'MMM DD YYYY',\n dateTime: 'MMM DD YYYY hh:mm A',\n month: 'MMMM YYYY',\n};\n\nexport const DefaultFormatByTypeRange: Record<DatePickerType, string> = {\n date: 'MM/DD/YYYY',\n dateTime: 'MM/DD/YYYY hh:mm A',\n month: 'MMM YYYY',\n};\n\nexport const getDefaultFormat = (type: DatePickerType, range?: boolean) => {\n const map = range ? DefaultFormatByTypeRange : DefaultFormatByType;\n return map[type];\n};\n\nconst NumericLetters = ['D', 'M', 'Y', 'h', 'm', 's', 'S'];\nconst AllLetters = [...NumericLetters, 'A'];\nconst GetSeparatorRegex = new RegExp(`^([^${AllLetters.join('')}]+)`, 'gi');\n\n// These formats should be composed only of `AllLetters` as placeholders only\nexport const InputAutocompleteFormats: Record<DatePickerType, string> = {\n month: 'MM/YYYY',\n date: 'MM/DD/YYYY',\n dateTime: 'MM/DD/YYYY hh:mm A',\n};\n\nexport const InputParseFormats: Record<DatePickerType, string[]> = {\n month: [InputAutocompleteFormats.month, 'MMMM YYYY', 'MMM YYYY'],\n date: [InputAutocompleteFormats.date, 'M/D/YYYY'],\n dateTime: [InputAutocompleteFormats.dateTime, 'M/D/YYYY hh:mm A'],\n};\n\nconst isDigit = (symbol?: string) => symbol?.match(/\\d/);\n\nconst isInFormatSoFar = (format: string, value: string) => {\n if (value.length <= format.length) {\n const valueArr = value.split('');\n\n return valueArr.every((valueChar, pos) => {\n const formatChar = format[pos];\n\n if (NumericLetters.includes(formatChar)) {\n return isDigit(valueChar);\n }\n\n if (formatChar === 'A') {\n const lcChar = valueChar.toLocaleLowerCase();\n return lcChar === 'a' || lcChar === 'p';\n }\n\n return formatChar === valueChar;\n });\n }\n\n return false;\n};\n\nconst getSeparator = (format: string, startIndex: number) => {\n return format.substring(startIndex).match(GetSeparatorRegex)?.[0] || '';\n};\n\nexport const autocompleteValue = ({\n value,\n type,\n range,\n prevValue,\n}: {\n type: DatePickerType;\n range?: boolean;\n value: string;\n prevValue: string;\n}) => {\n const formatPart = InputAutocompleteFormats[type];\n const format = range ? `${formatPart} - ${formatPart}` : formatPart;\n\n const preparedValue = value.toLocaleLowerCase().replace(/([ap])m/gi, '$1');\n\n if (\n value.length <= prevValue.length ||\n !isInFormatSoFar(format, preparedValue) ||\n format.length <= preparedValue.length\n ) {\n return value;\n }\n\n // Only autocomplete if user types something\n // Check if conforms to format so far\n // Adding separators if needed\n const separator = getSeparator(format, preparedValue.length);\n\n return `${value}${separator}`;\n};\n\nexport const isSameMonth = (a?: Date, b?: Date) =>\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n\nexport const isSameDay = (a?: Date, b?: Date) => isSameMonth(a, b) && a?.getDate() === b?.getDate();\n\nexport const getMinDate = (a?: Date, b?: Date) => {\n if (a && b) {\n return a < b ? a : b;\n }\n\n return a || b;\n};\n\nexport const getMaxDate = (a?: Date, b?: Date) => {\n if (a && b) {\n return a > b ? a : b;\n }\n\n return a || b;\n};\n\nexport const MonthOptions = [\n { id: 1, title: 'Jan', fullTitle: 'January' },\n { id: 2, title: 'Feb', fullTitle: 'February' },\n { id: 3, title: 'Mar', fullTitle: 'March' },\n { id: 4, title: 'Apr', fullTitle: 'April' },\n { id: 5, title: 'May', fullTitle: 'May' },\n { id: 6, title: 'Jun', fullTitle: 'June' },\n { id: 7, title: 'Jul', fullTitle: 'July' },\n { id: 8, title: 'Aug', fullTitle: 'August' },\n { id: 9, title: 'Sep', fullTitle: 'September' },\n { id: 10, title: 'Oct', fullTitle: 'October' },\n { id: 11, title: 'Nov', fullTitle: 'November' },\n { id: 12, title: 'Dec', fullTitle: 'December' },\n];\n\nexport type DatePickerCalendarView = 'year' | 'month';\n\nexport const getDateWithSameTime = (date: Date, timeDate?: Date) =>\n new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n timeDate?.getHours() || 0,\n timeDate?.getMinutes() || 0,\n timeDate?.getSeconds() || 0\n );\n"],"names":["DefaultFormatByType","date","dateTime","month","DefaultFormatByTypeRange","getDefaultFormat","type","range","NumericLetters","AllLetters","concat","GetSeparatorRegex","RegExp","join","InputAutocompleteFormats","InputParseFormats","autocompleteValue","_ref","value","prevValue","formatPart","format","preparedValue","toLocaleLowerCase","replace","length","split","every","valueChar","pos","symbol","formatChar","includes","match","lcChar","isInFormatSoFar","separator","startIndex","_format$substring$mat","substring","getSeparator","isSameMonth","a","b","getFullYear","getMonth","isSameDay","getDate","getMinDate","getMaxDate","MonthOptions","id","title","fullTitle","getDateWithSameTime","timeDate","Date","getHours","getMinutes","getSeconds"],"mappings":"AAgBO,IAAMA,EAAsD,CACjEC,KAAM,cACNC,SAAU,sBACVC,MAAO,aAGIC,EAA2D,CACtEH,KAAM,aACNC,SAAU,qBACVC,MAAO,YAGIE,EAAmB,SAACC,EAAsBC,GAErD,OADYA,EAAQH,EAA2BJ,GACpCM,EACb,EAEME,EAAiB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChDC,EAAU,GAAAC,OAAOF,EAAc,CAAE,MACjCG,EAAoB,IAAIC,OAAcH,OAAAA,OAAAA,EAAWI,KAAK,IAAG,OAAO,MAGzDC,EAA2D,CACtEX,MAAO,UACPF,KAAM,aACNC,SAAU,sBAGCa,EAAsD,CACjEZ,MAAO,CAACW,EAAyBX,MAAO,YAAa,YACrDF,KAAM,CAACa,EAAyBb,KAAM,YACtCC,SAAU,CAACY,EAAyBZ,SAAU,qBAgCnCc,EAAoB,SAU3BC,GAAA,IATJC,IAAAA,MACAZ,IAAAA,KACAC,IAAAA,MACAY,IAAAA,UAOMC,EAAaN,EAAyBR,GACtCe,EAASd,EAAK,GAAAG,OAAMU,EAAgBA,OAAAA,OAAAA,GAAeA,EAEnDE,EAAgBJ,EAAMK,oBAAoBC,QAAQ,YAAa,MAErE,GACEN,EAAMO,QAAUN,EAAUM,SA5CN,SAACJ,EAAgBH,GACvC,OAAIA,EAAMO,QAAUJ,EAAOI,QACRP,EAAMQ,MAAM,IAEbC,OAAM,SAACC,EAAWC,GAChC,IAPWC,EAOLC,EAAaV,EAAOQ,GAE1B,GAAIrB,EAAewB,SAASD,GAC1B,OAV6BD,OAApBA,EAUMF,QAVoB,EAANE,EAAQG,MAAM,MAa7C,GAAmB,MAAfF,EAAoB,CACtB,IAAMG,EAASN,EAAUL,oBACzB,MAAkB,MAAXW,GAA6B,MAAXA,CAC3B,CAEA,OAAOH,IAAeH,CACxB,GAIJ,CAwBKO,CAAgBd,EAAQC,IACzBD,EAAOI,QAAUH,EAAcG,OAE/B,OAAOP,EAMT,IAAMkB,EA/Ba,SAACf,EAAgBgB,GAAuB,IAAAC,EAC3D,OAA4D,UAArDjB,EAAOkB,UAAUF,GAAYJ,MAAMtB,UAAkB,IAAA2B,OAAA,EAArDA,EAAwD,KAAM,EACvE,CA6BoBE,CAAanB,EAAQC,EAAcG,QAErD,MAAUP,GAAAA,OAAAA,UAAQkB,EACpB,EAEaK,EAAc,SAACC,EAAUC,GAAQ,QAC1CD,KAAOC,GAAKD,EAAEE,gBAAkBD,EAAEC,eAAiBF,EAAEG,aAAeF,EAAEE,UAAU,EAEvEC,EAAY,SAACJ,EAAUC,GAAQ,OAAKF,EAAYC,EAAGC,KAAMD,aAAC,EAADA,EAAGK,cAAcJ,aAAAA,EAAAA,EAAGI,UAAS,EAEtFC,EAAa,SAACN,EAAUC,GACnC,OAAID,GAAKC,EACAD,EAAIC,EAAID,EAAIC,EAGdD,GAAKC,CACd,EAEaM,EAAa,SAACP,EAAUC,GACnC,OAAID,GAAKC,EACAD,EAAIC,EAAID,EAAIC,EAGdD,GAAKC,CACd,EAEaO,EAAe,CAC1B,CAAEC,GAAI,EAAGC,MAAO,MAAOC,UAAW,WAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,YAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,SAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,SAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,OAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,QAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,QAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,UAClC,CAAEF,GAAI,EAAGC,MAAO,MAAOC,UAAW,aAClC,CAAEF,GAAI,GAAIC,MAAO,MAAOC,UAAW,WACnC,CAAEF,GAAI,GAAIC,MAAO,MAAOC,UAAW,YACnC,CAAEF,GAAI,GAAIC,MAAO,MAAOC,UAAW,aAKxBC,EAAsB,SAACrD,EAAYsD,GAAe,OAC7D,IAAIC,KACFvD,EAAK2C,cACL3C,EAAK4C,WACL5C,EAAK8C,WACLQ,aAAAA,EAAAA,EAAUE,aAAc,GACxBF,aAAAA,EAAAA,EAAUG,eAAgB,GAC1BH,aAAQ,EAARA,EAAUI,eAAgB,EAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/componentsV2/Modal/Modal.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAe,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAM/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;IAC3D,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,kBAAkB,KAAK,IAAI,CAAC;IAC/E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/componentsV2/Modal/Modal.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAe,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAM/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;IAC3D,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,kBAAkB,KAAK,IAAI,CAAC;IAC/E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAwDF,eAAO,MAAM,KAAK,UAAW,UAAU,4CAOtC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"@babel/runtime/helpers/defineProperty";import o from"@babel/runtime/helpers/objectWithoutProperties";import{Modal as r}from"@material-ui/core";import{useCallback as t}from"react";import n from"classnames";import{useDelayedDcFullscreenElemOpen as s}from"../../effects/useDelayedDcFullscreenElemOpen.js";import{useIsInsideDcFullscreenElem as c,IsInsideDcFullscreenElemProvider as i}from"../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider.js";import{useIsInsideIsolatedDcApp as p}from"../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js";import{ModalWindow as l}from"../ModalWindow/ModalWindow.js";import{MODAL_ROOT_CLASS as a}from"./constants.js";import m from"./Modal.scss.js";import{jsx as u}from"react/jsx-runtime";var f=["open","onClose","size","showCloseButton","closeOnBackdropClick","closeOnEscape"],d=["open"];function O(e,o){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),r.push.apply(r,t)}return r}function b(o){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?O(Object(t),!0).forEach((function(r){e(o,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(t)):O(Object(t)).forEach((function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(t,e))}))}return o}var v=function(e){var s=e.open,c=e.onClose,i=e.size,p=void 0===i?"medium":i,d=e.showCloseButton,O=void 0===d||d,v=e.closeOnBackdropClick,j=void 0===v||v,C=e.closeOnEscape,y=void 0===C||C,D=o(e,f),P=t((function(e,o){c&&("backdropClick"===o&&j&&c("backdropClick"),"escapeKeyDown"===o&&y&&c("escapeKey"))}),[c,j,y]),h=t((function(){null==c||c("closeButtonClick")}),[c]);return u(r,{open:s,className:n(a,m.root),onClose:P,children:u(l,b(b({},D),{},{onClose:h,showCloseButton:O,size:p}))})},j=function(e){var r=e.open,t=o(e,d),n=s({isOpen:r},!0).delayedIsOpen;return u(i,{children:u(v,b({open:n},t))})},C=function(e){var o=p(),r=c();return u(o&&!r?j:v,b({},e))};export{C as Modal};
|
|
1
|
+
import e from"@babel/runtime/helpers/defineProperty";import o from"@babel/runtime/helpers/objectWithoutProperties";import{Modal as r}from"@material-ui/core";import{useCallback as t}from"react";import n from"classnames";import{useDelayedDcFullscreenElemOpen as s}from"../../effects/useDelayedDcFullscreenElemOpen.js";import{useIsInsideDcFullscreenElem as c,IsInsideDcFullscreenElemProvider as i}from"../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider.js";import{useIsInsideIsolatedDcApp as p}from"../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js";import{ModalWindow as l}from"../ModalWindow/ModalWindow.js";import{MODAL_ROOT_CLASS as a}from"./constants.js";import m from"./Modal.scss.js";import{jsx as u}from"react/jsx-runtime";var f=["open","onClose","size","showCloseButton","closeOnBackdropClick","closeOnEscape"],d=["open"];function O(e,o){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),r.push.apply(r,t)}return r}function b(o){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?O(Object(t),!0).forEach((function(r){e(o,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(t)):O(Object(t)).forEach((function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(t,e))}))}return o}var v=function(e){var s=e.open,c=e.onClose,i=e.size,p=void 0===i?"medium":i,d=e.showCloseButton,O=void 0===d||d,v=e.closeOnBackdropClick,j=void 0===v||v,C=e.closeOnEscape,y=void 0===C||C,D=o(e,f),P=t((function(e,o){c&&("backdropClick"===o&&j&&c("backdropClick"),"escapeKeyDown"===o&&y&&c("escapeKey"))}),[c,j,y]),h=t((function(){null==c||c("closeButtonClick")}),[c]);return u(r,{open:s,className:n(a,m.root),onClose:P,disableEnforceFocus:!0,children:u(l,b(b({},D),{},{onClose:h,showCloseButton:O,size:p}))})},j=function(e){var r=e.open,t=o(e,d),n=s({isOpen:r},!0).delayedIsOpen;return u(i,{children:u(v,b({open:n},t))})},C=function(e){var o=p(),r=c();return u(o&&!r?j:v,b({},e))};export{C as Modal};
|
|
2
2
|
//# sourceMappingURL=Modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../src/componentsV2/Modal/Modal.tsx"],"sourcesContent":["// TODO Move these hooks to better place so the imports won't be as hideous\nimport { Modal as MuiModal, ModalProps as MuiModalProps } from '@material-ui/core';\nimport { useCallback } from 'react';\nimport classNames from 'classnames';\n\nimport { useDelayedDcFullscreenElemOpen } from '../../effects/useDelayedDcFullscreenElemOpen';\nimport {\n IsInsideDcFullscreenElemProvider,\n useIsInsideDcFullscreenElem,\n} from '../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider';\nimport { useIsInsideIsolatedDcApp } from '../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { ModalWindow, ModalWindowProps } from '../ModalWindow';\n\nimport { MODAL_ROOT_CLASS } from './constants';\n\nimport styles from './Modal.scss';\n\nexport type ModalProps = Omit<ModalWindowProps, 'onClose'> & {\n open: boolean;\n onClose?: (reason: 'backdropClick' | 'escapeKey' | 'closeButtonClick') => void;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n};\n\nconst ActualModal = ({\n open,\n onClose,\n size = 'medium',\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n ...restProps\n}: ModalProps) => {\n const modalCloseHandler = useCallback<Required<MuiModalProps>['onClose']>(\n (_event, reason) => {\n if (onClose) {\n if (reason === 'backdropClick' && closeOnBackdropClick) {\n onClose('backdropClick');\n }\n if (reason === 'escapeKeyDown' && closeOnEscape) {\n onClose('escapeKey');\n }\n }\n },\n [onClose, closeOnBackdropClick, closeOnEscape]\n );\n\n const closeButtonClickHandler = useCallback(() => {\n onClose?.('closeButtonClick');\n }, [onClose]);\n\n return (\n <MuiModal\n open={open}\n className={classNames(MODAL_ROOT_CLASS, styles.root)}\n onClose={modalCloseHandler}\n >\n <ModalWindow\n {...restProps}\n onClose={closeButtonClickHandler}\n showCloseButton={showCloseButton}\n size={size}\n />\n </MuiModal>\n );\n};\n\nconst DcModal = ({ open: openProp, ...otherProps }: ModalProps) => {\n const { delayedIsOpen } = useDelayedDcFullscreenElemOpen({ isOpen: openProp }, true);\n\n return (\n <IsInsideDcFullscreenElemProvider>\n <ActualModal open={delayedIsOpen} {...otherProps} />\n </IsInsideDcFullscreenElemProvider>\n );\n};\n\nexport const Modal = (props: ModalProps) => {\n const isInsideDcApp = useIsInsideIsolatedDcApp();\n const isInsideDcFullscreenElem = useIsInsideDcFullscreenElem();\n\n const ModalComponent = isInsideDcApp && !isInsideDcFullscreenElem ? DcModal : ActualModal;\n\n return <ModalComponent {...props} />;\n};\n"],"names":["ActualModal","_ref","open","onClose","_ref$size","size","_ref$showCloseButton","showCloseButton","_ref$closeOnBackdropC","closeOnBackdropClick","_ref$closeOnEscape","closeOnEscape","restProps","_objectWithoutProperties","_excluded","modalCloseHandler","useCallback","_event","reason","closeButtonClickHandler","_jsx","MuiModal","className","classNames","MODAL_ROOT_CLASS","styles","root","children","ModalWindow","_objectSpread","DcModal","_ref2","openProp","otherProps","_excluded2","delayedIsOpen","useDelayedDcFullscreenElemOpen","isOpen","IsInsideDcFullscreenElemProvider","Modal","props","isInsideDcApp","useIsInsideIsolatedDcApp","isInsideDcFullscreenElem","useIsInsideDcFullscreenElem"],"mappings":"q/CAwBA,IAAMA,EAAc,SAQFC,GAAA,IAPhBC,IAAAA,KACAC,IAAAA,QAAOC,EAAAH,EACPI,KAAAA,aAAO,SAAQD,EAAAE,EAAAL,EACfM,gBAAAA,cAAsBD,EAAAE,EAAAP,EACtBQ,qBAAAA,cAA2BD,EAAAE,EAAAT,EAC3BU,cAAAA,cAAoBD,EACjBE,EAASC,EAAAZ,EAAAa,GAENC,EAAoBC,GACxB,SAACC,EAAQC,GACHf,IACa,kBAAXe,GAA8BT,GAChCN,EAAQ,iBAEK,kBAAXe,GAA8BP,GAChCR,EAAQ,aAGb,GACD,CAACA,EAASM,EAAsBE,IAG5BQ,EAA0BH,GAAY,WAC1Cb,SAAAA,EAAU,mBACZ,GAAG,CAACA,IAEJ,OACEiB,EAACC,EAAQ,CACPnB,KAAMA,EACNoB,UAAWC,EAAWC,EAAkBC,EAAOC,MAC/CvB,QAASY,
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../src/componentsV2/Modal/Modal.tsx"],"sourcesContent":["// TODO Move these hooks to better place so the imports won't be as hideous\nimport { Modal as MuiModal, ModalProps as MuiModalProps } from '@material-ui/core';\nimport { useCallback } from 'react';\nimport classNames from 'classnames';\n\nimport { useDelayedDcFullscreenElemOpen } from '../../effects/useDelayedDcFullscreenElemOpen';\nimport {\n IsInsideDcFullscreenElemProvider,\n useIsInsideDcFullscreenElem,\n} from '../../components/DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider';\nimport { useIsInsideIsolatedDcApp } from '../../components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { ModalWindow, ModalWindowProps } from '../ModalWindow';\n\nimport { MODAL_ROOT_CLASS } from './constants';\n\nimport styles from './Modal.scss';\n\nexport type ModalProps = Omit<ModalWindowProps, 'onClose'> & {\n open: boolean;\n onClose?: (reason: 'backdropClick' | 'escapeKey' | 'closeButtonClick') => void;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n};\n\nconst ActualModal = ({\n open,\n onClose,\n size = 'medium',\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n ...restProps\n}: ModalProps) => {\n const modalCloseHandler = useCallback<Required<MuiModalProps>['onClose']>(\n (_event, reason) => {\n if (onClose) {\n if (reason === 'backdropClick' && closeOnBackdropClick) {\n onClose('backdropClick');\n }\n if (reason === 'escapeKeyDown' && closeOnEscape) {\n onClose('escapeKey');\n }\n }\n },\n [onClose, closeOnBackdropClick, closeOnEscape]\n );\n\n const closeButtonClickHandler = useCallback(() => {\n onClose?.('closeButtonClick');\n }, [onClose]);\n\n return (\n <MuiModal\n open={open}\n className={classNames(MODAL_ROOT_CLASS, styles.root)}\n onClose={modalCloseHandler}\n disableEnforceFocus\n >\n <ModalWindow\n {...restProps}\n onClose={closeButtonClickHandler}\n showCloseButton={showCloseButton}\n size={size}\n />\n </MuiModal>\n );\n};\n\nconst DcModal = ({ open: openProp, ...otherProps }: ModalProps) => {\n const { delayedIsOpen } = useDelayedDcFullscreenElemOpen({ isOpen: openProp }, true);\n\n return (\n <IsInsideDcFullscreenElemProvider>\n <ActualModal open={delayedIsOpen} {...otherProps} />\n </IsInsideDcFullscreenElemProvider>\n );\n};\n\nexport const Modal = (props: ModalProps) => {\n const isInsideDcApp = useIsInsideIsolatedDcApp();\n const isInsideDcFullscreenElem = useIsInsideDcFullscreenElem();\n\n const ModalComponent = isInsideDcApp && !isInsideDcFullscreenElem ? DcModal : ActualModal;\n\n return <ModalComponent {...props} />;\n};\n"],"names":["ActualModal","_ref","open","onClose","_ref$size","size","_ref$showCloseButton","showCloseButton","_ref$closeOnBackdropC","closeOnBackdropClick","_ref$closeOnEscape","closeOnEscape","restProps","_objectWithoutProperties","_excluded","modalCloseHandler","useCallback","_event","reason","closeButtonClickHandler","_jsx","MuiModal","className","classNames","MODAL_ROOT_CLASS","styles","root","disableEnforceFocus","children","ModalWindow","_objectSpread","DcModal","_ref2","openProp","otherProps","_excluded2","delayedIsOpen","useDelayedDcFullscreenElemOpen","isOpen","IsInsideDcFullscreenElemProvider","Modal","props","isInsideDcApp","useIsInsideIsolatedDcApp","isInsideDcFullscreenElem","useIsInsideDcFullscreenElem"],"mappings":"q/CAwBA,IAAMA,EAAc,SAQFC,GAAA,IAPhBC,IAAAA,KACAC,IAAAA,QAAOC,EAAAH,EACPI,KAAAA,aAAO,SAAQD,EAAAE,EAAAL,EACfM,gBAAAA,cAAsBD,EAAAE,EAAAP,EACtBQ,qBAAAA,cAA2BD,EAAAE,EAAAT,EAC3BU,cAAAA,cAAoBD,EACjBE,EAASC,EAAAZ,EAAAa,GAENC,EAAoBC,GACxB,SAACC,EAAQC,GACHf,IACa,kBAAXe,GAA8BT,GAChCN,EAAQ,iBAEK,kBAAXe,GAA8BP,GAChCR,EAAQ,aAGb,GACD,CAACA,EAASM,EAAsBE,IAG5BQ,EAA0BH,GAAY,WAC1Cb,SAAAA,EAAU,mBACZ,GAAG,CAACA,IAEJ,OACEiB,EAACC,EAAQ,CACPnB,KAAMA,EACNoB,UAAWC,EAAWC,EAAkBC,EAAOC,MAC/CvB,QAASY,EACTY,qBAAmB,EAAAC,SAEnBR,EAACS,EAAWC,EAAAA,EAAA,GACNlB,GAAS,GAAA,CACbT,QAASgB,EACTZ,gBAAiBA,EACjBF,KAAMA,MAId,EAEM0B,EAAU,SAAmDC,GAAA,IAA1CC,IAAN/B,KAAmBgC,EAAUrB,EAAAmB,EAAAG,GACtCC,EAAkBC,EAA+B,CAAEC,OAAQL,IAAY,GAAvEG,cAER,OACEhB,EAACmB,EAAgC,CAAAX,SAC/BR,EAACpB,EAAW8B,EAAA,CAAC5B,KAAMkC,GAAmBF,KAG5C,EAEaM,EAAQ,SAACC,GACpB,IAAMC,EAAgBC,IAChBC,EAA2BC,IAIjC,OAAOzB,EAFgBsB,IAAkBE,EAA2Bb,EAAU/B,EAEnDyC,EAAAA,CAAAA,EAAAA,GAC7B"}
|