@shopgate/engage 7.27.2-beta.3 → 7.27.2-beta.5

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.
@@ -4,6 +4,11 @@ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj
4
4
  * @param {Object} props The component props.
5
5
  * @param {boolean} [props.hideOnScroll] Toggle hide-on-scroll (default: true).
6
6
  * @param {number} [props.scrollOffset] Pixels to scroll before toggling (default: 100).
7
+ * @param {boolean} [props.onlyShowAtTop] When set to true, the component content will not be shown
8
+ * till the user scrolls to the top of the page again.
9
+ * @param {number} [props.onlyShowAtTopOffset] Pixel threshold from the top of the page at which the
10
+ * component content will reappear when `showOnScrollToTop` is enabled. The content shows again once
11
+ * the scroll position is less than or equal to this value.
7
12
  * @param {Function} [props.onChange] Callback function that is called when the header changes
8
13
  * @param {string} [props.className] Extra CSS classes on the root element.
9
14
  * @param {Object} [props.classes] Override internal class names.
@@ -15,4 +20,4 @@ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj
15
20
  * @param {React.ReactNode} props.children Content of the header.
16
21
  * @param {React.Ref<HTMLDivElement>} ref Forwarded ref to the header `<div>`.
17
22
  * @returns {JSX.Element}
18
- */function ScrollHeaderBase(_ref,ref){var className=_ref.className,children=_ref.children,_ref$hideOnScroll=_ref.hideOnScroll,hideOnScroll=_ref$hideOnScroll===void 0?true:_ref$hideOnScroll,_ref$scrollOffset=_ref.scrollOffset,scrollOffset=_ref$scrollOffset===void 0?100:_ref$scrollOffset,onChange=_ref.onChange,classes=_ref.classes;var _useState=useState(false),_useState2=_slicedToArray(_useState,2),shouldHideHeader=_useState2[0],setShouldHideHeader=_useState2[1];useScrollDirectionChange({enabled:hideOnScroll,offset:scrollOffset,onScrollDown:function onScrollDown(){setShouldHideHeader(true);},onScrollUp:function onScrollUp(){setShouldHideHeader(false);}});useEffect(function(){if(typeof onChange!=='function'){return;}onChange(!shouldHideHeader);},[onChange,shouldHideHeader]);return React.createElement("div",{ref:ref,className:classNames(root,transition,className,_defineProperty(_defineProperty({},classNames(scrolledIn,classes===null||classes===void 0?void 0:classes.scrolledIn),!shouldHideHeader),classNames(scrolledOut,classes===null||classes===void 0?void 0:classes.scrolledOut),shouldHideHeader))},children);}/* eslint-enable react/prop-types */var ScrollHeader=forwardRef(ScrollHeaderBase);ScrollHeader.displayName='ScrollHeader';ScrollHeader.propTypes={children:PropTypes.node.isRequired,classes:PropTypes.shape({scrolledIn:PropTypes.string,scrolledOut:PropTypes.string}),className:PropTypes.string,hideOnScroll:PropTypes.bool,onChange:PropTypes.func,scrollOffset:PropTypes.number};ScrollHeader.defaultProps={className:null,hideOnScroll:true,scrollOffset:100,classes:{},onChange:null};export default ScrollHeader;
23
+ */function ScrollHeaderBase(_ref,ref){var className=_ref.className,children=_ref.children,_ref$hideOnScroll=_ref.hideOnScroll,hideOnScroll=_ref$hideOnScroll===void 0?true:_ref$hideOnScroll,_ref$scrollOffset=_ref.scrollOffset,scrollOffset=_ref$scrollOffset===void 0?100:_ref$scrollOffset,_ref$onlyShowAtTop=_ref.onlyShowAtTop,onlyShowAtTop=_ref$onlyShowAtTop===void 0?false:_ref$onlyShowAtTop,_ref$onlyShowAtTopOff=_ref.onlyShowAtTopOffset,onlyShowAtTopOffset=_ref$onlyShowAtTopOff===void 0?0:_ref$onlyShowAtTopOff,onChange=_ref.onChange,classes=_ref.classes;var _useState=useState(false),_useState2=_slicedToArray(_useState,2),shouldHideHeader=_useState2[0],setShouldHideHeader=_useState2[1];useScrollDirectionChange({enabled:hideOnScroll,offset:scrollOffset,onlyFireOnScrollUpAtTop:onlyShowAtTop,onlyFireOnScrollUpAtTopOffset:onlyShowAtTopOffset,onScrollDown:function onScrollDown(){setShouldHideHeader(true);},onScrollUp:function onScrollUp(){setShouldHideHeader(false);}});useEffect(function(){if(typeof onChange!=='function'){return;}onChange(!shouldHideHeader);},[onChange,shouldHideHeader]);return React.createElement("div",{ref:ref,className:classNames(root,transition,className,_defineProperty(_defineProperty({},classNames(scrolledIn,classes===null||classes===void 0?void 0:classes.scrolledIn),!shouldHideHeader),classNames(scrolledOut,classes===null||classes===void 0?void 0:classes.scrolledOut),shouldHideHeader))},children);}/* eslint-enable react/prop-types */var ScrollHeader=forwardRef(ScrollHeaderBase);ScrollHeader.displayName='ScrollHeader';ScrollHeader.propTypes={children:PropTypes.node.isRequired,classes:PropTypes.shape({scrolledIn:PropTypes.string,scrolledOut:PropTypes.string}),className:PropTypes.string,hideOnScroll:PropTypes.bool,onChange:PropTypes.func,onlyShowAtTop:PropTypes.bool,onlyShowAtTopOffset:PropTypes.number,scrollOffset:PropTypes.number};ScrollHeader.defaultProps={className:null,hideOnScroll:true,scrollOffset:100,classes:{},onChange:null,onlyShowAtTop:false,onlyShowAtTopOffset:0};export default ScrollHeader;
@@ -43,6 +43,20 @@ export interface UseScrollDirectionChangeParams {
43
43
  */
44
44
  onlyFireOnDirectionChange?: boolean;
45
45
 
46
+ /**
47
+ * If true, onScrollUp fires only when scrollTop is below or equal to
48
+ * `onlyFireOnScrollUpAtTopOffset`.
49
+ * @default false
50
+ */
51
+ onlyFireOnScrollUpAtTop?: boolean;
52
+
53
+ /**
54
+ * Maximum scrollTop at which `onScrollUp` may fire when
55
+ * `onlyFireOnScrollUpAtTop` is true.
56
+ * @default 0
57
+ */
58
+ onlyFireOnScrollUpAtTopOffset?: number;
59
+
46
60
  /** Callback triggered on scroll up */
47
61
  onScrollUp?: ScrollCallback;
48
62
 
@@ -6,11 +6,13 @@ import{useEffect,useRef,useCallback}from'react';import{viewScroll$}from'@shopgat
6
6
  * UI elements based on scroll behavior.
7
7
  *
8
8
  * @param {UseScrollDirectionChangeParams} params The hook parameters
9
- */export default function useScrollDirectionChange(_ref){var enabled=_ref.enabled,_ref$offset=_ref.offset,offset=_ref$offset===void 0?100:_ref$offset,_ref$onlyFireOnDirect=_ref.onlyFireOnDirectionChange,onlyFireOnDirectionChange=_ref$onlyFireOnDirect===void 0?true:_ref$onlyFireOnDirect,onScrollUp=_ref.onScrollUp,onScrollDown=_ref.onScrollDown;var lastDirectionRef=useRef(null);var downTriggeredRef=useRef(false);var upTriggeredRef=useRef(false);/**
9
+ */export default function useScrollDirectionChange(_ref){var enabled=_ref.enabled,_ref$offset=_ref.offset,offset=_ref$offset===void 0?100:_ref$offset,_ref$onlyFireOnDirect=_ref.onlyFireOnDirectionChange,onlyFireOnDirectionChange=_ref$onlyFireOnDirect===void 0?true:_ref$onlyFireOnDirect,_ref$onlyFireOnScroll=_ref.onlyFireOnScrollUpAtTop,onlyFireOnScrollUpAtTop=_ref$onlyFireOnScroll===void 0?false:_ref$onlyFireOnScroll,_ref$onlyFireOnScroll2=_ref.onlyFireOnScrollUpAtTopOffset,onlyFireOnScrollUpAtTopOffset=_ref$onlyFireOnScroll2===void 0?0:_ref$onlyFireOnScroll2,onScrollUp=_ref.onScrollUp,onScrollDown=_ref.onScrollDown;var lastDirectionRef=useRef(null);var downTriggeredRef=useRef(false);var upTriggeredRef=useRef(false);/**
10
10
  * Scroll event handler.
11
11
  * Uses `event.direction` and triggers callbacks accordingly.
12
12
  */var handleScroll=useCallback(/** @param {ViewScrollEvent} event The event */function(event){if(!enabled||!event.scrolled||!event.direction)return;var scrollTop=event.scrollTop,direction=event.direction;var prevDirection=lastDirectionRef.current;var directionChanged=direction!==prevDirection;// Store current direction and reset flags if direction changed
13
- if(directionChanged){lastDirectionRef.current=direction;if(direction==='down')downTriggeredRef.current=false;if(direction==='up')upTriggeredRef.current=false;}// 🔽 Handle downward scroll
13
+ if(directionChanged){// @ts-expect-error
14
+ lastDirectionRef.current=direction;if(direction==='down')downTriggeredRef.current=false;if(direction==='up')upTriggeredRef.current=false;}// 🔽 Handle downward scroll
14
15
  if(direction==='down'){var shouldFire=(!onlyFireOnDirectionChange||directionChanged||!downTriggeredRef.current)&&scrollTop>=offset;if(shouldFire&&typeof onScrollDown==='function'){downTriggeredRef.current=true;// Strip internal/legacy properties
15
16
  var scrollIn=event.scrollIn,scrollOut=event.scrollOut,scrolled=event.scrolled,publicEvent=_objectWithoutProperties(event,_excluded);onScrollDown(publicEvent);}}// 🔼 Handle upward scroll
16
- if(direction==='up'){var _shouldFire=!onlyFireOnDirectionChange||directionChanged||!upTriggeredRef.current;if(_shouldFire&&typeof onScrollUp==='function'){upTriggeredRef.current=true;var _scrollIn=event.scrollIn,_scrollOut=event.scrollOut,_scrolled=event.scrolled,_publicEvent=_objectWithoutProperties(event,_excluded2);onScrollUp(_publicEvent);}}},[enabled,offset,onlyFireOnDirectionChange,onScrollUp,onScrollDown]);useEffect(function(){if(!enabled)return undefined;var subscription=viewScroll$.subscribe(handleScroll);return function(){return subscription.unsubscribe();};},[enabled,handleScroll]);}
17
+ if(direction==='up'){// if user wants “only fire at the very top” and we’re not at 0, skip
18
+ if(onlyFireOnScrollUpAtTop&&scrollTop>onlyFireOnScrollUpAtTopOffset){return;}var _shouldFire=!onlyFireOnDirectionChange||directionChanged||!upTriggeredRef.current;if(_shouldFire&&typeof onScrollUp==='function'){upTriggeredRef.current=true;var _scrollIn=event.scrollIn,_scrollOut=event.scrollOut,_scrolled=event.scrolled,_publicEvent=_objectWithoutProperties(event,_excluded2);onScrollUp(_publicEvent);}}},[enabled,onlyFireOnDirectionChange,offset,onScrollDown,onlyFireOnScrollUpAtTop,onlyFireOnScrollUpAtTopOffset,onScrollUp]);useEffect(function(){if(!enabled)return undefined;var subscription=viewScroll$.subscribe(handleScroll);return function(){return subscription.unsubscribe();};},[enabled,handleScroll]);}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopgate/engage",
3
- "version": "7.27.2-beta.3",
3
+ "version": "7.27.2-beta.5",
4
4
  "description": "Shopgate's ENGAGE library.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Shopgate <support@shopgate.com>",
