@davi-ai/retorik-framework 3.2.2 → 3.2.4
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/dist/{AttachmentDetail.1e06c2a5.js → AttachmentDetail.cfd86776.js} +2 -3
- package/dist/AttachmentDetail.cfd86776.js.map +1 -0
- package/dist/{AttachmentDetail.c6c297df.js → AttachmentDetail.fdcd1737.js} +2 -3
- package/dist/AttachmentDetail.fdcd1737.js.map +1 -0
- package/dist/{CustomView.080c8028.js → CustomView.ba7af9b6.js} +2 -3
- package/dist/CustomView.ba7af9b6.js.map +1 -0
- package/dist/{CustomView.90d2a13d.js → CustomView.c24a0e74.js} +2 -3
- package/dist/CustomView.c24a0e74.js.map +1 -0
- package/dist/{Emergency.a21f837c.js → Emergency.0cf005ce.js} +2 -3
- package/dist/Emergency.0cf005ce.js.map +1 -0
- package/dist/{Emergency.423214ad.js → Emergency.897ee3c7.js} +2 -3
- package/dist/Emergency.897ee3c7.js.map +1 -0
- package/dist/{HistoryList.5fd6aa12.js → HistoryList.03a56119.js} +3 -7
- package/dist/HistoryList.03a56119.js.map +1 -0
- package/dist/{HistoryList.50ff0fd9.js → HistoryList.4c303dc6.js} +3 -7
- package/dist/HistoryList.4c303dc6.js.map +1 -0
- package/dist/{LanguageChoice.61e36c1d.js → LanguageChoice.623ee802.js} +2 -5
- package/dist/LanguageChoice.623ee802.js.map +1 -0
- package/dist/{LanguageChoice.1579b654.js → LanguageChoice.ff0cd04c.js} +2 -5
- package/dist/LanguageChoice.ff0cd04c.js.map +1 -0
- package/dist/{NewsContainer.67f04b19.js → NewsContainer.05bb1b19.js} +9 -9
- package/dist/NewsContainer.05bb1b19.js.map +1 -0
- package/dist/{NewsContainer.932174e9.js → NewsContainer.5e80336b.js} +9 -9
- package/dist/NewsContainer.5e80336b.js.map +1 -0
- package/dist/{Weather.661c2cac.js → Weather.99917b66.js} +2 -3
- package/dist/Weather.99917b66.js.map +1 -0
- package/dist/{Weather.fb22fba3.js → Weather.cf58823d.js} +2 -3
- package/dist/Weather.cf58823d.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +348 -564
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +332 -556
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
- package/dist/AttachmentDetail.1e06c2a5.js.map +0 -1
- package/dist/AttachmentDetail.c6c297df.js.map +0 -1
- package/dist/CustomView.080c8028.js.map +0 -1
- package/dist/CustomView.90d2a13d.js.map +0 -1
- package/dist/Emergency.423214ad.js.map +0 -1
- package/dist/Emergency.a21f837c.js.map +0 -1
- package/dist/HistoryList.50ff0fd9.js.map +0 -1
- package/dist/HistoryList.5fd6aa12.js.map +0 -1
- package/dist/LanguageChoice.1579b654.js.map +0 -1
- package/dist/LanguageChoice.61e36c1d.js.map +0 -1
- package/dist/NewsContainer.67f04b19.js.map +0 -1
- package/dist/NewsContainer.932174e9.js.map +0 -1
- package/dist/Weather.661c2cac.js.map +0 -1
- package/dist/Weather.fb22fba3.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAM,sCAAgB;AACtB,MAAM,4CAAsB;AAE5B,MAAM,mCAAa,CAAC,cAAE,UAAU,SAAE,KAAK,QAAE,IAAI,sBAAE,kBAAkB,WAAE,OAAO,6BAAE,yBAAyB,EAAmB;IACtH,MAAM,cAAc,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,mBAAmB;IACvE,MAAM,SAAS,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,MAAM;IACrD,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE,CAAC,QAAU,MAAM,QAAQ;IACvD,MAAM,kBAAkB,CAAA,GAAA,mBAAW,EAAE,CAAC,QAAU,MAAM,eAAe;IACrE,MAAM,oBAAoB,CAAA,GAAA,oBAAY,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,iBAAiB;IAClF,MAAM,YAAY,CAAA,GAAA,yBAAiB,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IAEvE,MAAM,aAAa;QACjB,UAAU,oBAAoB,MAAM,IAAM,UAAU,QAAQ,CAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,KAAK,GAAG,0BAA0B;QACtI,kBAAkB,CAAA,GAAA,qBAAa,EAAE,IAAI;QACrC,0BAA0B;IAC5B;IAEA,MAAM,qBAAkC,CAAA,GAAA,cAAM,EAAE;QAC9C,IAAI,YAAY,QACd;YAAA,IAAI,oBAAoB;gBACtB,MAAM,YAAY,mBAAmB,IAAI,CAAC,CAAC,IAAM,EAAE,IAAI,KAAK;gBAC5D,IAAI,WAAW,WACb,OAAO,UAAU,SAAS;YAE9B;QAAA;QAEF,qBAAO;IACT,GAAG;QAAC;KAAW;IAEf,qBACE,iBAAC,CAAA,GAAA,iBAAS;QAAE,WAAW,GAAG,CAAC,WAAW,YAAY,CAAC,EAAE,YAAY,kBAAkB,aAAa,WAAW;QAAE,OAAO,CAAA,GAAA,YAAI,EAAE,KAAK;QAAE,YAAW;QAAU,SAAS;;0BAE7J,iBAAC;gBAAI,WAAU;;kCAEb,iBAAC;wBAAI,WAAU;;0CACb,gBAAC,CAAA,GAAA,iBAAS;gCAAE,OAAO,YAAY,MAAM,CAAC,IAAI;gCAAE,WAAU;gCAAa,YAAY;;0CAC/E,iBAAC;gCAAI,WAAU;;oCACZ,qBAAO,iBAAC;wCAAI,WAAW;;4CAAsB;4CAAK;;uDAAU;kDAC7D,gBAAC;wCAAI,WAAU;kDAA+D,QAAQ,CAAA,GAAA,4BAAoB,EAAE,OAAO,wBAAU;;;;;;kCAIjI,iBAAC;wBAAI,WAAU;;4BACZ,qBAAO,iBAAC;gCAAI,WAAW;;oCAAgB;oCAAK;;+CAAU;0CACvD,gBAAC;gCAAI,WAAU;0CAA8D,QAAQ,CAAA,GAAA,4BAAoB,EAAE,OAAO,wBAAU;;;;;;YAI/H;0BAGD,gBAAC,CAAA,GAAA,cAAyB;gBAAE,gBAAgB;gBAAC,iBAAiB;gBAAM,SAAS;;;;AAGnF;IAEA,2CAAe","sources":["src/components/Views/CustomView.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\n\r\nimport { CurrentSubView, Depth } from '../../models/enums'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\nimport { FullScreen } from '../Templates'\r\nimport { BackButton } from '../Menu/Common'\r\nimport AbsoluteLargeClosingButton from '../Utils/SubView/AbsoluteLargeClosingButton'\r\n\r\ninterface CustomViewProps {\r\n customView?: string\r\n title?: string\r\n icon?: JSX.Element\r\n externalComponents?: Array<{ name: string; component: JSX.Element }>\r\n display?: boolean\r\n setDisplayCustomComponent: (value: boolean) => void\r\n}\r\n\r\nconst iconClassname = 'rf-h-16 rf-w-16 large-vertical:rf-h-24 large-vertical:rf-w-24'\r\nconst iconClassnameMobile = 'rf-h-8 rf-w-8'\r\n\r\nconst CustomView = ({ customView, title, icon, externalComponents, display, setDisplayCustomComponent }: CustomViewProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const displayControls = useViewStore((state) => state.displayControls)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const handleBack = (): void => {\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent(title ? `Davi.CloseWindow${title.replace(/\\s/g, '')}` : 'Davi.CloseWindowCustom', null))\r\n setCurrentSubView(CurrentSubView.none)\r\n setDisplayCustomComponent(false)\r\n }\r\n\r\n const componentToDisplay: JSX.Element = useMemo(() => {\r\n if (customView?.length) {\r\n if (externalComponents) {\r\n const component = externalComponents.find((e) => e.name === customView)\r\n if (component?.component) {\r\n return component.component\r\n }\r\n }\r\n }\r\n return <></>\r\n }, [customView])\r\n\r\n return (\r\n <FullScreen className={`${!display && 'rf-hidden'} ${isMobile && displayControls ? 'rf-mb-12' : 'rf-mb-0'}`} depth={Depth.modal} background='#FFFFFF' onClick={handleBack}>\r\n {/* title */}\r\n <div className='rf-absolute rf-z-[1] rf-w-full rf-top-0 ltr:rf-left-0 rtl:rf-right-0'>\r\n {/* Mobile display */}\r\n <div className='large:rf-hidden rf-p-4 rf-flex rf-flex-col'>\r\n <BackButton title={translation.common.back} className='rf-text-sm' handleBack={handleBack} />\r\n <div className='large:rf-hidden rf-py-2 rf-flex rf-flex-row rf-items-end undefined'>\r\n {icon ? <div className={iconClassnameMobile}>{icon} </div> : <></>}\r\n <div className='ltr:rf-ml-2 rtl:rf-mr-2 rf-capitalize rf-subtitle-size-auto'>{title ? capitalizeFirstLetter(title, locale) : <></>}</div>\r\n </div>\r\n </div>\r\n\r\n <div className='rf-hidden large:rf-flex rf-w-full rf-pt-4 large-vertical:rf-pt-8 ltr:rf-pl-4 rtl:rf-pr-4 large-vertical:ltr:rf-pl-0 large-vertical:rtl:rf-pr-0 rf-flex-row rf-justify-start large-vertical:rf-justify-center rf-items-center'>\r\n {icon ? <div className={iconClassname}>{icon} </div> : <></>}\r\n <div className='ltr:rf-ml-2 rtl:rf-mr-2 rf-uppercase rf-subtitle-size-auto'>{title ? capitalizeFirstLetter(title, locale) : <></>}</div>\r\n </div>\r\n </div>\r\n\r\n {componentToDisplay}\r\n\r\n {/* Closing button in large mode */}\r\n <AbsoluteLargeClosingButton dashboardVisible customComponent={true} onClick={handleBack} />\r\n </FullScreen>\r\n )\r\n}\r\n\r\nexport default CustomView\r\n"],"names":[],"version":3,"file":"CustomView.c24a0e74.js.map"}
|
|
@@ -40,8 +40,7 @@ const $118d706fda813ce5$var$Emergency = ({ handleClose: handleClose })=>{
|
|
|
40
40
|
const sendEvent = (0, $aNpqK.useDirectlineStore)((state)=>state.actions.sendEvent);
|
|
41
41
|
const handleBack = ()=>{
|
|
42
42
|
handleClose ? handleClose() : setCurrentSubView((0, $4ucVo.CurrentSubView).none);
|
|
43
|
-
sendEvent('Davi.CloseWindow', null);
|
|
44
|
-
sendEvent('Davi.CloseWindowEmergency', null);
|
|
43
|
+
sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowEmergency', null));
|
|
45
44
|
};
|
|
46
45
|
return isMobile ? /*#__PURE__*/ (0, $J4lYy$jsx)((0, $gQ55S.SubMenuClosing), {
|
|
47
46
|
handleClose: handleBack,
|
|
@@ -289,4 +288,4 @@ const $cfe5ac7fc315188e$export$6478e9f7582bd8fc = ()=>{
|
|
|
289
288
|
|
|
290
289
|
|
|
291
290
|
|
|
292
|
-
//# sourceMappingURL=Emergency.
|
|
291
|
+
//# sourceMappingURL=Emergency.0cf005ce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/components/Emergency/Emergency.tsx","src/components/Emergency/EmergencyContent.tsx"],"sourcesContent":["import React from 'react'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\nimport { CurrentSubView, Depth } from '../../models/enums'\r\nimport { FullScreen, SubMenuClosing } from '../Templates'\r\nimport AbsoluteLargeClosingButton from '../Utils/SubView/AbsoluteLargeClosingButton'\r\nimport { EmergencyContent } from './EmergencyContent'\r\n\r\ninterface EmergencyProps {\r\n handleClose?: () => void\r\n}\r\n\r\nconst Emergency = ({ handleClose }: EmergencyProps): JSX.Element => {\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const handleBack = (): void => {\r\n handleClose ? handleClose() : setCurrentSubView(CurrentSubView.none)\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowEmergency', null))\r\n }\r\n\r\n return isMobile ? (\r\n <SubMenuClosing handleClose={handleBack} backIsConversation={false} className='rf-height-fill-available -rf-mb-4'>\r\n {/* Emergency data */}\r\n <EmergencyContent />\r\n </SubMenuClosing>\r\n ) : (\r\n <FullScreen depth={Depth.dropdown} background='linear-gradient(to right bottom, #F2F8F8FC , #F2E1E2E8)' onClick={handleBack}>\r\n <div className='rf-h-full rf-w-full rf-flex rf-flex-col rf-items-center rf-justify-center rf-gap-12'>\r\n {/* Emergency data */}\r\n <EmergencyContent />\r\n </div>\r\n\r\n {/* Closing button */}\r\n <AbsoluteLargeClosingButton dashboardVisible={true} onClick={handleBack} />\r\n </FullScreen>\r\n )\r\n}\r\n\r\nexport default Emergency\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { useRetorikStore } from '../Contexts/RetorikContext'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { fetchEmergencyData } from '../../utils/fetchEmergencyData'\r\nimport { EmergencyTypes } from '../../models/emergencyTypes'\r\nimport * as Icons from '../Icons/ViewIcons'\r\nimport { AvailableViews } from '../../models/enums'\r\nimport Animation2 from '../Loader/Animation2'\r\nimport preventEvents from '../../utils/preventEvents'\r\n\r\nconst subView = AvailableViews.emergency\r\n\r\nconst EmergencyContent = (): JSX.Element => {\r\n const baseAddress = useRetorikStore((state) => state.baseAddress)\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const isWidget = useViewStore((state) => state.isWidget)\r\n\r\n const [municipalPoliceNumber, setMunicipalPoliceNumber] = useState<string>('')\r\n const [localHospitalName, setLocalHospitalName] = useState<string>('')\r\n const [localHospitalNumber, setLocalHospitalNumber] = useState<string>('')\r\n const [poisonControlNumber, setPoisonControlNumber] = useState<string>('')\r\n const [loading, setLoading] = useState<boolean>(true)\r\n const divRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (divRef?.current) {\r\n isWidget && preventEvents(null, divRef)\r\n }\r\n }, [divRef?.current])\r\n\r\n useEffect(() => {\r\n const getData = async (): Promise<void> => {\r\n const data: EmergencyTypes = await fetchEmergencyData(baseAddress)\r\n if (data) {\r\n setMunicipalPoliceNumber(data.municipalPoliceNumber)\r\n setLocalHospitalName(data.localHospitalName)\r\n setLocalHospitalNumber(data.localHospitalNumber)\r\n setPoisonControlNumber(data.poisonControlNumber)\r\n }\r\n setLoading(false)\r\n }\r\n getData()\r\n }, [baseAddress])\r\n\r\n return (\r\n <>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile\r\n ? 'rf-justify-center rf-gap-2'\r\n : 'rf-justify-end rf-flex-[2_1_0%] rf-gap-9'\r\n }`}\r\n >\r\n <Icons.EmergencyIcon className='rf-h-9 rf-w-9 large:rf-h-16 large:rf-w-16' />\r\n <h3 className='rf-text-verylarge-size-auto rf-font-bold rf-capitalize-first rf-text-center'>\r\n {translation.emergency[subView]}\r\n </h3>\r\n </div>\r\n <div\r\n ref={divRef}\r\n className='rf-w-full rf-flex rf-flex-col rf-items-center rf-flex-[4_1_0%] rf-justify-evenly rf-h-full rf-pt-2 rf-overflow-y-scroll rf-scrollbar-hidden'\r\n style={{\r\n background: isMobile\r\n ? 'transparent'\r\n : 'transparent linear-gradient(291deg, #F2F3F6 0%, #E5E6EC 100%) 0% 0% no-repeat padding-box',\r\n boxShadow: isMobile\r\n ? ''\r\n : '#ffff -3px -3px 16px, rgb(0 0 0 / 25%) 0px 2px 10px 0px'\r\n }}\r\n >\r\n {loading ? (\r\n <>\r\n <div className='rf-w-6 rf-h-6 rf-mb-16'>\r\n <Animation2\r\n color='gray'\r\n loaderColor='#1999b1'\r\n backgroundColor='transparent'\r\n />\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n <div\r\n className={`rf-w-full rf-grid ${\r\n isMobile\r\n ? 'rf-grid-cols-2 rf-gap-8 rf-mt-10 rf-mb-8'\r\n : 'rf-grid-cols-4 rf-divide-x'\r\n } `}\r\n style={{ padding: isMobile ? '' : '0 10%' }}\r\n >\r\n <div className='rf-flex rf-flex-col rf-items-center rf-gap-2'>\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.samu}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>15</p>\r\n </div>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile ? '' : 'rf-border-l rf-border-[#C7C6C6]'\r\n } rf-gap-2`}\r\n >\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.police}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>17</p>\r\n </div>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile ? '' : 'rf-border-l rf-border-[#C7C6C6]'\r\n } rf-gap-2`}\r\n >\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.firefighter}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>18</p>\r\n </div>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile ? '' : 'rf-border-l rf-border-[#C7C6C6]'\r\n } rf-gap-2`}\r\n >\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.general}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>\r\n 112\r\n </p>\r\n </div>\r\n </div>\r\n <div\r\n className={`rf-flex rf-items-start ${\r\n isMobile ? 'rf-flex-col' : 'rf-gap-12'\r\n } `}\r\n >\r\n <div>\r\n {municipalPoliceNumber?.length && (\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.citypolice} : `}\r\n <span className='rf-font-bold'>\r\n {municipalPoliceNumber}\r\n </span>\r\n </p>\r\n )}\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.homeless} : `}\r\n <span className='rf-font-bold'>115</span>\r\n </p>\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.emergency} : `}\r\n <span className='rf-font-bold'>118</span>\r\n </p>\r\n </div>\r\n <div>\r\n {localHospitalName?.length && (\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.hospital} ${localHospitalName} : `}\r\n <span className='rf-font-bold'>{localHospitalNumber}</span>\r\n </p>\r\n )}\r\n {poisonControlNumber?.length && (\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.poison} : `}\r\n <span className='rf-font-bold'>{poisonControlNumber}</span>\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {!isMobile && <div className='rf-flex-1' />}\r\n </>\r\n )\r\n}\r\n\r\nexport { EmergencyContent }\r\n"],"names":[],"version":3,"file":"Emergency.0cf005ce.js.map"}
|
|
@@ -49,8 +49,7 @@ const $e56ded4540f43ec0$var$Emergency = ({ handleClose: handleClose })=>{
|
|
|
49
49
|
const sendEvent = (0, $6QoTL.useDirectlineStore)((state)=>state.actions.sendEvent);
|
|
50
50
|
const handleBack = ()=>{
|
|
51
51
|
handleClose ? handleClose() : setCurrentSubView((0, $7WHA7.CurrentSubView).none);
|
|
52
|
-
sendEvent('Davi.CloseWindow', null);
|
|
53
|
-
sendEvent('Davi.CloseWindowEmergency', null);
|
|
52
|
+
sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowEmergency', null));
|
|
54
53
|
};
|
|
55
54
|
return isMobile ? /*#__PURE__*/ (0, $i8q1J$reactjsxruntime.jsx)((0, $a3uH3.SubMenuClosing), {
|
|
56
55
|
handleClose: handleBack,
|
|
@@ -298,4 +297,4 @@ const $2b55f3947c65e277$export$6478e9f7582bd8fc = ()=>{
|
|
|
298
297
|
|
|
299
298
|
|
|
300
299
|
|
|
301
|
-
//# sourceMappingURL=Emergency.
|
|
300
|
+
//# sourceMappingURL=Emergency.897ee3c7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/components/Emergency/Emergency.tsx","src/components/Emergency/EmergencyContent.tsx"],"sourcesContent":["import React from 'react'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\nimport { CurrentSubView, Depth } from '../../models/enums'\r\nimport { FullScreen, SubMenuClosing } from '../Templates'\r\nimport AbsoluteLargeClosingButton from '../Utils/SubView/AbsoluteLargeClosingButton'\r\nimport { EmergencyContent } from './EmergencyContent'\r\n\r\ninterface EmergencyProps {\r\n handleClose?: () => void\r\n}\r\n\r\nconst Emergency = ({ handleClose }: EmergencyProps): JSX.Element => {\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const handleBack = (): void => {\r\n handleClose ? handleClose() : setCurrentSubView(CurrentSubView.none)\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowEmergency', null))\r\n }\r\n\r\n return isMobile ? (\r\n <SubMenuClosing handleClose={handleBack} backIsConversation={false} className='rf-height-fill-available -rf-mb-4'>\r\n {/* Emergency data */}\r\n <EmergencyContent />\r\n </SubMenuClosing>\r\n ) : (\r\n <FullScreen depth={Depth.dropdown} background='linear-gradient(to right bottom, #F2F8F8FC , #F2E1E2E8)' onClick={handleBack}>\r\n <div className='rf-h-full rf-w-full rf-flex rf-flex-col rf-items-center rf-justify-center rf-gap-12'>\r\n {/* Emergency data */}\r\n <EmergencyContent />\r\n </div>\r\n\r\n {/* Closing button */}\r\n <AbsoluteLargeClosingButton dashboardVisible={true} onClick={handleBack} />\r\n </FullScreen>\r\n )\r\n}\r\n\r\nexport default Emergency\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { useRetorikStore } from '../Contexts/RetorikContext'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { fetchEmergencyData } from '../../utils/fetchEmergencyData'\r\nimport { EmergencyTypes } from '../../models/emergencyTypes'\r\nimport * as Icons from '../Icons/ViewIcons'\r\nimport { AvailableViews } from '../../models/enums'\r\nimport Animation2 from '../Loader/Animation2'\r\nimport preventEvents from '../../utils/preventEvents'\r\n\r\nconst subView = AvailableViews.emergency\r\n\r\nconst EmergencyContent = (): JSX.Element => {\r\n const baseAddress = useRetorikStore((state) => state.baseAddress)\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const isWidget = useViewStore((state) => state.isWidget)\r\n\r\n const [municipalPoliceNumber, setMunicipalPoliceNumber] = useState<string>('')\r\n const [localHospitalName, setLocalHospitalName] = useState<string>('')\r\n const [localHospitalNumber, setLocalHospitalNumber] = useState<string>('')\r\n const [poisonControlNumber, setPoisonControlNumber] = useState<string>('')\r\n const [loading, setLoading] = useState<boolean>(true)\r\n const divRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (divRef?.current) {\r\n isWidget && preventEvents(null, divRef)\r\n }\r\n }, [divRef?.current])\r\n\r\n useEffect(() => {\r\n const getData = async (): Promise<void> => {\r\n const data: EmergencyTypes = await fetchEmergencyData(baseAddress)\r\n if (data) {\r\n setMunicipalPoliceNumber(data.municipalPoliceNumber)\r\n setLocalHospitalName(data.localHospitalName)\r\n setLocalHospitalNumber(data.localHospitalNumber)\r\n setPoisonControlNumber(data.poisonControlNumber)\r\n }\r\n setLoading(false)\r\n }\r\n getData()\r\n }, [baseAddress])\r\n\r\n return (\r\n <>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile\r\n ? 'rf-justify-center rf-gap-2'\r\n : 'rf-justify-end rf-flex-[2_1_0%] rf-gap-9'\r\n }`}\r\n >\r\n <Icons.EmergencyIcon className='rf-h-9 rf-w-9 large:rf-h-16 large:rf-w-16' />\r\n <h3 className='rf-text-verylarge-size-auto rf-font-bold rf-capitalize-first rf-text-center'>\r\n {translation.emergency[subView]}\r\n </h3>\r\n </div>\r\n <div\r\n ref={divRef}\r\n className='rf-w-full rf-flex rf-flex-col rf-items-center rf-flex-[4_1_0%] rf-justify-evenly rf-h-full rf-pt-2 rf-overflow-y-scroll rf-scrollbar-hidden'\r\n style={{\r\n background: isMobile\r\n ? 'transparent'\r\n : 'transparent linear-gradient(291deg, #F2F3F6 0%, #E5E6EC 100%) 0% 0% no-repeat padding-box',\r\n boxShadow: isMobile\r\n ? ''\r\n : '#ffff -3px -3px 16px, rgb(0 0 0 / 25%) 0px 2px 10px 0px'\r\n }}\r\n >\r\n {loading ? (\r\n <>\r\n <div className='rf-w-6 rf-h-6 rf-mb-16'>\r\n <Animation2\r\n color='gray'\r\n loaderColor='#1999b1'\r\n backgroundColor='transparent'\r\n />\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n <div\r\n className={`rf-w-full rf-grid ${\r\n isMobile\r\n ? 'rf-grid-cols-2 rf-gap-8 rf-mt-10 rf-mb-8'\r\n : 'rf-grid-cols-4 rf-divide-x'\r\n } `}\r\n style={{ padding: isMobile ? '' : '0 10%' }}\r\n >\r\n <div className='rf-flex rf-flex-col rf-items-center rf-gap-2'>\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.samu}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>15</p>\r\n </div>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile ? '' : 'rf-border-l rf-border-[#C7C6C6]'\r\n } rf-gap-2`}\r\n >\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.police}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>17</p>\r\n </div>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile ? '' : 'rf-border-l rf-border-[#C7C6C6]'\r\n } rf-gap-2`}\r\n >\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.firefighter}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>18</p>\r\n </div>\r\n <div\r\n className={`rf-flex rf-flex-col rf-items-center ${\r\n isMobile ? '' : 'rf-border-l rf-border-[#C7C6C6]'\r\n } rf-gap-2`}\r\n >\r\n <p className='rf-text-xl rf-font-bold rf-uppercase'>\r\n {translation.emergency.general}\r\n </p>\r\n <p className='rf-text-5xl large:rf-text-6xl rf-font-bold'>\r\n 112\r\n </p>\r\n </div>\r\n </div>\r\n <div\r\n className={`rf-flex rf-items-start ${\r\n isMobile ? 'rf-flex-col' : 'rf-gap-12'\r\n } `}\r\n >\r\n <div>\r\n {municipalPoliceNumber?.length && (\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.citypolice} : `}\r\n <span className='rf-font-bold'>\r\n {municipalPoliceNumber}\r\n </span>\r\n </p>\r\n )}\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.homeless} : `}\r\n <span className='rf-font-bold'>115</span>\r\n </p>\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.emergency} : `}\r\n <span className='rf-font-bold'>118</span>\r\n </p>\r\n </div>\r\n <div>\r\n {localHospitalName?.length && (\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.hospital} ${localHospitalName} : `}\r\n <span className='rf-font-bold'>{localHospitalNumber}</span>\r\n </p>\r\n )}\r\n {poisonControlNumber?.length && (\r\n <p className='rf-text-xl rf-py-2'>\r\n {`${translation.emergency.poison} : `}\r\n <span className='rf-font-bold'>{poisonControlNumber}</span>\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {!isMobile && <div className='rf-flex-1' />}\r\n </>\r\n )\r\n}\r\n\r\nexport { EmergencyContent }\r\n"],"names":[],"version":3,"file":"Emergency.897ee3c7.js.map","sourceRoot":"../"}
|
|
@@ -71,8 +71,7 @@ const $7e0481471d50d053$var$HistoryList = ()=>{
|
|
|
71
71
|
]);
|
|
72
72
|
const handleClose = ()=>{
|
|
73
73
|
setCurrentSubView((0, $4ucVo.CurrentSubView).none);
|
|
74
|
-
sendEvent('Davi.CloseWindow', null);
|
|
75
|
-
sendEvent('Davi.CloseWindowHistory', null);
|
|
74
|
+
sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowHistory', null));
|
|
76
75
|
};
|
|
77
76
|
return /*#__PURE__*/ (0, $ktVFM$jsx)((0, $gQ55S.SubMenuClosing), {
|
|
78
77
|
handleClose: handleClose,
|
|
@@ -179,17 +178,14 @@ $parcel$export(module.exports, "default", () => $c7eb1586efc51c4d$export$2e2bcd8
|
|
|
179
178
|
|
|
180
179
|
var $2fuDN = parcelRequire("2fuDN");
|
|
181
180
|
|
|
182
|
-
var $1Qww3 = parcelRequire("1Qww3");
|
|
183
|
-
|
|
184
181
|
var $dLlm9 = parcelRequire("dLlm9");
|
|
185
182
|
|
|
186
183
|
var $1LYTj = parcelRequire("1LYTj");
|
|
187
184
|
const $c7eb1586efc51c4d$var$HistoryQA = ({ activity: activity, isQuestion: isQuestion })=>{
|
|
188
185
|
const locale = (0, $2fuDN.useLocaleStore)((state)=>state.locale);
|
|
189
|
-
const isMobile = (0, $1Qww3.useViewStore)((state)=>state.isMobile);
|
|
190
186
|
const time = activity.localTimestamp ? new Date(activity.localTimestamp) : activity.timestamp ? new Date(activity.timestamp) : new Date();
|
|
191
187
|
return activity.text || !!activity.attachments?.length ? /*#__PURE__*/ (0, $ktVFM$jsxs)("div", {
|
|
192
|
-
className:
|
|
188
|
+
className: "rf-w-full rf-flex rf-flex-col rf-gap-1",
|
|
193
189
|
children: [
|
|
194
190
|
/*#__PURE__*/ (0, $ktVFM$jsx)("div", {
|
|
195
191
|
className: "rf-text-[#9A9A9A]",
|
|
@@ -225,4 +221,4 @@ var $c7eb1586efc51c4d$export$2e2bcd8739ae039 = $c7eb1586efc51c4d$var$HistoryQA;
|
|
|
225
221
|
|
|
226
222
|
|
|
227
223
|
|
|
228
|
-
//# sourceMappingURL=HistoryList.
|
|
224
|
+
//# sourceMappingURL=HistoryList.03a56119.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,oCAAc;IAClB,MAAM,cAAc,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,mBAAmB;IACvE,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE,CAAC,QAAU,MAAM,QAAQ;IACvD,MAAM,UAAU,CAAA,GAAA,mBAAW,EAAE,CAAC,QAAU,MAAM,OAAO;IACrD,MAAM,oBAAoB,CAAA,GAAA,oBAAY,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,iBAAiB;IAClF,MAAM,YAAY,CAAA,GAAA,yBAAiB,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IAEvE,MAAM,aAAa,CAAA,GAAA,cAAmB;IACtC,MAAM,YAAY,CAAA,GAAA,aAAK,EAAkB;IACzC,MAAM,SAAS,CAAA,GAAA,aAAK,EAAkB;IAEtC;;;GAGC,GACD,MAAM,cAAc;QAClB,IAAI,aAAa,UAAU,OAAO,KAAK,MACrC,UAAU,OAAO,CAAC,cAAc,CAAC;YAC/B,UAAU;YACV,OAAO;QACT;IAEJ;IAEA;;;GAGC,GACD,CAAA,GAAA,gBAAQ,EAAE;QACR,WAAW;YACT;QACF,GAAG;IACL,GAAG,EAAE;IAEL,CAAA,GAAA,gBAAQ,EAAE;QACR,QAAQ,WAAW,YAAY,CAAA,GAAA,cAAY,EAAE,MAAM;IACrD,GAAG;QAAC,QAAQ;KAAQ;IAEpB,MAAM,cAAc;QAClB,kBAAkB,CAAA,GAAA,qBAAa,EAAE,IAAI;QACrC,UAAU,oBAAoB,MAAM,IAAM,UAAU,2BAA2B;IACjF;IAEA,qBACE,gBAAC,CAAA,GAAA,qBAAO;QAAE,aAAa;QAAa,oBAAoB;QAAM,OAAO,YAAY,OAAO,CAAC,KAAK;kBAC5F,cAAA,iBAAC;YAAI,KAAK;YAAQ,WAAW,CAAC,6BAA6B,EAAE,UAAU,sBAAsB,uBAAuB;;gBAEjH,WAAW,GAAG,CAAC,CAAC,UAAU;oBACzB,qBAAO,gBAAC,CAAA,GAAA,cAAU;wBAAY,UAAU;uBAAf;gBAC3B;8BACA,gBAAC;oBAAI,KAAK;;;;;AAIlB;IAEA,2CAAe;;;;;;;;;;AC/DA;IACb,MAAM,aAAa,CAAA,GAAA,uBAAe,EAAE,CAAC,QAAU,MAAM,iBAAiB;IACtE,oLAAoL;IACpL,MAAM,cAA6B,EAAE;IACrC,MAAM,UAA6B,EAAE;IAErC,WAAW,OAAO,CAAC,CAAC;QAClB,IAAI,SAAS,EAAE,IAAI,CAAC,YAAY,QAAQ,CAAC,SAAS,EAAE,GAAG;YACrD,YAAY,IAAI,CAAC,SAAS,EAAE;YAC5B,kGAAkG;YAClG,IAAI,SAAS,SAAS,EAAE;gBACtB,MAAM,WAAwC,QAAQ,IAAI,CACxD,CAAC,cAAgB,YAAY,QAAQ,CAAC,EAAE,KAAK,SAAS,SAAS;gBAEjE,IAAI,UACF,SAAS,OAAO,CAAC,IAAI,CAAC;qBACjB;oBACL,MAAM,cACJ,CAAA,GAAA,oCAA4B,EAAE;oBAEhC,QAAQ,IAAI,CAAC;wBACX,UAAU;wBACV,SAAS;4BAAC;yBAAS;oBACrB;gBACF;YACF,OACE,IACE,AAAC,SAA6B,KAAK,KAAK,yBACxC,AAAC,SAA6B,IAAI,EAClC;gBACA,MAAM,cACJ,CAAA,GAAA,oCAA4B,EAAE;gBAChC,QAAQ,IAAI,CAAC;oBACX,UAAU;oBACV,SAAS;wBAAC;qBAAS;gBACrB;YACF,OACE,QAAQ,IAAI,CAAC;gBACX,UAAU;gBACV,SAAS,EAAE;YACb;QAGN;IACF;IAEA,OAAO;AACT;;;;;;;;;;;AC3CA,MAAM,oCAAc,CAAC,YAAE,QAAQ,EAAoB;IACjD,qBACE,iBAAC;QAAI,WAAU;;YAEZ,UAAU,YAAY,SAAS,QAAQ,CAAC,IAAI,KAAK,2BAChD,gBAAC,CAAA,GAAA,cAAQ;gBAAE,UAAU,SAAS,QAAQ;gBAAE,YAAY;;YAIrD,SAAS,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ;gBAC7B,OAAO,OAAO,IAAI,KAAK,0BACrB,gBAAC,CAAA,GAAA,cAAQ;oBAAU,UAAU;oBAAQ,YAAY;mBAAjC,mBAEhB,gBAAC,CAAA,GAAA,YAAI,EAAE,QAAQ;YAEnB;;;AAGN;IAEA,2CAAe;;;;;;;;;;;;;;ACjBf,MAAM,kCAAY,CAAC,YAAE,QAAQ,cAAE,UAAU,EAAkB;IACzD,MAAM,SAAS,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,MAAM;IACrD,MAAM,OAAO,SAAS,cAAc,GAAG,IAAI,KAAK,SAAS,cAAc,IAAI,SAAS,SAAS,GAAG,IAAI,KAAK,SAAS,SAAS,IAAI,IAAI;IAEnI,OAAO,SAAS,IAAI,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,uBAC9C,iBAAC;QAAI,WAAU;;0BAEb,gBAAC;gBAAI,WAAU;0BACZ,KAAK,cAAc,CAAC,QAAQ;oBAC3B,MAAM;oBACN,QAAQ;gBACV;;0BAIF,iBAAC;gBAAI,WAAW,GAAG,aAAa,sBAAsB,wCAAwC;;oBAC3F,SAAS,QAAQ,iBAChB,gBAAC;wBACC,yBAAyB;4BACvB,QAAQ,SAAS,QAAQ;wBAC3B;yBAEA,SAAS,IAAI,GACf,CAAA,GAAA,mCAA2B,EAAE,SAAS,IAAI,IAE1C;oBAGD,CAAC,CAAC,SAAS,WAAW,EAAE,UAAU,CAAE,CAAA,SAAS,gBAAgB,IAAI,SAAS,gBAAgB,CAAC,WAAW,OAAO,UAAS,mBACrH,gBAAC;wBAAI,WAAW,CAAC,8DAA8D,EAAE,SAAS,IAAI,IAAI,WAAW;kCAC3G,cAAA,gBAAC,CAAA,GAAA,cAAU;4BAAE,UAAU;4BAAU,SAAS;;;;;;uBAMlD,gBAAC,CAAA,GAAA,YAAI,EAAE,QAAQ;AAEnB;IAEA,2CAAe","sources":["src/components/History/HistoryList.tsx","src/hooks/useMessageActivities.ts","src/components/History/HistoryItem.tsx","src/components/History/HistoryQA.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\nimport useMessageActivities from '../../hooks/useMessageActivities'\r\nimport { SubMenuClosing as Template } from '../Templates'\r\nimport HistoryItem from './HistoryItem'\r\nimport { CurrentSubView } from '../../models/enums'\r\nimport preventEvents from '../../utils/preventEvents'\r\n\r\nconst HistoryList = (): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const isWidget = useViewStore((state) => state.isWidget)\r\n const isBorne = useViewStore((state) => state.isBorne)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const activities = useMessageActivities()\r\n const scrollRef = useRef<HTMLDivElement>(null)\r\n const divRef = useRef<HTMLDivElement>(null)\r\n\r\n /**\r\n * On call :\r\n * - scroll to the scrollRef HTML element at the bottom of the view\r\n */\r\n const scrollToRef = (): void => {\r\n if (scrollRef && scrollRef.current !== null) {\r\n scrollRef.current.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'nearest'\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * On component mount :\r\n * - call scrollToRef method\r\n */\r\n useEffect(() => {\r\n setTimeout(() => {\r\n scrollToRef()\r\n }, 200)\r\n }, [])\r\n\r\n useEffect(() => {\r\n divRef?.current && isWidget && preventEvents(null, divRef)\r\n }, [divRef?.current])\r\n\r\n const handleClose = (): void => {\r\n setCurrentSubView(CurrentSubView.none)\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowHistory', null))\r\n }\r\n\r\n return (\r\n <Template handleClose={handleClose} backIsConversation={true} title={translation.history.title}>\r\n <div ref={divRef} className={`rf-pb-4 rf-overflow-y-scroll ${isBorne ? 'rf-scrollbar-thin' : 'rf-scrollbar-hidden'}`}>\r\n {/* History items */}\r\n {activities.map((activity, key) => {\r\n return <HistoryItem key={key} activity={activity} />\r\n })}\r\n <div ref={scrollRef} />\r\n </div>\r\n </Template>\r\n )\r\n}\r\n\r\nexport default HistoryList\r\n","import type { HistoryActivity, RetorikActivity } from '../models/activityTypes'\r\nimport { createNewQuestionForTimestamp } from '../utils/activityUtils'\r\nimport { useActivityStore } from '../components/Contexts/ActivityContext'\r\n\r\nexport default function useMessageActivities(): Array<HistoryActivity> {\r\n const activities = useActivityStore((state) => state.messageActivities)\r\n // processedId contains the ids of the activities already processed (because useActivities gives duplicate activities with different state depending on if it's been spoken or not )\r\n const processedId: Array<string> = []\r\n const history: HistoryActivity[] = []\r\n\r\n activities.forEach((activity) => {\r\n if (activity.id && !processedId.includes(activity.id)) {\r\n processedId.push(activity.id)\r\n // Check if this is a question or an answer (questions from the user don't have a replyToId field)\r\n if (activity.replyToId) {\r\n const question: HistoryActivity | undefined = history.find(\r\n (historyItem) => historyItem.question.id === activity.replyToId\r\n )\r\n if (question) {\r\n question.answers.push(activity)\r\n } else {\r\n const newQuestion: RetorikActivity =\r\n createNewQuestionForTimestamp(activity)\r\n\r\n history.push({\r\n question: newQuestion,\r\n answers: [activity]\r\n })\r\n }\r\n } else {\r\n if (\r\n (activity as RetorikActivity).label === 'Davi.BringupMessage' &&\r\n (activity as RetorikActivity).text\r\n ) {\r\n const newQuestion: RetorikActivity =\r\n createNewQuestionForTimestamp(activity)\r\n history.push({\r\n question: newQuestion,\r\n answers: [activity]\r\n })\r\n } else {\r\n history.push({\r\n question: activity,\r\n answers: []\r\n })\r\n }\r\n }\r\n }\r\n })\r\n\r\n return history\r\n}\r\n","import React from 'react'\r\nimport type { HistoryActivity } from '../../models/activityTypes'\r\nimport HistoryQA from './HistoryQA'\r\n\r\ninterface HistoryItemProps {\r\n activity: HistoryActivity\r\n}\r\n\r\nconst HistoryItem = ({ activity }: HistoryItemProps): JSX.Element => {\r\n return (\r\n <div className='rf-mb-4 rf-flex rf-flex-col rf-justify-start rf-items-start rf-gap-4 rf-text-size-auto'>\r\n {/* Question */}\r\n {activity?.question && activity.question.type === 'message' && (\r\n <HistoryQA activity={activity.question} isQuestion={true} />\r\n )}\r\n\r\n {/* Answers */}\r\n {activity.answers.map((answer, j) => {\r\n return answer.type === 'message' ? (\r\n <HistoryQA key={j} activity={answer} isQuestion={false} />\r\n ) : (\r\n <React.Fragment />\r\n )\r\n })}\r\n </div>\r\n )\r\n}\r\n\r\nexport default HistoryItem\r\n","import React from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport type { RetorikActivity } from '../../models/activityTypes'\r\nimport { getTextWithoutSpeechMarkdown } from '../../utils/speechMarkdownUtils'\r\nimport Attachments from '../Attachments/Attachments'\r\n\r\ninterface HistoryQAProps {\r\n activity: RetorikActivity\r\n isQuestion: boolean\r\n}\r\n\r\nconst HistoryQA = ({ activity, isQuestion }: HistoryQAProps): JSX.Element => {\r\n const locale = useLocaleStore((state) => state.locale)\r\n const time = activity.localTimestamp ? new Date(activity.localTimestamp) : activity.timestamp ? new Date(activity.timestamp) : new Date()\r\n\r\n return activity.text || !!activity.attachments?.length ? (\r\n <div className='rf-w-full rf-flex rf-flex-col rf-gap-1'>\r\n {/* Time */}\r\n <div className='rf-text-[#9A9A9A]'>\r\n {time.toLocaleString(locale, {\r\n hour: 'numeric',\r\n minute: 'numeric'\r\n })}\r\n </div>\r\n\r\n {/* Question or Answer */}\r\n <div className={`${isQuestion ? 'rf-text-secondary' : 'rf-text-textModePanelConversationBot'}`}>\r\n {activity.htmlText ? (\r\n <div\r\n dangerouslySetInnerHTML={{\r\n __html: activity.htmlText\r\n }}\r\n />\r\n ) : activity.text ? (\r\n getTextWithoutSpeechMarkdown(activity.text)\r\n ) : (\r\n ''\r\n )}\r\n {/* Display attachments if there are some and the display mode wasn't a list */}\r\n {!!activity.attachments?.length && !(activity.attachmentLayout && activity.attachmentLayout.toLowerCase() === 'davilist') && (\r\n <div className={`rf-w-full rf-min-h-16 rf-overflow-x-hidden rf-overflow-y-auto ${activity.text && 'rf-pt-4'}`}>\r\n <Attachments activity={activity} history={true} />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <React.Fragment />\r\n )\r\n}\r\n\r\nexport default HistoryQA\r\n"],"names":[],"version":3,"file":"HistoryList.03a56119.js.map"}
|
|
@@ -84,8 +84,7 @@ const $4c0e94df62fa6718$var$HistoryList = ()=>{
|
|
|
84
84
|
]);
|
|
85
85
|
const handleClose = ()=>{
|
|
86
86
|
setCurrentSubView((0, $7WHA7.CurrentSubView).none);
|
|
87
|
-
sendEvent('Davi.CloseWindow', null);
|
|
88
|
-
sendEvent('Davi.CloseWindowHistory', null);
|
|
87
|
+
sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowHistory', null));
|
|
89
88
|
};
|
|
90
89
|
return /*#__PURE__*/ (0, $3sjcq$reactjsxruntime.jsx)((0, $a3uH3.SubMenuClosing), {
|
|
91
90
|
handleClose: handleClose,
|
|
@@ -192,18 +191,15 @@ $parcel$export(module.exports, "default", () => $db601f65e25709db$export$2e2bcd8
|
|
|
192
191
|
|
|
193
192
|
var $6Q0mk = parcelRequire("6Q0mk");
|
|
194
193
|
|
|
195
|
-
var $kUiCn = parcelRequire("kUiCn");
|
|
196
|
-
|
|
197
194
|
var $lr5yz = parcelRequire("lr5yz");
|
|
198
195
|
|
|
199
196
|
var $eXl5q = parcelRequire("eXl5q");
|
|
200
197
|
const $db601f65e25709db$var$HistoryQA = ({ activity: activity, isQuestion: isQuestion })=>{
|
|
201
198
|
var _activity_attachments, _activity_attachments1;
|
|
202
199
|
const locale = (0, $6Q0mk.useLocaleStore)((state)=>state.locale);
|
|
203
|
-
const isMobile = (0, $kUiCn.useViewStore)((state)=>state.isMobile);
|
|
204
200
|
const time = activity.localTimestamp ? new Date(activity.localTimestamp) : activity.timestamp ? new Date(activity.timestamp) : new Date();
|
|
205
201
|
return activity.text || !!((_activity_attachments = activity.attachments) === null || _activity_attachments === void 0 ? void 0 : _activity_attachments.length) ? /*#__PURE__*/ (0, $3sjcq$reactjsxruntime.jsxs)("div", {
|
|
206
|
-
className:
|
|
202
|
+
className: "rf-w-full rf-flex rf-flex-col rf-gap-1",
|
|
207
203
|
children: [
|
|
208
204
|
/*#__PURE__*/ (0, $3sjcq$reactjsxruntime.jsx)("div", {
|
|
209
205
|
className: "rf-text-[#9A9A9A]",
|
|
@@ -239,4 +235,4 @@ var $db601f65e25709db$export$2e2bcd8739ae039 = $db601f65e25709db$var$HistoryQA;
|
|
|
239
235
|
|
|
240
236
|
|
|
241
237
|
|
|
242
|
-
//# sourceMappingURL=HistoryList.
|
|
238
|
+
//# sourceMappingURL=HistoryList.4c303dc6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,oCAAc;IAClB,MAAM,cAAc,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,mBAAmB;IACvE,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE,CAAC,QAAU,MAAM,QAAQ;IACvD,MAAM,UAAU,CAAA,GAAA,mBAAW,EAAE,CAAC,QAAU,MAAM,OAAO;IACrD,MAAM,oBAAoB,CAAA,GAAA,oBAAY,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,iBAAiB;IAClF,MAAM,YAAY,CAAA,GAAA,yBAAiB,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IAEvE,MAAM,aAAa,CAAA,GAAA,cAAmB;IACtC,MAAM,YAAY,CAAA,GAAA,mBAAK,EAAkB;IACzC,MAAM,SAAS,CAAA,GAAA,mBAAK,EAAkB;IAEtC;;;GAGC,GACD,MAAM,cAAc;QAClB,IAAI,aAAa,UAAU,OAAO,KAAK,MACrC,UAAU,OAAO,CAAC,cAAc,CAAC;YAC/B,UAAU;YACV,OAAO;QACT;IAEJ;IAEA;;;GAGC,GACD,CAAA,GAAA,sBAAQ,EAAE;QACR,WAAW;YACT;QACF,GAAG;IACL,GAAG,EAAE;IAEL,CAAA,GAAA,sBAAQ,EAAE;QACR,CAAA,mBAAA,6BAAA,OAAQ,OAAO,KAAI,YAAY,CAAA,GAAA,cAAY,EAAE,MAAM;IACrD,GAAG;QAAC,mBAAA,6BAAA,OAAQ,OAAO;KAAC;IAEpB,MAAM,cAAc;QAClB,kBAAkB,CAAA,GAAA,qBAAa,EAAE,IAAI;QACrC,UAAU,oBAAoB,MAAM,IAAM,UAAU,2BAA2B;IACjF;IAEA,qBACE,gCAAC,CAAA,GAAA,qBAAO;QAAE,aAAa;QAAa,oBAAoB;QAAM,OAAO,YAAY,OAAO,CAAC,KAAK;kBAC5F,cAAA,iCAAC;YAAI,KAAK;YAAQ,WAAW,CAAC,6BAA6B,EAAE,UAAU,sBAAsB,uBAAuB;;gBAEjH,WAAW,GAAG,CAAC,CAAC,UAAU;oBACzB,qBAAO,gCAAC,CAAA,GAAA,cAAU;wBAAY,UAAU;uBAAf;gBAC3B;8BACA,gCAAC;oBAAI,KAAK;;;;;AAIlB;IAEA,2CAAe;;;;;;;;;;AC/DA;IACb,MAAM,aAAa,CAAA,GAAA,uBAAe,EAAE,CAAC,QAAU,MAAM,iBAAiB;IACtE,oLAAoL;IACpL,MAAM,cAA6B,EAAE;IACrC,MAAM,UAA6B,EAAE;IAErC,WAAW,OAAO,CAAC,CAAC;QAClB,IAAI,SAAS,EAAE,IAAI,CAAC,YAAY,QAAQ,CAAC,SAAS,EAAE,GAAG;YACrD,YAAY,IAAI,CAAC,SAAS,EAAE;YAC5B,kGAAkG;YAClG,IAAI,SAAS,SAAS,EAAE;gBACtB,MAAM,WAAwC,QAAQ,IAAI,CACxD,CAAC,cAAgB,YAAY,QAAQ,CAAC,EAAE,KAAK,SAAS,SAAS;gBAEjE,IAAI,UACF,SAAS,OAAO,CAAC,IAAI,CAAC;qBACjB;oBACL,MAAM,cACJ,CAAA,GAAA,oCAA4B,EAAE;oBAEhC,QAAQ,IAAI,CAAC;wBACX,UAAU;wBACV,SAAS;4BAAC;yBAAS;oBACrB;gBACF;YACF,OACE,IACE,AAAC,SAA6B,KAAK,KAAK,yBACxC,AAAC,SAA6B,IAAI,EAClC;gBACA,MAAM,cACJ,CAAA,GAAA,oCAA4B,EAAE;gBAChC,QAAQ,IAAI,CAAC;oBACX,UAAU;oBACV,SAAS;wBAAC;qBAAS;gBACrB;YACF,OACE,QAAQ,IAAI,CAAC;gBACX,UAAU;gBACV,SAAS,EAAE;YACb;QAGN;IACF;IAEA,OAAO;AACT;;;;;;;;;;;AC3CA,MAAM,oCAAc,CAAC,YAAE,QAAQ,EAAoB;IACjD,qBACE,iCAAC;QAAI,WAAU;;YAEZ,CAAA,qBAAA,+BAAA,SAAU,QAAQ,KAAI,SAAS,QAAQ,CAAC,IAAI,KAAK,2BAChD,gCAAC,CAAA,GAAA,cAAQ;gBAAE,UAAU,SAAS,QAAQ;gBAAE,YAAY;;YAIrD,SAAS,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ;gBAC7B,OAAO,OAAO,IAAI,KAAK,0BACrB,gCAAC,CAAA,GAAA,cAAQ;oBAAU,UAAU;oBAAQ,YAAY;mBAAjC,mBAEhB,gCAAC,CAAA,GAAA,sCAAI,EAAE,QAAQ;YAEnB;;;AAGN;IAEA,2CAAe;;;;;;;;;;;;;;ACjBf,MAAM,kCAAY,CAAC,YAAE,QAAQ,cAAE,UAAU,EAAkB;QAI/B,uBAwBjB;IA3BT,MAAM,SAAS,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,MAAM;IACrD,MAAM,OAAO,SAAS,cAAc,GAAG,IAAI,KAAK,SAAS,cAAc,IAAI,SAAS,SAAS,GAAG,IAAI,KAAK,SAAS,SAAS,IAAI,IAAI;IAEnI,OAAO,SAAS,IAAI,IAAI,CAAC,GAAC,wBAAA,SAAS,WAAW,cAApB,4CAAA,sBAAsB,MAAM,kBACpD,iCAAC;QAAI,WAAU;;0BAEb,gCAAC;gBAAI,WAAU;0BACZ,KAAK,cAAc,CAAC,QAAQ;oBAC3B,MAAM;oBACN,QAAQ;gBACV;;0BAIF,iCAAC;gBAAI,WAAW,GAAG,aAAa,sBAAsB,wCAAwC;;oBAC3F,SAAS,QAAQ,iBAChB,gCAAC;wBACC,yBAAyB;4BACvB,QAAQ,SAAS,QAAQ;wBAC3B;yBAEA,SAAS,IAAI,GACf,CAAA,GAAA,mCAA2B,EAAE,SAAS,IAAI,IAE1C;oBAGD,CAAC,GAAC,yBAAA,SAAS,WAAW,cAApB,6CAAA,uBAAsB,MAAM,KAAI,CAAE,CAAA,SAAS,gBAAgB,IAAI,SAAS,gBAAgB,CAAC,WAAW,OAAO,UAAS,mBACrH,gCAAC;wBAAI,WAAW,CAAC,8DAA8D,EAAE,SAAS,IAAI,IAAI,WAAW;kCAC3G,cAAA,gCAAC,CAAA,GAAA,cAAU;4BAAE,UAAU;4BAAU,SAAS;;;;;;uBAMlD,gCAAC,CAAA,GAAA,sCAAI,EAAE,QAAQ;AAEnB;IAEA,2CAAe","sources":["src/components/History/HistoryList.tsx","src/hooks/useMessageActivities.ts","src/components/History/HistoryItem.tsx","src/components/History/HistoryQA.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\nimport useMessageActivities from '../../hooks/useMessageActivities'\r\nimport { SubMenuClosing as Template } from '../Templates'\r\nimport HistoryItem from './HistoryItem'\r\nimport { CurrentSubView } from '../../models/enums'\r\nimport preventEvents from '../../utils/preventEvents'\r\n\r\nconst HistoryList = (): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const isWidget = useViewStore((state) => state.isWidget)\r\n const isBorne = useViewStore((state) => state.isBorne)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const activities = useMessageActivities()\r\n const scrollRef = useRef<HTMLDivElement>(null)\r\n const divRef = useRef<HTMLDivElement>(null)\r\n\r\n /**\r\n * On call :\r\n * - scroll to the scrollRef HTML element at the bottom of the view\r\n */\r\n const scrollToRef = (): void => {\r\n if (scrollRef && scrollRef.current !== null) {\r\n scrollRef.current.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'nearest'\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * On component mount :\r\n * - call scrollToRef method\r\n */\r\n useEffect(() => {\r\n setTimeout(() => {\r\n scrollToRef()\r\n }, 200)\r\n }, [])\r\n\r\n useEffect(() => {\r\n divRef?.current && isWidget && preventEvents(null, divRef)\r\n }, [divRef?.current])\r\n\r\n const handleClose = (): void => {\r\n setCurrentSubView(CurrentSubView.none)\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowHistory', null))\r\n }\r\n\r\n return (\r\n <Template handleClose={handleClose} backIsConversation={true} title={translation.history.title}>\r\n <div ref={divRef} className={`rf-pb-4 rf-overflow-y-scroll ${isBorne ? 'rf-scrollbar-thin' : 'rf-scrollbar-hidden'}`}>\r\n {/* History items */}\r\n {activities.map((activity, key) => {\r\n return <HistoryItem key={key} activity={activity} />\r\n })}\r\n <div ref={scrollRef} />\r\n </div>\r\n </Template>\r\n )\r\n}\r\n\r\nexport default HistoryList\r\n","import type { HistoryActivity, RetorikActivity } from '../models/activityTypes'\r\nimport { createNewQuestionForTimestamp } from '../utils/activityUtils'\r\nimport { useActivityStore } from '../components/Contexts/ActivityContext'\r\n\r\nexport default function useMessageActivities(): Array<HistoryActivity> {\r\n const activities = useActivityStore((state) => state.messageActivities)\r\n // processedId contains the ids of the activities already processed (because useActivities gives duplicate activities with different state depending on if it's been spoken or not )\r\n const processedId: Array<string> = []\r\n const history: HistoryActivity[] = []\r\n\r\n activities.forEach((activity) => {\r\n if (activity.id && !processedId.includes(activity.id)) {\r\n processedId.push(activity.id)\r\n // Check if this is a question or an answer (questions from the user don't have a replyToId field)\r\n if (activity.replyToId) {\r\n const question: HistoryActivity | undefined = history.find(\r\n (historyItem) => historyItem.question.id === activity.replyToId\r\n )\r\n if (question) {\r\n question.answers.push(activity)\r\n } else {\r\n const newQuestion: RetorikActivity =\r\n createNewQuestionForTimestamp(activity)\r\n\r\n history.push({\r\n question: newQuestion,\r\n answers: [activity]\r\n })\r\n }\r\n } else {\r\n if (\r\n (activity as RetorikActivity).label === 'Davi.BringupMessage' &&\r\n (activity as RetorikActivity).text\r\n ) {\r\n const newQuestion: RetorikActivity =\r\n createNewQuestionForTimestamp(activity)\r\n history.push({\r\n question: newQuestion,\r\n answers: [activity]\r\n })\r\n } else {\r\n history.push({\r\n question: activity,\r\n answers: []\r\n })\r\n }\r\n }\r\n }\r\n })\r\n\r\n return history\r\n}\r\n","import React from 'react'\r\nimport type { HistoryActivity } from '../../models/activityTypes'\r\nimport HistoryQA from './HistoryQA'\r\n\r\ninterface HistoryItemProps {\r\n activity: HistoryActivity\r\n}\r\n\r\nconst HistoryItem = ({ activity }: HistoryItemProps): JSX.Element => {\r\n return (\r\n <div className='rf-mb-4 rf-flex rf-flex-col rf-justify-start rf-items-start rf-gap-4 rf-text-size-auto'>\r\n {/* Question */}\r\n {activity?.question && activity.question.type === 'message' && (\r\n <HistoryQA activity={activity.question} isQuestion={true} />\r\n )}\r\n\r\n {/* Answers */}\r\n {activity.answers.map((answer, j) => {\r\n return answer.type === 'message' ? (\r\n <HistoryQA key={j} activity={answer} isQuestion={false} />\r\n ) : (\r\n <React.Fragment />\r\n )\r\n })}\r\n </div>\r\n )\r\n}\r\n\r\nexport default HistoryItem\r\n","import React from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport type { RetorikActivity } from '../../models/activityTypes'\r\nimport { getTextWithoutSpeechMarkdown } from '../../utils/speechMarkdownUtils'\r\nimport Attachments from '../Attachments/Attachments'\r\n\r\ninterface HistoryQAProps {\r\n activity: RetorikActivity\r\n isQuestion: boolean\r\n}\r\n\r\nconst HistoryQA = ({ activity, isQuestion }: HistoryQAProps): JSX.Element => {\r\n const locale = useLocaleStore((state) => state.locale)\r\n const time = activity.localTimestamp ? new Date(activity.localTimestamp) : activity.timestamp ? new Date(activity.timestamp) : new Date()\r\n\r\n return activity.text || !!activity.attachments?.length ? (\r\n <div className='rf-w-full rf-flex rf-flex-col rf-gap-1'>\r\n {/* Time */}\r\n <div className='rf-text-[#9A9A9A]'>\r\n {time.toLocaleString(locale, {\r\n hour: 'numeric',\r\n minute: 'numeric'\r\n })}\r\n </div>\r\n\r\n {/* Question or Answer */}\r\n <div className={`${isQuestion ? 'rf-text-secondary' : 'rf-text-textModePanelConversationBot'}`}>\r\n {activity.htmlText ? (\r\n <div\r\n dangerouslySetInnerHTML={{\r\n __html: activity.htmlText\r\n }}\r\n />\r\n ) : activity.text ? (\r\n getTextWithoutSpeechMarkdown(activity.text)\r\n ) : (\r\n ''\r\n )}\r\n {/* Display attachments if there are some and the display mode wasn't a list */}\r\n {!!activity.attachments?.length && !(activity.attachmentLayout && activity.attachmentLayout.toLowerCase() === 'davilist') && (\r\n <div className={`rf-w-full rf-min-h-16 rf-overflow-x-hidden rf-overflow-y-auto ${activity.text && 'rf-pt-4'}`}>\r\n <Attachments activity={activity} history={true} />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <React.Fragment />\r\n )\r\n}\r\n\r\nexport default HistoryQA\r\n"],"names":[],"version":3,"file":"HistoryList.4c303dc6.js.map","sourceRoot":"../"}
|
|
@@ -54,10 +54,7 @@ const $4545a6dcb65287bd$var$LanguageChoice = ()=>{
|
|
|
54
54
|
const handleClose = (changed)=>{
|
|
55
55
|
setCurrentSubView((0, $4ucVo.CurrentSubView).none);
|
|
56
56
|
// Only send events when language has not been changed, either way it will collide with the TriggerWelcome event
|
|
57
|
-
if (!changed)
|
|
58
|
-
sendEvent('Davi.CloseWindow', null);
|
|
59
|
-
sendEvent('Davi.CloseWindowLanguages', null);
|
|
60
|
-
}
|
|
57
|
+
if (!changed) sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowLanguages', null));
|
|
61
58
|
};
|
|
62
59
|
const handleChange = (language)=>{
|
|
63
60
|
setCurrentLanguage(language);
|
|
@@ -113,4 +110,4 @@ var $4545a6dcb65287bd$export$2e2bcd8739ae039 = $4545a6dcb65287bd$var$LanguageCho
|
|
|
113
110
|
});
|
|
114
111
|
|
|
115
112
|
|
|
116
|
-
//# sourceMappingURL=LanguageChoice.
|
|
113
|
+
//# sourceMappingURL=LanguageChoice.623ee802.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,MAAM,uCAAiB;IACrB,MAAM,cAAc,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,mBAAmB;IACvE,MAAM,SAAS,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,MAAM;IACrD,MAAM,YAAY,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,SAAS;IAC3D,MAAM,cAAc,CAAA,GAAA,sBAAc,EAAE,CAAC,QAAU,MAAM,aAAa,CAAC,WAAW;IAC9E,MAAM,oBAAoB,CAAA,GAAA,oBAAY,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,iBAAiB;IAClF,MAAM,YAAY,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IACnE,MAAM,YAAY,CAAA,GAAA,yBAAiB,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IAEvE,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,CAAA,GAAA,eAAO,EAAU;IAE/D,MAAM,cAAc,CAAC;QACnB,kBAAkB,CAAA,GAAA,qBAAa,EAAE,IAAI;QAErC,gHAAgH;QAChH,IAAI,CAAC,SACH,UAAU,oBAAoB,MAAM,IAAM,UAAU,6BAA6B;IAErF;IAEA,MAAM,eAAe,CAAC;QACpB,mBAAmB;IACrB;IAEA;;;;GAIC,GACD,MAAM,eAAe,CAAC;QACpB,MAAM,UAAU,aAAa;QAC7B,IAAI,SAAS;YACX,UAAU;YACV,CAAC,eACC,WAAW;gBACT,UAAU,kBAAkB;YAC9B,GAAG;QACP;QAEA,YAAY;IACd;IAEA,qBACE,iBAAC,CAAA,GAAA,qBAAO;QAAE,aAAa,IAAM,YAAY;;0BAEvC,gBAAC;gBAAI,WAAU;0BAAiF,CAAA,GAAA,4BAAoB,EAAE,YAAY,QAAQ,CAAC,MAAM,EAAE;;0BAGnJ,gBAAC;gBAAI,WAAU;0BAAqC,CAAA,GAAA,4BAAoB,EAAE,YAAY,QAAQ,CAAC,MAAM,EAAE;;YAGtG,UAAU,GAAG,CAAC,CAAC,UAAU;gBACxB,qBACE,gBAAC;oBAAc,WAAW,CAAC,qDAAqD,EAAE,QAAQ,KAAK,uBAAuB;8BACpH,cAAA,gBAAC,CAAA,GAAA,YAAI;wBAAE,OAAO,CAAA,GAAA,6CAAqB,CAAC,CAAC,SAAS;wBAAE,SAAS,aAAa;wBAAiB,cAAc,IAAY,aAAa;;mBADtH;YAId;0BAGA,gBAAC;gBAAI,WAAU;0BACb,cAAA,gBAAC;oBAAO,WAAU;oBAA+F,SAAS,IAAY,aAAa;8BAChJ,CAAA,GAAA,4BAAoB,EAAE,YAAY,MAAM,CAAC,QAAQ,EAAE;;;;;AAK9D;IAEA,2CAAe","sources":["src/components/Language/LanguageChoice.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useRetorikStore } from '../Contexts/RetorikContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\n\r\nimport languageInMotherTongue from '../../translations/languageCodeToMotherTongue.json'\r\nimport { CurrentSubView } from '../../models/enums'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\nimport { SubMenuClosing as Template } from '../Templates'\r\nimport { Radio } from '../Utils'\r\n\r\nconst LanguageChoice = (): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const supported = useLocaleStore((state) => state.supported)\r\n const skipWelcome = useRetorikStore((state) => state.configuration.skipWelcome)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const setLocale = useLocaleStore((state) => state.actions.setLocale)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const [currentLanguage, setCurrentLanguage] = useState<string>(locale)\r\n\r\n const handleClose = (changed?: boolean): void => {\r\n setCurrentSubView(CurrentSubView.none)\r\n\r\n // Only send events when language has not been changed, either way it will collide with the TriggerWelcome event\r\n if (!changed) {\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowLanguages', null))\r\n }\r\n }\r\n\r\n const handleChange = (language: string): void => {\r\n setCurrentLanguage(language)\r\n }\r\n\r\n /**\r\n * Change current locale with the one selected if they are different.\r\n * Send a 'TriggerWelcome' event to get the welcome message in the new language.\r\n * @param language string\r\n */\r\n const handleSelect = (language: string): void => {\r\n const changed = language !== locale\r\n if (changed) {\r\n setLocale(language)\r\n !skipWelcome &&\r\n setTimeout(() => {\r\n sendEvent('TriggerWelcome', undefined)\r\n }, 150)\r\n }\r\n\r\n handleClose(changed)\r\n }\r\n\r\n return (\r\n <Template handleClose={() => handleClose(false)}>\r\n {/* Title */}\r\n <div className='large:rf-mt-[20vh] large-tactile:rf-mt-0 rf-title-bold-size-auto rf-font-bold'>{capitalizeFirstLetter(translation.language.change, locale)}</div>\r\n\r\n {/* Subtitle */}\r\n <div className='rf-text-lightgray rf-pt-1 rf-pb-2'>{capitalizeFirstLetter(translation.language.select, locale)}</div>\r\n\r\n {/* Languages */}\r\n {supported.map((language, key) => {\r\n return (\r\n <div key={key} className={`rf-w-full rf-py-4 rf-border-t rf-border-t-menuBorder ${key === 0 && 'large:rf-border-t-0'}`}>\r\n <Radio title={languageInMotherTongue[language]} checked={language === currentLanguage} handleChange={(): void => handleChange(language)} />\r\n </div>\r\n )\r\n })}\r\n\r\n {/* Validation button */}\r\n <div className='rf-w-full rf-mt-8 rf-flex rf-justify-center'>\r\n <button className='rf-px-8 rf-py-3 rf-text-secondary rf-font-bold rf-border-2 rf-border-secondary rf-rounded-lg' onClick={(): void => handleSelect(currentLanguage)}>\r\n {capitalizeFirstLetter(translation.common.validate, locale)}\r\n </button>\r\n </div>\r\n </Template>\r\n )\r\n}\r\n\r\nexport default LanguageChoice\r\n"],"names":[],"version":3,"file":"LanguageChoice.623ee802.js.map"}
|
|
@@ -63,10 +63,7 @@ const $6bd994e5ef61a032$var$LanguageChoice = ()=>{
|
|
|
63
63
|
const handleClose = (changed)=>{
|
|
64
64
|
setCurrentSubView((0, $7WHA7.CurrentSubView).none);
|
|
65
65
|
// Only send events when language has not been changed, either way it will collide with the TriggerWelcome event
|
|
66
|
-
if (!changed)
|
|
67
|
-
sendEvent('Davi.CloseWindow', null);
|
|
68
|
-
sendEvent('Davi.CloseWindowLanguages', null);
|
|
69
|
-
}
|
|
66
|
+
if (!changed) sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowLanguages', null));
|
|
70
67
|
};
|
|
71
68
|
const handleChange = (language)=>{
|
|
72
69
|
setCurrentLanguage(language);
|
|
@@ -122,4 +119,4 @@ var $6bd994e5ef61a032$export$2e2bcd8739ae039 = $6bd994e5ef61a032$var$LanguageCho
|
|
|
122
119
|
});
|
|
123
120
|
|
|
124
121
|
|
|
125
|
-
//# sourceMappingURL=LanguageChoice.
|
|
122
|
+
//# sourceMappingURL=LanguageChoice.ff0cd04c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,MAAM,uCAAiB;IACrB,MAAM,cAAc,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,mBAAmB;IACvE,MAAM,SAAS,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,MAAM;IACrD,MAAM,YAAY,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,SAAS;IAC3D,MAAM,cAAc,CAAA,GAAA,sBAAc,EAAE,CAAC,QAAU,MAAM,aAAa,CAAC,WAAW;IAC9E,MAAM,oBAAoB,CAAA,GAAA,oBAAY,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,iBAAiB;IAClF,MAAM,YAAY,CAAA,GAAA,qBAAa,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IACnE,MAAM,YAAY,CAAA,GAAA,yBAAiB,EAAE,CAAC,QAAU,MAAM,OAAO,CAAC,SAAS;IAEvE,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,CAAA,GAAA,qBAAO,EAAU;IAE/D,MAAM,cAAc,CAAC;QACnB,kBAAkB,CAAA,GAAA,qBAAa,EAAE,IAAI;QAErC,gHAAgH;QAChH,IAAI,CAAC,SACH,UAAU,oBAAoB,MAAM,IAAM,UAAU,6BAA6B;IAErF;IAEA,MAAM,eAAe,CAAC;QACpB,mBAAmB;IACrB;IAEA;;;;GAIC,GACD,MAAM,eAAe,CAAC;QACpB,MAAM,UAAU,aAAa;QAC7B,IAAI,SAAS;YACX,UAAU;YACV,CAAC,eACC,WAAW;gBACT,UAAU,kBAAkB;YAC9B,GAAG;QACP;QAEA,YAAY;IACd;IAEA,qBACE,iCAAC,CAAA,GAAA,qBAAO;QAAE,aAAa,IAAM,YAAY;;0BAEvC,gCAAC;gBAAI,WAAU;0BAAiF,CAAA,GAAA,4BAAoB,EAAE,YAAY,QAAQ,CAAC,MAAM,EAAE;;0BAGnJ,gCAAC;gBAAI,WAAU;0BAAqC,CAAA,GAAA,4BAAoB,EAAE,YAAY,QAAQ,CAAC,MAAM,EAAE;;YAGtG,UAAU,GAAG,CAAC,CAAC,UAAU;gBACxB,qBACE,gCAAC;oBAAc,WAAW,CAAC,qDAAqD,EAAE,QAAQ,KAAK,uBAAuB;8BACpH,cAAA,gCAAC,CAAA,GAAA,YAAI;wBAAE,OAAO,CAAA,GAAA,6CAAqB,CAAC,CAAC,SAAS;wBAAE,SAAS,aAAa;wBAAiB,cAAc,IAAY,aAAa;;mBADtH;YAId;0BAGA,gCAAC;gBAAI,WAAU;0BACb,cAAA,gCAAC;oBAAO,WAAU;oBAA+F,SAAS,IAAY,aAAa;8BAChJ,CAAA,GAAA,4BAAoB,EAAE,YAAY,MAAM,CAAC,QAAQ,EAAE;;;;;AAK9D;IAEA,2CAAe","sources":["src/components/Language/LanguageChoice.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\nimport { useRetorikStore } from '../Contexts/RetorikContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\n\r\nimport languageInMotherTongue from '../../translations/languageCodeToMotherTongue.json'\r\nimport { CurrentSubView } from '../../models/enums'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\nimport { SubMenuClosing as Template } from '../Templates'\r\nimport { Radio } from '../Utils'\r\n\r\nconst LanguageChoice = (): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const supported = useLocaleStore((state) => state.supported)\r\n const skipWelcome = useRetorikStore((state) => state.configuration.skipWelcome)\r\n const setCurrentSubView = useUtilsStore((state) => state.actions.setCurrentSubView)\r\n const setLocale = useLocaleStore((state) => state.actions.setLocale)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const [currentLanguage, setCurrentLanguage] = useState<string>(locale)\r\n\r\n const handleClose = (changed?: boolean): void => {\r\n setCurrentSubView(CurrentSubView.none)\r\n\r\n // Only send events when language has not been changed, either way it will collide with the TriggerWelcome event\r\n if (!changed) {\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowLanguages', null))\r\n }\r\n }\r\n\r\n const handleChange = (language: string): void => {\r\n setCurrentLanguage(language)\r\n }\r\n\r\n /**\r\n * Change current locale with the one selected if they are different.\r\n * Send a 'TriggerWelcome' event to get the welcome message in the new language.\r\n * @param language string\r\n */\r\n const handleSelect = (language: string): void => {\r\n const changed = language !== locale\r\n if (changed) {\r\n setLocale(language)\r\n !skipWelcome &&\r\n setTimeout(() => {\r\n sendEvent('TriggerWelcome', undefined)\r\n }, 150)\r\n }\r\n\r\n handleClose(changed)\r\n }\r\n\r\n return (\r\n <Template handleClose={() => handleClose(false)}>\r\n {/* Title */}\r\n <div className='large:rf-mt-[20vh] large-tactile:rf-mt-0 rf-title-bold-size-auto rf-font-bold'>{capitalizeFirstLetter(translation.language.change, locale)}</div>\r\n\r\n {/* Subtitle */}\r\n <div className='rf-text-lightgray rf-pt-1 rf-pb-2'>{capitalizeFirstLetter(translation.language.select, locale)}</div>\r\n\r\n {/* Languages */}\r\n {supported.map((language, key) => {\r\n return (\r\n <div key={key} className={`rf-w-full rf-py-4 rf-border-t rf-border-t-menuBorder ${key === 0 && 'large:rf-border-t-0'}`}>\r\n <Radio title={languageInMotherTongue[language]} checked={language === currentLanguage} handleChange={(): void => handleChange(language)} />\r\n </div>\r\n )\r\n })}\r\n\r\n {/* Validation button */}\r\n <div className='rf-w-full rf-mt-8 rf-flex rf-justify-center'>\r\n <button className='rf-px-8 rf-py-3 rf-text-secondary rf-font-bold rf-border-2 rf-border-secondary rf-rounded-lg' onClick={(): void => handleSelect(currentLanguage)}>\r\n {capitalizeFirstLetter(translation.common.validate, locale)}\r\n </button>\r\n </div>\r\n </Template>\r\n )\r\n}\r\n\r\nexport default LanguageChoice\r\n"],"names":[],"version":3,"file":"LanguageChoice.ff0cd04c.js.map","sourceRoot":"../"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./Weather.
|
|
1
|
+
import "./Weather.cf58823d.js";
|
|
2
2
|
import {jsxs as $7qgKV$jsxs, jsx as $7qgKV$jsx} from "react/jsx-runtime";
|
|
3
3
|
import $7qgKV$react, {useState as $7qgKV$useState, useRef as $7qgKV$useRef, useEffect as $7qgKV$useEffect, useMemo as $7qgKV$useMemo} from "react";
|
|
4
4
|
|
|
@@ -87,10 +87,7 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
|
|
|
87
87
|
muted && setMuted(false);
|
|
88
88
|
return ()=>{
|
|
89
89
|
// Send closing events unless we are using RetorikNews component
|
|
90
|
-
if (!isRetorikNews)
|
|
91
|
-
sendEvent('Davi.CloseWindow', null);
|
|
92
|
-
sendEvent('Davi.CloseWindowNews', null);
|
|
93
|
-
}
|
|
90
|
+
if (!isRetorikNews) sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowNews', null));
|
|
94
91
|
};
|
|
95
92
|
}, []);
|
|
96
93
|
/**
|
|
@@ -298,6 +295,8 @@ var $1Qww3 = parcelRequire("1Qww3");
|
|
|
298
295
|
|
|
299
296
|
var $aNpqK = parcelRequire("aNpqK");
|
|
300
297
|
|
|
298
|
+
var $i1rfm = parcelRequire("i1rfm");
|
|
299
|
+
|
|
301
300
|
var $j67YK = parcelRequire("j67YK");
|
|
302
301
|
|
|
303
302
|
var $kThjX = parcelRequire("kThjX");
|
|
@@ -314,7 +313,8 @@ const $c6bafeb4a00d3b53$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
|
|
|
314
313
|
const newsConfiguration = (0, $1Qww3.useViewStore)((state)=>state.configurations.views.news);
|
|
315
314
|
const currentDeviceType = (0, $1Qww3.useViewStore)((state)=>state.currentDeviceType);
|
|
316
315
|
const retorikNewsEnded = (0, $j67YK.useUtilsStore)((state)=>state.retorikNewsEnded);
|
|
317
|
-
const
|
|
316
|
+
const addToStreamingQueue = (0, $i1rfm.useSpeechStore)((state)=>state.actions.addToStreamingQueue);
|
|
317
|
+
const setRetorikNewsEnded = (0, $j67YK.useUtilsStore)((state)=>state.actions.setRetorikNewsEnded);
|
|
318
318
|
const sendEvent = (0, $aNpqK.useDirectlineStore)((state)=>state.actions.sendEvent);
|
|
319
319
|
const [carouselGridRowStart, setCarouselGridRowStart] = (0, $7qgKV$useState)();
|
|
320
320
|
const [carouselGridRowSpan, setCarouselGridRowSpan] = (0, $7qgKV$useState)();
|
|
@@ -434,8 +434,8 @@ const $c6bafeb4a00d3b53$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
|
|
|
434
434
|
...activity,
|
|
435
435
|
speak: `${textTitle}${textSubtitle}${currentNew.text}`
|
|
436
436
|
};
|
|
437
|
-
|
|
438
|
-
}
|
|
437
|
+
addToStreamingQueue(tempActivity);
|
|
438
|
+
}
|
|
439
439
|
}, [
|
|
440
440
|
activity,
|
|
441
441
|
current
|
|
@@ -727,4 +727,4 @@ var $5485971f80937390$export$2e2bcd8739ae039 = $5485971f80937390$var$BannerTopLa
|
|
|
727
727
|
|
|
728
728
|
|
|
729
729
|
|
|
730
|
-
//# sourceMappingURL=NewsContainer.
|
|
730
|
+
//# sourceMappingURL=NewsContainer.05bb1b19.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/components/News/NewsContainer.tsx","src/components/News/Time.tsx","src/components/News/News.tsx","src/hooks/useNews.tsx","src/components/News/Banner.tsx","src/components/News/BannerTopMobile.tsx","src/components/News/BannerTopLarge.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useSpeechStore } from '../Contexts/SpeechContext'\r\nimport { useRetorikStore } from '../Contexts/RetorikContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\n\r\nimport type { NewsConfig } from '../../models/types'\r\nimport { Routes } from '../../models/enums'\r\n\r\nimport Background from '../Common/Background'\r\nimport Time from '../News/Time'\r\nimport News from '../News/News'\r\nimport Weather from '../Weather/Weather'\r\nimport AbsoluteLargeClosingButton from '../Utils/SubView/AbsoluteLargeClosingButton'\r\nimport CloseButton from '../Common/CloseButton'\r\nimport MenuDisplayer from '../Menus/MenuDisplayer'\r\nimport { BackButton } from '../Menu/Common'\r\n\r\ninterface NewsContainerProps {\r\n hideMenu?: boolean\r\n isRetorikNews?: boolean\r\n handleEndedWithoutloop?: () => void\r\n}\r\n\r\n// Steps enum\r\nenum Steps {\r\n opening = 1,\r\n news,\r\n events,\r\n weather,\r\n ending\r\n}\r\n\r\nconst NewsContainer = ({ hideMenu, isRetorikNews, handleEndedWithoutloop }: NewsContainerProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const configuration = useRetorikStore((state) => state.configuration)\r\n const muted = useSpeechStore((state) => state.muted)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const isLandscape = useViewStore((state) => state.isLandscape)\r\n const isBorne = useViewStore((state) => state.isBorne)\r\n const configurations = useViewStore((state) => state.configurations)\r\n const { setRoute, setDisplayControls } = useViewStore((state) => state.actions)\r\n const setMuted = useSpeechStore((state) => state.actions.setMuted)\r\n const setDisplayAgentInNews = useRetorikStore((state) => state.actions.setDisplayAgentInNews)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const [displayData, setDisplayData] = useState<NewsConfig>(configurations.views.news || configurations.views.home)\r\n const [step, setStep] = useState<number>(configurations.views.news?.openingVideo ? Steps.opening : Steps.news)\r\n const timerRef: React.MutableRefObject<any> = useRef(null)\r\n const newsEndedTimerRef: React.MutableRefObject<any> = useRef(null)\r\n\r\n /**\r\n * On call :\r\n * - if the component is news-only, return\r\n * - else set ViewContext's route state to 'home'\r\n */\r\n const handleBack = (): void => {\r\n if (isRetorikNews) {\r\n return\r\n }\r\n setRoute(Routes.Home)\r\n }\r\n\r\n useEffect(() => {\r\n configuration.useOldRemote && setDisplayControls(false)\r\n muted && setMuted(false)\r\n\r\n return () => {\r\n // Send closing events unless we are using RetorikNews component\r\n if (!isRetorikNews) {\r\n sendEvent('Davi.CloseWindow', null, () => sendEvent('Davi.CloseWindowNews', null))\r\n }\r\n }\r\n }, [])\r\n\r\n /**\r\n * On step change :\r\n * - switch on the current step to launch corresponding processing\r\n * On component unmount :\r\n * - clear timerRef timeout\r\n */\r\n useEffect(() => {\r\n switch (step) {\r\n case Steps.opening: {\r\n setDisplayAgentInNews(false)\r\n const videoUrl = configurations.views.news?.openingVideo\r\n videoUrl ? setViewContextCurrentConfiguration(videoUrl as string) : setStep(Steps.news)\r\n break\r\n }\r\n case Steps.news:\r\n setDisplayAgentInNews(true)\r\n setDisplayData(configurations.views.news || configurations.views.home)\r\n break\r\n case Steps.events:\r\n break\r\n case Steps.weather:\r\n setDisplayAgentInNews(false)\r\n // If the position is known, display the weather page during 10 seconds, otherwise switch to the next step directly\r\n configuration.position?.latitude && configuration.position?.longitude\r\n ? (timerRef.current = setTimeout(() => {\r\n setStep(Steps.ending)\r\n }, 10000))\r\n : setStep(Steps.ending)\r\n break\r\n case Steps.ending: {\r\n setDisplayAgentInNews(false)\r\n const videoUrl = configurations.views.news?.openingVideo\r\n videoUrl ? setViewContextCurrentConfiguration(videoUrl as string) : exitNewsOrLoop()\r\n break\r\n }\r\n default:\r\n break\r\n }\r\n\r\n return (): void => {\r\n timerRef && clearTimeout(timerRef.current)\r\n newsEndedTimerRef && clearTimeout(newsEndedTimerRef.current)\r\n }\r\n }, [step])\r\n\r\n /**\r\n * On call :\r\n * - set the current display configuration to have the given video as background\r\n * @param videoUrl\r\n */\r\n const setViewContextCurrentConfiguration = (videoUrl: string): void => {\r\n setDisplayData({\r\n ...configurations.views.news,\r\n background: {\r\n video: videoUrl,\r\n style: 'video'\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * On call :\r\n * - send the event 'newsEnded' used in retorik Kiosk\r\n * - if the component is news-only :\r\n * + if 'loop' is explicitly set to false, call props' handleEndedWithoutloop method if defined. Call handleBack method otherwise\r\n * + if 'loop' is not false, loop by setting step state to Steps.news\r\n * - or else if 'loop' parameter in configuration is true, get back to Steps.news step. Call handleBack method otherwise\r\n */\r\n const exitNewsOrLoop = (): void => {\r\n // Send event 'newsEnded'\r\n const endEvent = new Event('newsEnded')\r\n document.dispatchEvent(endEvent)\r\n // Relaunch from the start if this is a news-only component and loop hasn't explicitly been set to false\r\n isRetorikNews\r\n ? displayData.loop !== false\r\n ? setStep(Steps.news)\r\n : handleEndedWithoutloop\r\n ? handleEndedWithoutloop()\r\n : handleBack()\r\n : // Relaunch from the start if the loop is activated, otherwise get back to homepage\r\n displayData.loop\r\n ? setStep(Steps.news)\r\n : handleBack()\r\n }\r\n\r\n /**\r\n * On video end :\r\n * - if we are at the opening step, let's set the step state to Steps.news to launch the news\r\n * - if we are at the ending step, call exitNewsOrLoop function\r\n */\r\n const handleVideoEnd = (): void => {\r\n switch (step) {\r\n case Steps.opening:\r\n setStep(Steps.news)\r\n break\r\n case Steps.ending:\r\n exitNewsOrLoop()\r\n break\r\n }\r\n }\r\n\r\n /**\r\n * On news end :\r\n * - wait 3 seconds\r\n * - get to the next step (Steps.events)\r\n */\r\n const handleNewsEnd = (): void => {\r\n newsEndedTimerRef &&\r\n (newsEndedTimerRef.current = setTimeout(() => {\r\n // setStep(Steps.events)\r\n setStep(Steps.weather)\r\n }, 3000))\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <Background config={displayData.background} videoLoop={false} videoMuted={true} onVideoEnded={handleVideoEnd} />\r\n\r\n {/* Timer + back button in mobile / widget mode */}\r\n {isMobile && !isRetorikNews && !hideMenu ? (\r\n <div className='rf-relative rf-z-util ltr:rf-col-start-1 rtl:rf-col-end-1 rf-col-span-full rf-row-start-1 rf-flex rf-flex-col rf-gap-2 rf-items-start'>\r\n <BackButton title={translation.common.back} handleBack={handleBack} className='ltr:rf-pr-2 rtl:rf-pl-2 rf-mt-4 ltr:rf-ml-4 rtl:rf-mr-4 rf-text-size-auto rf-bg-truewhite rf-rounded-lg' />\r\n <Time belowReturnButton={true} />\r\n </div>\r\n ) : (\r\n <Time />\r\n )}\r\n\r\n {/* News step */}\r\n {step === Steps.news && <News intervalInSeconds={displayData.intervalInSeconds ? (displayData.intervalInSeconds as number) : undefined} onEnd={handleNewsEnd} isRetorikNews={isRetorikNews} />}\r\n\r\n {step === Steps.weather && <Weather handleClose={handleBack} />}\r\n\r\n {/* Closing button if it needs to be displayed */}\r\n {!hideMenu && <AbsoluteLargeClosingButton dashboardVisible={true} onClick={handleBack} />}\r\n\r\n {!hideMenu && isLandscape && !configuration.useOldRemote && !isRetorikNews && <CloseButton onClick={handleBack} className='rf-z-menu' showLabel={true} />}\r\n\r\n {!hideMenu && isBorne && !configuration.useOldRemote && !isRetorikNews && <MenuDisplayer hideMenu={configuration?.hideMenu} />}\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default NewsContainer\r\n","import React, { useEffect, useState, useRef } from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\n\r\ninterface TimeProps {\r\n belowReturnButton?: boolean\r\n}\r\n\r\nconst Time = ({ belowReturnButton }: TimeProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.locale)\r\n const [time, setTime] = useState<string>('')\r\n const timerRef: React.MutableRefObject<any> = useRef(null)\r\n\r\n /**\r\n * Set current time (hours and minutes) depending on the locale (ex: adds AM/PM when needed)\r\n */\r\n const setCurrentTime = (): void => {\r\n const now = new Date()\r\n setTime(\r\n now.toLocaleTimeString(locale, {\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * On component mount :\r\n * - set time\r\n * - set interval for time update\r\n * On component unmount :\r\n * - clear interval\r\n */\r\n useEffect(() => {\r\n setCurrentTime()\r\n timerRef && (timerRef.current = setInterval(setCurrentTime, 1000))\r\n\r\n return (): void => timerRef && clearInterval(timerRef.current)\r\n }, [])\r\n\r\n return (\r\n <div\r\n className={`rf-relative ${\r\n belowReturnButton\r\n ? 'ltr:rf-ml-4 rtl:rf-mr-4'\r\n : 'rf-col-start-1 rf-col-span-2 rf-row-start-1 rf-row-span-2 rf-self-start rf-justify-self-start rf-m-4 large:rf-m-8'\r\n }`}\r\n >\r\n <div className='rf-w-fit rf-h-fit rf-flex rf-flex-col ltr:rf-justify-start rtl:rf-justify-end ltr:rf-items-start rtl:rf-items-end rf-text-white'>\r\n {/* Text 'Live' + round */}\r\n <div className='rf-w-full rf-text-size-auto rf-px-3 rf-py-0 large:rf-px-4 large:rf-py-1 rf-text-center rf-font-semibold rf-bg-red-600 rf-whitespace-nowrap'>\r\n {`${translation.news.live.toLocaleUpperCase(locale)} \\u25cf`}\r\n </div>\r\n {/* Time */}\r\n <div className='rf-w-full rf-title-size-auto rf-px-3 rf-py-0 large:rf-px-4 large:rf-py-1 rf-text-center rf-font-bold rf-bg-blue-500'>\r\n {time}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Time\r\n","import React, { useEffect, useMemo, useState, useRef } from 'react'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useDirectlineStore } from '../Contexts/DirectlineContext'\r\nimport { useSpeechStore } from '../Contexts/SpeechContext'\r\nimport { useUtilsStore } from '../Contexts/UtilsContext'\r\n\r\nimport useNews from '../../hooks/useNews'\r\n\r\nimport type { Image, Media } from '../../models/attachmentTypes'\r\nimport { RetorikActivity } from '../../models/activityTypes'\r\nimport { DeviceType, Routes } from '../../models/enums'\r\n\r\nimport Banner from './Banner'\r\nimport { Carousel } from '../Utils'\r\n\r\ntype NewsProps = {\r\n intervalInSeconds?: number\r\n onEnd: () => void\r\n isRetorikNews?: boolean\r\n}\r\n\r\nconst News = ({ intervalInSeconds = 3, onEnd, isRetorikNews }: NewsProps): JSX.Element => {\r\n const { newsAttachments, activity } = useNews()\r\n const route = useViewStore((state) => state.route)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const newsConfiguration = useViewStore((state) => state.configurations.views.news)\r\n const currentDeviceType = useViewStore((state) => state.currentDeviceType)\r\n const retorikNewsEnded = useUtilsStore((state) => state.retorikNewsEnded)\r\n const addToStreamingQueue = useSpeechStore((state) => state.actions.addToStreamingQueue)\r\n const setRetorikNewsEnded = useUtilsStore((state) => state.actions.setRetorikNewsEnded)\r\n const sendEvent = useDirectlineStore((state) => state.actions.sendEvent)\r\n\r\n const [carouselGridRowStart, setCarouselGridRowStart] = useState<number>()\r\n const [carouselGridRowSpan, setCarouselGridRowSpan] = useState<number>()\r\n const [bannerGridRowStart, setBannerGridRowStart] = useState<number>(10)\r\n const [bannerGridRowSpan, setBannerGridRowSpan] = useState<number>(3)\r\n // Banner's align-self is flex-end if the position of the banner hasn't been changed, flex-start in borne / landscape modes otherwise\r\n const [alignSelfEnd, setAlignSelfEnd] = useState<boolean>(true)\r\n const [current, setCurrent] = useState<number>(0)\r\n const timerRef: React.MutableRefObject<any> = useRef(null)\r\n\r\n const news = useMemo(() => {\r\n return newsAttachments.map((newsAttachement) => newsAttachement.content)\r\n }, [newsAttachments])\r\n\r\n useEffect(() => {\r\n if (!newsAttachments.length) {\r\n setTimeout(() => {\r\n sendEvent('news.getAllNews', null)\r\n }, 2000)\r\n }\r\n\r\n return (): void => {\r\n timerRef && clearTimeout(timerRef.current)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n switch (currentDeviceType) {\r\n case DeviceType.mobile:\r\n case DeviceType.widget: {\r\n // Set carousel's and banner's positions\r\n setAlignSelfEnd(true)\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(9)\r\n setBannerGridRowStart(10)\r\n setBannerGridRowSpan(3)\r\n break\r\n }\r\n case DeviceType.landscape:\r\n case DeviceType.widgetLandscape: {\r\n // Check banner's position and set carousel's position if there are no position data for this one\r\n if (newsConfiguration?.bannerPosition?.landscape) {\r\n const start = newsConfiguration.bannerPosition.landscape.containerRowStart || 10\r\n const end = newsConfiguration.bannerPosition.landscape.containerRowEnd || 13\r\n\r\n setAlignSelfEnd(false)\r\n setBannerGridRowStart(start)\r\n setBannerGridRowSpan(end - start)\r\n\r\n if (!newsConfiguration?.mediaPosition?.landscape) {\r\n // The base row span of the carousel is 9, if the custom position of the banner allows this span, let's keep it. If not, let's use the max span available.\r\n if (start > 9) {\r\n setCarouselGridRowStart(start - 9)\r\n setCarouselGridRowSpan(9)\r\n } else {\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(start - 1)\r\n }\r\n\r\n break\r\n }\r\n } else {\r\n setAlignSelfEnd(true)\r\n setBannerGridRowStart(10)\r\n setBannerGridRowSpan(3)\r\n }\r\n\r\n // Check carousel's position\r\n if (newsConfiguration?.mediaPosition?.landscape) {\r\n const start = newsConfiguration.mediaPosition.landscape.containerRowStart || 1\r\n const end = newsConfiguration.mediaPosition.landscape.containerRowEnd || 10\r\n\r\n setCarouselGridRowStart(start)\r\n setCarouselGridRowStart(end - start)\r\n } else {\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(9)\r\n }\r\n\r\n break\r\n }\r\n case DeviceType.borne:\r\n case DeviceType.widgetBorne: {\r\n // Check banner's position and set carousel's position if there are no position data for this one\r\n if (newsConfiguration?.bannerPosition?.borne) {\r\n const start = newsConfiguration.bannerPosition.borne.containerRowStart || 10\r\n const end = newsConfiguration.bannerPosition.borne.containerRowEnd || 13\r\n\r\n setAlignSelfEnd(false)\r\n setBannerGridRowStart(start)\r\n setBannerGridRowSpan(end - start)\r\n\r\n if (!newsConfiguration?.mediaPosition?.borne) {\r\n // The base row span of the carousel is 4, if the custom position of the banner allows this span, let's keep it. If not, let's use the max span available.\r\n if (start > 4) {\r\n setCarouselGridRowStart(start - 4)\r\n setCarouselGridRowSpan(4)\r\n } else {\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(start - 1)\r\n }\r\n\r\n break\r\n }\r\n } else {\r\n setAlignSelfEnd(true)\r\n setBannerGridRowStart(10)\r\n setBannerGridRowSpan(3)\r\n }\r\n\r\n // Check carousel's position\r\n if (newsConfiguration?.mediaPosition?.borne) {\r\n const start = newsConfiguration.mediaPosition.borne.containerRowStart || 7\r\n const end = newsConfiguration.mediaPosition.borne.containerRowEnd || 11\r\n\r\n setCarouselGridRowStart(start)\r\n setCarouselGridRowSpan(end - start)\r\n } else {\r\n setCarouselGridRowStart(7)\r\n setCarouselGridRowSpan(4)\r\n }\r\n break\r\n }\r\n }\r\n }, [newsConfiguration, currentDeviceType])\r\n\r\n useEffect(() => {\r\n const currentNew = news[current]\r\n if (currentNew) {\r\n const textTitle = newsConfiguration?.removeTitleFromTextToSpeak ? '' : `${currentNew.title}, <break/> `\r\n const textSubtitle = newsConfiguration?.removeSubtitleFromTextToSpeak ? '' : `${currentNew.subtitle}: <break/> `\r\n\r\n const tempActivity: RetorikActivity = {\r\n ...activity,\r\n speak: `${textTitle}${textSubtitle}${currentNew.text}`\r\n } as RetorikActivity\r\n\r\n addToStreamingQueue(tempActivity)\r\n }\r\n }, [activity, current])\r\n\r\n const currentMedia = useMemo<Array<Image | Media>>(() => {\r\n const currentNew = news[current]\r\n if (currentNew) {\r\n if (currentNew.media?.length) {\r\n return currentNew.media\r\n } else if (currentNew.image?.url) {\r\n return [currentNew.image]\r\n }\r\n }\r\n\r\n return []\r\n }, [news, current])\r\n\r\n useEffect(() => {\r\n if (retorikNewsEnded) {\r\n if (news.length) {\r\n if (current < news.length - 1) {\r\n const delay = current < news.length - 1 ? intervalInSeconds : intervalInSeconds * 3\r\n timerRef && clearTimeout(timerRef.current)\r\n if (route === Routes.News || isRetorikNews) {\r\n timerRef.current = setTimeout(next, delay * 1000)\r\n }\r\n } else {\r\n onEnd()\r\n }\r\n }\r\n\r\n setRetorikNewsEnded(false)\r\n }\r\n }, [retorikNewsEnded])\r\n\r\n const next = (): void => {\r\n const next = (current + 1) % news.length\r\n changeNews(next)\r\n }\r\n\r\n const changeNews = (next: number): void => {\r\n setCurrent(next)\r\n }\r\n\r\n return news.length && current >= 0 ? (\r\n <React.Fragment>\r\n {/* Carousel in landscape / borne display */}\r\n {!isMobile && (\r\n <div\r\n className='rf-relative rf-col-start-5 rf-col-span-3 large-vertical:rf-col-start-2 large-vertical:rf-col-end-8 rf-flex rf-justify-center rf-items-center'\r\n style={{\r\n gridRow: `${carouselGridRowStart} / span ${carouselGridRowSpan}`\r\n }}\r\n >\r\n {currentMedia.length ? (\r\n <Carousel className='rf-z-[10] rf-max-h-4/5 large-vertical:rf-max-h-11/12 rf-max-w-full' medias={news[current].media || [news[current].image || { url: '' }]} />\r\n ) : (\r\n <React.Fragment />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Lower banner with title / subtitle / text */}\r\n <Banner news={news[current]} gridRowStart={bannerGridRowStart} gridRowSpan={bannerGridRowSpan} alignSelfEnd={alignSelfEnd} />\r\n </React.Fragment>\r\n ) : (\r\n <React.Fragment />\r\n )\r\n}\r\n\r\nexport default News\r\n","import { CONTENT_TYPE_NEWS, NewsContent } from '../models/attachmentTypes'\r\nimport type { RetorikActivity } from '../models/activityTypes'\r\nimport { useActivityStore } from '../components/Contexts/ActivityContext'\r\n\r\ntype NewsAttachment = {\r\n contentType: string\r\n content: NewsContent\r\n}\r\n\r\nconst useNews = (): {\r\n newsAttachments: Array<NewsAttachment>\r\n activity?: RetorikActivity\r\n} => {\r\n const activities = useActivityStore((state) => state.botEventActivities)\r\n\r\n if (!activities.length) {\r\n return { newsAttachments: [] }\r\n }\r\n\r\n // Filter messages that can income during news, with label = Davi.BringupMessage\r\n const filterBringUpActivities = activities.filter(\r\n (act: any) => act.label !== 'Davi.BringupMessage'\r\n )\r\n\r\n const activity = filterBringUpActivities[\r\n filterBringUpActivities.length - 1\r\n ] as any\r\n\r\n if (!activity || !activity.attachments?.length) {\r\n return { newsAttachments: [], activity }\r\n }\r\n\r\n const newsAttachments: NewsAttachment[] = []\r\n activity.attachments.forEach((attachment) => {\r\n if (attachment.contentType === CONTENT_TYPE_NEWS) {\r\n newsAttachments.push({\r\n contentType: CONTENT_TYPE_NEWS,\r\n content: attachment.content || ''\r\n })\r\n }\r\n })\r\n\r\n return { newsAttachments, activity }\r\n}\r\n\r\nexport default useNews\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\r\nimport { useViewStore } from '../Contexts/ViewContext'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\n\r\nimport type { NewsContent } from '../../models/attachmentTypes'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\nimport BannerTopMobile from './BannerTopMobile'\r\nimport BannerTopLarge from './BannerTopLarge'\r\n\r\ninterface BannerProps {\r\n news: NewsContent\r\n gridRowStart: number\r\n gridRowSpan: number\r\n alignSelfEnd: boolean\r\n}\r\n\r\nconst Banner = ({ news, gridRowStart, gridRowSpan, alignSelfEnd }: BannerProps): JSX.Element => {\r\n const translation = useLocaleStore((state) => state.currentTranslations)\r\n const locale = useLocaleStore((state) => state.localeForRetorikStudioContent)\r\n const isMobile = useViewStore((state) => state.isMobile)\r\n const currentWidth = useViewStore((state) => state.currentWidth)\r\n const newsConfiguration = useViewStore((state) => state.configurations.views.news)\r\n\r\n const timerRef: React.MutableRefObject<any> = useRef(null)\r\n const [scrollDuration, setScrollDuration] = useState<number>(0)\r\n\r\n const category = useMemo<string>(() => {\r\n if (news.category) {\r\n return news.category\r\n } else if (newsConfiguration?.bannerTitleLocalized?.[locale]) {\r\n return newsConfiguration.bannerTitleLocalized[locale]\r\n } else if (newsConfiguration?.bannerTitle) {\r\n return newsConfiguration.bannerTitle\r\n }\r\n\r\n return translation.news.continuous\r\n }, [news, newsConfiguration, locale, translation])\r\n\r\n /**\r\n * Set animation for text horizontal scrolling if necessary\r\n */\r\n const updateDuration = (): void => {\r\n // Reset animation\r\n setScrollDuration(0)\r\n // Set animation, after a 1s timeout\r\n timerRef &&\r\n (timerRef.current = setTimeout(() => {\r\n setScrollDuration(Math.floor(news.text.length / 11))\r\n }, 1000))\r\n }\r\n\r\n /**\r\n * On news props change :\r\n * - call updateDuration function\r\n * On component unmount :\r\n * - clear timeout\r\n */\r\n useEffect(() => {\r\n updateDuration()\r\n\r\n return (): void => timerRef && clearTimeout(timerRef.current)\r\n }, [news])\r\n\r\n return (\r\n <div\r\n className='rf-h-fit rf-z-util rf-col-start-1 rf-col-span-full large:rf-mb-6 rf-flex rf-flex-col rf-items-center rf-glass-background rf-text-white'\r\n style={{\r\n alignSelf: alignSelfEnd ? 'flex-end' : 'flex-start',\r\n gridRow: `${gridRowStart} / span ${gridRowSpan}`\r\n }}\r\n >\r\n {/* Category + Image (mobile) + Title + Subtitle */}\r\n {isMobile ? (\r\n <BannerTopMobile category={category} title={news.title} subtitle={news.subtitle} url={news.image?.url} />\r\n ) : (\r\n <BannerTopLarge category={category} title={news.title} subtitle={news.subtitle} />\r\n )}\r\n\r\n {/* Text */}\r\n <div\r\n className='rf-w-full ltr:rf-pr-4 rtl:rf-pl-4 rf-py-2 large:rf-py-4 rf-subtitle-size-auto rf-text-black rf-bg-white rf-overflow-clip'\r\n style={{\r\n paddingLeft: currentWidth\r\n }}\r\n >\r\n {scrollDuration !== 0 ? (\r\n <p\r\n className='rf-w-max rf-whitespace-nowrap rf-animate-hScroll'\r\n style={{\r\n animation: `rf-hScroll ${scrollDuration}s infinite linear`,\r\n paddingRight: currentWidth\r\n }}\r\n >\r\n {news.text ? capitalizeFirstLetter(news.text) : '...'}\r\n </p>\r\n ) : (\r\n <p className='rf-w-max rf-whitespace-nowrap'>{news.text ? capitalizeFirstLetter(news.text) : '...'}</p>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Banner\r\n","import React from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\ninterface BannerTopMobileProps {\r\n category: string\r\n title?: string\r\n subtitle?: string\r\n url?: string\r\n}\r\n\r\nconst BannerTopMobile = ({ category, title, subtitle, url }: BannerTopMobileProps): JSX.Element => {\r\n const locale = useLocaleStore((state) => state.locale)\r\n\r\n return (\r\n <React.Fragment>\r\n <div className='rf-w-full rf-px-4 rf-py-2 rf-font-bold rf-bg-red-600 rf-whitespace-nowrap rf-text-size-auto'>{category?.toLocaleUpperCase(locale)}</div>\r\n\r\n <div className='rf-w-full rf-flex rf-flex-row'>\r\n {/* Image */}\r\n {url && (\r\n <div\r\n className='rf-aspect-video rf-w-1/4'\r\n style={{\r\n backgroundImage: `url(${url})`,\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center'\r\n }}\r\n />\r\n )}\r\n\r\n {/* Title + Subtitle */}\r\n <div className='rf-px-4 rf-py-1 rf-font-bold'>\r\n <div className='rf-text-size-auto rf-line-clamp-1'>{title && title.toLocaleUpperCase(locale)}</div>\r\n <div className='rf-text-basecustom rf-line-clamp-2'>{subtitle ? capitalizeFirstLetter(subtitle) : '...'}</div>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default BannerTopMobile\r\n","import React from 'react'\r\nimport { useLocaleStore } from '../Contexts/LocaleContext'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\ninterface BannerTopLargeProps {\r\n category: string\r\n title?: string\r\n subtitle?: string\r\n}\r\n\r\nconst BannerTopLarge = ({ category, title, subtitle }: BannerTopLargeProps): JSX.Element => {\r\n const locale = useLocaleStore((state) => state.locale)\r\n\r\n return (\r\n <React.Fragment>\r\n {/* Category + title */}\r\n <div className='rf-w-full rf-flex rf-flex-row rf-justify-start rf-text-size-auto'>\r\n <div className='rf-px-4 rf-py-3 rf-font-bold rf-bg-red-600 rf-whitespace-nowrap'>{category?.toLocaleUpperCase(locale)}</div>\r\n <div className='rf-px-4 rf-mb-2 rf-mt-2 large:rf-mt-3 rf-font-bold rf-line-clamp-1'>{title?.toLocaleUpperCase(locale)}</div>\r\n </div>\r\n\r\n {/* Subtitle */}\r\n <div className='rf-w-full rf-h-fit rf-flex rf-flex-row rf-justify-start'>\r\n <div className='rf-px-4 rf-my-2 large:rf-my-3 rf-title-large-size-auto rf-line-clamp-2'>{subtitle ? capitalizeFirstLetter(subtitle) : '...'}</div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default BannerTopLarge\r\n"],"names":[],"version":3,"file":"NewsContainer.05bb1b19.js.map"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require("./Weather.
|
|
1
|
+
require("./Weather.99917b66.js");
|
|
2
2
|
var $4L16K$reactjsxruntime = require("react/jsx-runtime");
|
|
3
3
|
var $4L16K$react = require("react");
|
|
4
4
|
|
|
@@ -101,10 +101,7 @@ const $39527ef13f22f094$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
|
|
|
101
101
|
muted && setMuted(false);
|
|
102
102
|
return ()=>{
|
|
103
103
|
// Send closing events unless we are using RetorikNews component
|
|
104
|
-
if (!isRetorikNews)
|
|
105
|
-
sendEvent('Davi.CloseWindow', null);
|
|
106
|
-
sendEvent('Davi.CloseWindowNews', null);
|
|
107
|
-
}
|
|
104
|
+
if (!isRetorikNews) sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowNews', null));
|
|
108
105
|
};
|
|
109
106
|
}, []);
|
|
110
107
|
/**
|
|
@@ -315,6 +312,8 @@ var $kUiCn = parcelRequire("kUiCn");
|
|
|
315
312
|
|
|
316
313
|
var $6QoTL = parcelRequire("6QoTL");
|
|
317
314
|
|
|
315
|
+
var $jgaO0 = parcelRequire("jgaO0");
|
|
316
|
+
|
|
318
317
|
var $7eio0 = parcelRequire("7eio0");
|
|
319
318
|
|
|
320
319
|
var $aNVXv = parcelRequire("aNVXv");
|
|
@@ -331,7 +330,8 @@ const $d399eaf5da71d3d6$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
|
|
|
331
330
|
const newsConfiguration = (0, $kUiCn.useViewStore)((state)=>state.configurations.views.news);
|
|
332
331
|
const currentDeviceType = (0, $kUiCn.useViewStore)((state)=>state.currentDeviceType);
|
|
333
332
|
const retorikNewsEnded = (0, $7eio0.useUtilsStore)((state)=>state.retorikNewsEnded);
|
|
334
|
-
const
|
|
333
|
+
const addToStreamingQueue = (0, $jgaO0.useSpeechStore)((state)=>state.actions.addToStreamingQueue);
|
|
334
|
+
const setRetorikNewsEnded = (0, $7eio0.useUtilsStore)((state)=>state.actions.setRetorikNewsEnded);
|
|
335
335
|
const sendEvent = (0, $6QoTL.useDirectlineStore)((state)=>state.actions.sendEvent);
|
|
336
336
|
const [carouselGridRowStart, setCarouselGridRowStart] = (0, $4L16K$react.useState)();
|
|
337
337
|
const [carouselGridRowSpan, setCarouselGridRowSpan] = (0, $4L16K$react.useState)();
|
|
@@ -455,8 +455,8 @@ const $d399eaf5da71d3d6$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
|
|
|
455
455
|
...activity,
|
|
456
456
|
speak: `${textTitle}${textSubtitle}${currentNew.text}`
|
|
457
457
|
};
|
|
458
|
-
|
|
459
|
-
}
|
|
458
|
+
addToStreamingQueue(tempActivity);
|
|
459
|
+
}
|
|
460
460
|
}, [
|
|
461
461
|
activity,
|
|
462
462
|
current
|
|
@@ -752,4 +752,4 @@ var $a94481e954312e6d$export$2e2bcd8739ae039 = $a94481e954312e6d$var$BannerTopLa
|
|
|
752
752
|
|
|
753
753
|
|
|
754
754
|
|
|
755
|
-
//# sourceMappingURL=NewsContainer.
|
|
755
|
+
//# sourceMappingURL=NewsContainer.5e80336b.js.map
|