@stack-spot/portal-layout 2.3.2 → 2.4.1-rc

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.0](https://github.com/stack-spot/portal-commons/compare/portal-layout@v2.3.2...portal-layout@v2.4.0) (2024-08-08)
4
+
5
+
6
+ ### Features
7
+
8
+ * support for new nps experience ([337560c](https://github.com/stack-spot/portal-commons/commit/337560c8abb819677e0eebaf1786f0db75a14ccd))
9
+
3
10
  ## [2.3.2](https://github.com/stack-spot/portal-commons/compare/portal-layout@v2.3.1...portal-layout@v2.3.2) (2024-08-02)
4
11
 
5
12
 
@@ -1,2 +1,2 @@
1
- export declare function useRatingEffect(): void;
1
+ export declare function useRatingEffect(onOpenModal?: () => void): void;
2
2
  //# sourceMappingURL=hook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/components/Rate/hook.tsx"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,SAI9B"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/components/Rate/hook.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,QAsBvD"}
@@ -7,9 +7,36 @@ const loadScript = () => new Promise((resolve, reject) => {
7
7
  script.onerror = (error) => reject(error);
8
8
  document.body.appendChild(script);
9
9
  });
10
- export function useRatingEffect() {
10
+ // Function to check if the difference between two dates is greater than 24 hours
11
+ function isMoreThan24Hours(date1, date2) {
12
+ // Get the timestamps of the dates
13
+ const timestamp1 = date1.getTime();
14
+ const timestamp2 = date2.getTime();
15
+ // Calculate the difference in milliseconds
16
+ const differenceInMilliseconds = Math.abs(timestamp2 - timestamp1);
17
+ // Convert milliseconds to hours
18
+ const differenceInHours = differenceInMilliseconds / (1000 * 60);
19
+ // Check if the difference is greater than 24 hours
20
+ return differenceInHours >= 2;
21
+ }
22
+ export function useRatingEffect(onOpenModal) {
23
+ const verifyShowModal = () => {
24
+ const rateNpsItem = localStorage.getItem('rateNps');
25
+ const viewNpsItem = localStorage.getItem('viewNpsItem');
26
+ const shouldShow = viewNpsItem ? isMoreThan24Hours(new Date(+viewNpsItem), new Date(Date.now())) : true;
27
+ setTimeout(() => {
28
+ if (!rateNpsItem && shouldShow) {
29
+ onOpenModal?.();
30
+ localStorage.setItem('viewNpsItem', Date.now().toString());
31
+ }
32
+ }, 3000);
33
+ };
34
+ const handleInit = async () => {
35
+ await loadScript();
36
+ verifyShowModal();
37
+ };
11
38
  useEffectOnce(() => {
12
- loadScript();
39
+ handleInit();
13
40
  });
14
41
  }
15
42
  //# sourceMappingURL=hook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/components/Rate/hook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAA;IAChE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAC/B,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe;IAC7B,aAAa,CAAC,GAAG,EAAE;QACjB,UAAU,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/components/Rate/hook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAA;IAChE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAC/B,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC,CAAC,CAAA;AAEF,iFAAiF;AACjF,SAAS,iBAAiB,CAAC,KAAW,EAAE,KAAW;IACjD,kCAAkC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;IAElC,2CAA2C;IAC3C,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAA;IAElE,gCAAgC;IAChC,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IAEhE,mDAAmD;IACnD,OAAO,iBAAiB,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAwB;IACtD,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACvD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEvG,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC;gBAC/B,WAAW,EAAE,EAAE,CAAA;gBACf,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,MAAM,UAAU,EAAE,CAAA;QAClB,eAAe,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,aAAa,CAAC,GAAG,EAAE;QACjB,UAAU,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import './on-nps-submit.js';
1
2
  interface Props {
2
3
  tfLive: string;
3
4
  userId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Rate/index.tsx"],"names":[],"mappings":"AAIA,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,sCAAuC,KAAK,4CAoBrE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Rate/index.tsx"],"names":[],"mappings":"AAGA,OAAO,iBAAiB,CAAA;AAExB,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,sCAAuC,KAAK,4CAoBrE,CAAA"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Flex } from '@citric/core';
3
3
  import { LoadingCircular } from '@citric/ui';
4
4
  import { useEffect, useState } from 'react';
5
+ import './on-nps-submit.js';
5
6
  export const RateComponent = ({ tfLive, userId, orgId, portal }) => {
6
7
  const [isLoading, setIsLoading] = useState(true);
7
8
  useEffect(() => {
@@ -10,6 +11,6 @@ export const RateComponent = ({ tfLive, userId, orgId, portal }) => {
10
11
  setIsLoading(false);
11
12
  }, 2000);
12
13
  }, []);
13
- return (_jsxs(Box, { sx: { minWidth: '650px', minHeight: '500px' }, children: [isLoading && _jsx(Flex, { alignItems: "center", justifyContent: "center", w: "12", sx: { height: '100%' }, children: _jsx(LoadingCircular, {}) }), _jsx(Box, { sx: { opacity: isLoading ? '0' : 1 }, children: _jsx("div", { "data-tf-live": tfLive, "data-tf-hidden": `user_id=${userId},org_id=${orgId},portal_name=${portal}`, "data-tf-open": "time", "data-tf-open-value": "100" }) })] }));
14
+ return (_jsxs(Box, { sx: { minWidth: '650px', minHeight: '500px' }, children: [isLoading && _jsx(Flex, { alignItems: "center", justifyContent: "center", w: "12", sx: { height: '100%' }, children: _jsx(LoadingCircular, {}) }), _jsx(Box, { sx: { opacity: isLoading ? '0' : 1 }, children: _jsx("div", { "data-tf-live": tfLive, "data-tf-hidden": `user_id=${userId},org_id=${orgId},portal_name=${portal}`, "data-tf-open": "time", "data-tf-open-value": "100", "data-tf-on-submit": "onNpsSubmit" }) })] }));
14
15
  };
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Rate/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAS3C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAS,EAAE,EAAE;IACxE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEhD,SAAS,CAAC,GAAG,EAAE;QACZ,MAAc,CAAC,EAAE,EAAE,IAAI,EAAE,CAAA;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CAAC,MAAC,GAAG,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aACvD,SAAS,IAAI,KAAC,IAAI,IAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAC3F,KAAC,eAAe,KAAG,GACd,EACP,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YACvC,8BAAmB,MAAM,oBACP,WAAW,MAAM,WAAW,KAAK,gBAAgB,MAAM,EAAE,kBAC5D,MAAM,wBAAoB,KAAK,GAAG,GAC7C,IACF,CAAC,CAAA;AACT,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Rate/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,iBAAiB,CAAA;AASxB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAS,EAAE,EAAE;IACxE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEhD,SAAS,CAAC,GAAG,EAAE;QACZ,MAAc,CAAC,EAAE,EAAE,IAAI,EAAE,CAAA;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CAAC,MAAC,GAAG,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aACvD,SAAS,IAAI,KAAC,IAAI,IAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAC3F,KAAC,eAAe,KAAG,GACd,EACP,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YACvC,8BAAmB,MAAM,oBACP,WAAW,MAAM,WAAW,KAAK,gBAAgB,MAAM,EAAE,kBAC5D,MAAM,wBAAoB,KAAK,uBAAmB,aAAa,GAAE,GAC5E,IACF,CAAC,CAAA;AACT,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export {};
2
+ declare global {
3
+ interface Window {
4
+ onNpsSubmit: () => void;
5
+ }
6
+ }
7
+ //# sourceMappingURL=on-nps-submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-nps-submit.d.ts","sourceRoot":"","sources":["../../../src/components/Rate/on-nps-submit.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAA;AAGT,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB;CACF"}
@@ -0,0 +1,6 @@
1
+ function onNpsSubmit() {
2
+ localStorage.setItem('rateNps', 'true');
3
+ }
4
+ window.onNpsSubmit = onNpsSubmit;
5
+ export {};
6
+ //# sourceMappingURL=on-nps-submit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-nps-submit.js","sourceRoot":"","sources":["../../../src/components/Rate/on-nps-submit.ts"],"names":[],"mappings":"AAAA,SAAS,WAAW;IAClB,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AACzC,CAAC;AAWD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const showRatingModal: (sub: string, tenant: string, portal: 'EDP' | 'AI', formIdentifier: string, title: string) => void;
2
+ //# sourceMappingURL=show-rating-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-rating-modal.d.ts","sourceRoot":"","sources":["../../../src/components/Rate/show-rating-modal.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,QAAS,MAAM,UAAU,MAAM,UAAU,KAAK,GAAG,IAAI,kBAAkB,MAAM,SAAS,MAAM,SAMvH,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { overlay } from '../../LayoutOverlayManager.js';
3
+ import { RateComponent } from './index.js';
4
+ export const showRatingModal = (sub, tenant, portal, formIdentifier, title) => {
5
+ overlay.showModal({
6
+ title,
7
+ children: _jsx(RateComponent, { tfLive: formIdentifier, userId: sub, orgId: tenant, portal: portal }),
8
+ size: 'large',
9
+ });
10
+ };
11
+ //# sourceMappingURL=show-rating-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-rating-modal.js","sourceRoot":"","sources":["../../../src/components/Rate/show-rating-modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,CAAA;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,MAAc,EAAE,MAAoB,EAAE,cAAsB,EAAE,KAAa,EAAE,EAAE;IAC1H,OAAO,CAAC,SAAS,CAAC;QAChB,KAAK;QACL,QAAQ,EAAE,KAAC,aAAa,IAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI;QAC/F,IAAI,EAAE,OAAO;KACd,CAAC,CAAA;AACJ,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export { CLOSE_OVERLAY_ID, OverlayContent } from './components/OverlayContent.js
7
7
  export { PortalSwitcher } from './components/PortalSwitcher.js';
8
8
  export { RateComponent } from './components/Rate/index.js';
9
9
  export { useRatingEffect } from './components/Rate/hook.js';
10
+ export { showRatingModal } from './components/Rate/show-rating-modal.js';
10
11
  export { RatePopover } from './components/Rate/RatePopover.js';
11
12
  export * from './components/tour/index.js';
12
13
  export * from './components/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,cAAc,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export { CLOSE_OVERLAY_ID, OverlayContent } from './components/OverlayContent.js
7
7
  export { PortalSwitcher } from './components/PortalSwitcher.js';
8
8
  export { RateComponent } from './components/Rate/index.js';
9
9
  export { useRatingEffect } from './components/Rate/hook.js';
10
+ export { showRatingModal } from './components/Rate/show-rating-modal.js';
10
11
  export { RatePopover } from './components/Rate/RatePopover.js';
11
12
  export * from './components/tour/index.js';
12
13
  export * from './components/types.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,cAAc,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/portal-layout",
3
- "version": "2.3.2",
3
+ "version": "2.4.1-rc",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,8 +9,42 @@ const loadScript = () => new Promise<void>((resolve, reject) => {
9
9
  document.body.appendChild(script)
10
10
  })
11
11
 
12
- export function useRatingEffect() {
12
+ // Function to check if the difference between two dates is greater than 24 hours
13
+ function isMoreThan24Hours(date1: Date, date2: Date) {
14
+ // Get the timestamps of the dates
15
+ const timestamp1 = date1.getTime()
16
+ const timestamp2 = date2.getTime()
17
+
18
+ // Calculate the difference in milliseconds
19
+ const differenceInMilliseconds = Math.abs(timestamp2 - timestamp1)
20
+
21
+ // Convert milliseconds to hours
22
+ const differenceInHours = differenceInMilliseconds / (1000 * 60)
23
+
24
+ // Check if the difference is greater than 24 hours
25
+ return differenceInHours >= 2
26
+ }
27
+
28
+ export function useRatingEffect(onOpenModal?: () => void) {
29
+ const verifyShowModal = () => {
30
+ const rateNpsItem = localStorage.getItem('rateNps')
31
+ const viewNpsItem = localStorage.getItem('viewNpsItem')
32
+ const shouldShow = viewNpsItem ? isMoreThan24Hours(new Date(+viewNpsItem), new Date(Date.now())) : true
33
+
34
+ setTimeout(() => {
35
+ if (!rateNpsItem && shouldShow) {
36
+ onOpenModal?.()
37
+ localStorage.setItem('viewNpsItem', Date.now().toString())
38
+ }
39
+ }, 3000)
40
+ }
41
+
42
+ const handleInit = async () => {
43
+ await loadScript()
44
+ verifyShowModal()
45
+ }
46
+
13
47
  useEffectOnce(() => {
14
- loadScript()
48
+ handleInit()
15
49
  })
16
50
  }
@@ -1,6 +1,7 @@
1
1
  import { Box, Flex } from '@citric/core'
2
2
  import { LoadingCircular } from '@citric/ui'
3
3
  import { useEffect, useState } from 'react'
4
+ import './on-nps-submit'
4
5
 
5
6
  interface Props {
6
7
  tfLive: string,
@@ -26,7 +27,7 @@ export const RateComponent = ({ tfLive, userId, orgId, portal }: Props) => {
26
27
  <Box sx={{ opacity: isLoading ? '0' : 1 }}>
27
28
  <div data-tf-live={tfLive}
28
29
  data-tf-hidden={`user_id=${userId},org_id=${orgId},portal_name=${portal}`}
29
- data-tf-open="time" data-tf-open-value="100" />
30
+ data-tf-open="time" data-tf-open-value="100" data-tf-on-submit="onNpsSubmit"/>
30
31
  </Box>
31
32
  </Box>)
32
33
  }
@@ -0,0 +1,14 @@
1
+ function onNpsSubmit(): void {
2
+ localStorage.setItem('rateNps', 'true')
3
+ }
4
+
5
+ export {}
6
+
7
+ // Attach the function to the window object
8
+ declare global {
9
+ interface Window {
10
+ onNpsSubmit: () => void,
11
+ }
12
+ }
13
+
14
+ window.onNpsSubmit = onNpsSubmit
@@ -0,0 +1,10 @@
1
+ import { overlay } from '../../LayoutOverlayManager'
2
+ import { RateComponent } from '.'
3
+
4
+ export const showRatingModal = (sub: string, tenant: string, portal: 'EDP' | 'AI', formIdentifier: string, title: string) => {
5
+ overlay.showModal({
6
+ title,
7
+ children: <RateComponent tfLive={formIdentifier} userId={sub} orgId={tenant} portal={portal} />,
8
+ size: 'large',
9
+ })
10
+ }
package/src/index.ts CHANGED
@@ -7,6 +7,7 @@ export { CLOSE_OVERLAY_ID, OverlayContent } from './components/OverlayContent'
7
7
  export { PortalSwitcher } from './components/PortalSwitcher'
8
8
  export { RateComponent } from './components/Rate'
9
9
  export { useRatingEffect } from './components/Rate/hook'
10
+ export { showRatingModal } from './components/Rate/show-rating-modal'
10
11
  export { RatePopover } from './components/Rate/RatePopover'
11
12
  export * from './components/tour'
12
13
  export * from './components/types'