@gsretail.com/gui-core
Version:
A skeleton to create your own React component library using Rollup, TypeScript, Sass and Storybook
2 lines (1 loc) • 2.41 kB
JavaScript
import e from"../../../../@babel/runtime/helpers/esm/extends.js";import*as a from"react";import{useOpenState as t}from"./useOpenState.js";import{useUtils as l}from"./useUtils.js";const s=(s,o)=>{const{onAccept:n,onChange:c,value:r,closeOnSelect:u}=s,i=l(),{isOpen:p,setIsOpen:d}=t(s),m=a.useMemo((()=>o.parseInput(i,r)),[o,i,r]),[C,v]=a.useState(m),[f,h]=a.useState((()=>({committed:m,draft:m,resetFallback:m}))),g=a.useCallback((a=>{h((t=>{switch(a.action){case"setAll":case"acceptAndClose":return{draft:a.value,committed:a.value,resetFallback:a.value};case"setCommitted":return e({},t,{draft:a.value,committed:a.value});case"setDraft":return e({},t,{draft:a.value});default:return t}})),(a.forceOnChangeCall||!a.skipOnChangeCall&&!o.areValuesEqual(i,f.committed,a.value))&&c(a.value),"acceptAndClose"===a.action&&(d(!1),n&&!o.areValuesEqual(i,f.resetFallback,a.value)&&n(a.value))}),[n,c,d,f,i,o]);a.useEffect((()=>{i.isValid(m)&&v(m)}),[i,m]),a.useEffect((()=>{p&&g({action:"setAll",value:m,skipOnChangeCall:!0})}),[p]),o.areValuesEqual(i,f.committed,m)||g({action:"setCommitted",value:m,skipOnChangeCall:!0});const k=a.useMemo((()=>({open:p,onClear:()=>{g({value:o.emptyValue,action:"acceptAndClose",forceOnChangeCall:!o.areValuesEqual(i,r,o.emptyValue)})},onAccept:()=>{g({value:f.draft,action:"acceptAndClose",forceOnChangeCall:!o.areValuesEqual(i,r,m)})},onDismiss:()=>{g({value:f.committed,action:"acceptAndClose"})},onCancel:()=>{g({value:f.resetFallback,action:"acceptAndClose"})},onSetToday:()=>{g({value:o.getTodayValue(i),action:"acceptAndClose"})}})),[g,p,i,f,o,r,m]),[V,b]=a.useState(!1),A=a.useMemo((()=>({parsedValue:f.draft,isMobileKeyboardViewOpen:V,toggleMobileKeyboardView:()=>b(!V),onDateChange:(e,a,t="partial")=>{switch(t){case"shallow":return g({action:"setDraft",value:e,skipOnChangeCall:!0});case"partial":return g({action:"setDraft",value:e});case"finish":return g((null!=u?u:"desktop"===a)?{value:e,action:"acceptAndClose"}:{value:e,action:"setCommitted"});default:throw new Error("MUI: Invalid selectionState passed to `onDateChange`")}}})),[g,V,f.draft,u]),O=a.useCallback(((e,a)=>{const t=o.valueReducer?o.valueReducer(i,C,e):e;c(t,a)}),[c,o,C,i]),w={pickerProps:A,inputProps:a.useMemo((()=>({onChange:O,open:p,rawValue:r,openPicker:()=>d(!0)})),[O,p,r,d]),wrapperProps:k};return a.useDebugValue(w,(()=>({MuiPickerState:{dateState:f,other:w}}))),w};export{s as usePickerState};