@@ -16,12 +16,12 @@
16
16
  ],
17
17
  "dependencies": {
18
18
  "@shopgate/native-modules": "1.0.0-beta.25",
19
- "@shopgate/pwa-common": "7.27.2-beta.3",
20
- "@shopgate/pwa-common-commerce": "7.27.2-beta.3",
21
- "@shopgate/pwa-core": "7.27.2-beta.3",
22
- "@shopgate/pwa-ui-ios": "7.27.2-beta.3",
23
- "@shopgate/pwa-ui-material": "7.27.2-beta.3",
24
- "@shopgate/pwa-ui-shared": "7.27.2-beta.3",
19
+ "@shopgate/pwa-common": "7.27.2-beta.5",
20
+ "@shopgate/pwa-common-commerce": "7.27.2-beta.5",
21
+ "@shopgate/pwa-core": "7.27.2-beta.5",
22
+ "@shopgate/pwa-ui-ios": "7.27.2-beta.5",
23
+ "@shopgate/pwa-ui-material": "7.27.2-beta.5",
24
+ "@shopgate/pwa-ui-shared": "7.27.2-beta.5",
25
25
  "@stripe/react-stripe-js": "^1.16.5",
26
26
  "@stripe/stripe-js": "^1.3.1",
27
27
  "@virtuous/conductor": "~2.5.0",