UNPKG

@guruhotel/aura-hooks

Version:

🪝 Hooks library designed by the Guruhotel team for Aura UI

1 lines 1.19 kB
exports.__esModule=!0,exports.useUndo=exports.default=void 0;var e,t=require("react");!function(e){e.Undo="UNDO",e.Redo="REDO",e.Set="SET",e.Reset="RESET"}(e||(e={}));const s={past:[],present:null,future:[]},n=(n,r={})=>{const{useCheckpoints:u}={useCheckpoints:!1,...r},[o,p]=(0,t.useReducer)(((t,s)=>{const{past:n,present:r,future:o}=t;switch(s.type){case e.Undo:{if(0===n.length)return t;const e=n[n.length-1];return{past:n.slice(0,n.length-1),present:e,future:[r,...o]}}case e.Redo:{if(0===o.length)return t;const e=o[0],s=o.slice(1);return{past:[...n,r],present:e,future:s}}case e.Set:{const e=!u||!!s.historyCheckpoint,{newPresent:o}=s;return o===r?t:{past:!1===e?n:[...n,r],present:o,future:[]}}case e.Reset:{const{newPresent:e}=s;return{past:[],present:e,future:[]}}}}),{...s,present:n}),c=0!==o.past.length,a=0!==o.future.length,l=(0,t.useCallback)((()=>{c&&p({type:e.Undo})}),[c]),d=(0,t.useCallback)((()=>{a&&p({type:e.Redo})}),[a]);return[o,{set:(0,t.useCallback)(((t,s=!1)=>{p({type:e.Set,newPresent:t,historyCheckpoint:s})}),[]),reset:(0,t.useCallback)((t=>p({type:e.Reset,newPresent:t})),[]),undo:l,redo:d,canUndo:c,canRedo:a}]};exports.useUndo=n;var r=n;exports.default=r;