{"version":3,"sources":["components/TagFilter/TagFilter.module.sass","components/Dropdown/Dropdown.module.sass","shared/icons/technology.svg","shared/icons/arrow_notes.svg","shared/icons/media_backward.svg","shared/icons/media_forward.svg","shared/icons/incomplete_hide.svg","shared/icons/incomplete_show.svg","hoc/Layout/VolumeScrub/VolumeScrub.module.sass","components/MediaGallery/GallerySection.module.sass","containers/Medias/Medias.module.sass","hoc/Layout/Toolbar/Toolbar.module.sass","components/Media/Media.module.sass","shared/icons/proto_logo.svg","shared/icons/tag_interactive_parcours.svg","hoc/Layout/Layout.module.sass","shared/icons/nav_x.svg","shared/icons/nav_home.svg","shared/icons/nav_demos.svg","shared/icons/nav_playlists.svg","shared/icons/nav_protos.svg","shared/icons/nav_projects.svg","shared/icons/nav_medias.svg","shared/icons/nav_inputs.svg","shared/icons/nav_logout.svg","hoc/Layout/SideDrawer/Backdrop/Backdrop.module.sass","hoc/Layout/SideDrawer/DrawerToggle/DrawerToggle.module.sass","shared/icons/connections_green.svg","shared/icons/volume.svg","shared/icons/add_visitor.svg","shared/icons/project_logo.svg","shared/icons/plus_symbol.svg","shared/icons/warning_sign_presets.svg","shared/icons/media_image_logo.svg","shared/icons/media_video_logo.svg","shared/icons/media_pause.svg","shared/icons/media_x.svg","shared/icons/unity_logo.svg","shared/icons/touchdesigner_logo.svg","containers/Demos/Demos.module.sass","shared/icons/tag_augmented_games.svg","shared/icons/tag_augmented_performance.svg","shared/icons/tag_interactive_popup.svg","shared/icons/tag_law.svg","shared/icons/tag_living_visual.svg","shared/icons/dropdown_arrow.svg","shared/icons/placeholder.svg","shared/icons/warning_sign.svg","shared/icons/google.svg","shared/icons/enter_block_arrow.svg","containers/Playlist/Playlist.module.sass","components/PlayablePreview/PlayablePreview.module.sass","hoc/Layout/NavigationItems/NavigationItems.module.sass","containers/Playlists/Playlists.module.sass","shared/icons/play.svg","shared/icons/search.svg","axios-instance.js","store/actions/airtableActions.js","store/actions/actionTypes.js","store/utility.js","store/reducers/airtableReducer.js","store/reducers/mqttReducer.js","store/reducers/applicationReducer.js","store-redux.js","store/actions/mqttActions.js","store/actions/applicationActions.js","utils/utils.js","utils/GoogleAuthProvider.js","hoc/Layout/NavigationItems/NavigationItems.js","hoc/Layout/SideDrawer/Backdrop/Backdrop.js","hoc/Layout/SideDrawer/SideDrawer.js","hoc/Layout/SideDrawer/DrawerToggle/DrawerToggle.js","hoc/Layout/VolumeScrub/VolumeScrub.js","hoc/Layout/Toolbar/Toolbar.js","hoc/Layout/Layout.js","components/PlayablePreview/PlayablePreview.js","components/SidebarPlaylist/SidebarPlaylist.js","containers/Demo/Demo.js","containers/Demos/Demos.js","containers/Playlist/Playlist.js","containers/Playlists/Playlists.js","components/Media/Media.js","components/MediaGallery/GallerySection.js","components/MediaGallery/GalleryTab.js","components/ProtoOrProject/Software.js","containers/Proto/Proto.js","components/TagFilter/TagFilter.js","components/Dropdown/Dropdown.js","containers/Protos/Protos.js","containers/Project/Project.js","containers/Projects/Projects.js","containers/Medias/Medias.js","containers/PlaylistItem/PlaylistItem.js","components/WarningNotice/WarningNotice.js","hoc/Layout/Login.js","App.js","index.js","containers/Proto/Proto.module.sass","containers/Protos/Protos.module.sass","containers/Projects/Projects.module.sass","containers/Demo/Demo.module.sass","shared/icons/breadcrumb_separator.svg","shared/icons/media_gradient_circle.svg","hoc/Layout/SideDrawer/SideDrawer.module.sass","components/WarningNotice/WarningNotice.module.sass","containers/Project/Project.module.sass","shared/icons/stop_button.svg","App.module.sass","components/SidebarPlaylist/SidebarPlaylist.module.sass","components/ProtoOrProject/Software.module.sass","hoc/Layout/Login.module.sass"],"names":["module","exports","instance","axios","create","baseURL","process","fetchSessionsSuccess","sessions","type","receivedAt","Date","now","fetchSessions","dispatch","get","then","response","data","catch","error","fetchSessionsFailed","fetchDemosSuccess","demos","fetchDemos","fetchDemosFailed","fetchProtosSuccess","protos","filter","proto","fields","status","fetchProtos","fetchProtosFailed","fetchPlaylistsSuccess","playlists","fetchPlaylists","fetchPlaylistsFailed","fetchPlaylistItemsSuccess","playlistItems","playlistItem","protoStatus","projectStatus","fetchPlaylistItems","fetchPlaylistItemsFailed","fetchMediasSuccess","medias","fetchMedias","fetchMediasFailed","fetchVisitorsSuccess","visitors","fetchVisitors","fetchVisitorsFailed","fetchDemonstratorsSuccess","demonstrators","fetchDemonstrators","fetchDemonstratorsFailed","fetchResponsiblesSuccess","responsibles","fetchResponsibles","fetchResponsiblesFailed","fetchFeedbacksSuccess","feedbacks","fetchFeedbacks","fetchFeedbacksFailed","fetchTechnologiesSuccess","technologies","fetchTechnologies","fetchTechnologiesFailed","fetchTagsSuccess","tags","fetchTags","fetchTagsFailed","fetchProjectsSuccess","projects","fetchProjects","fetchProjectsFailed","getItemByID","model","id","getState","airtableState","airtableReducer","find","i","updateObject","oldObject","updatedValue","initialState","reducer","state","action","mqttClient","online","presets","currentMedia","currentDemo","currentPreset","currentProto","currentProject","currentNavigation","currentVolume","currentGuestsCheckedInIds","volume","payload","sessionIds","preset","project","media","demo","demoID","playlistID","protoID","projectID","playlistItemID","rootReducer","combineReducers","mqttReducer","applicationReducer","composeEnhancers","window","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","applyMiddleware","next","thunk","MQTT_TOPIC_PUBLISH","MQTT_TOPIC_SUBSCRIBED","initMQTTClient","mqtt","connect","subscribe","on","changeMQTTClientState","onConnect","errorMQTTClient","onError","topic","JSON","parse","mqttMatch","handleMessageCurrentProtoPresets","airtableID","sendMQTTCurrentMediaRequest","sendMQTTCurrentPresetRequest","sendMQTTCurrentDemoRequest","sendMQTTCurrentProtoRequest","sendMQTTCurrentProjectRequest","sendMQTTCurrentNavigationRequest","sendMQTTCurrentVolumeRequest","sendMQTTCurrentGuestsCheckedInIdsRequest","mapTableToAction","Visits","airtableActions","Sessions","Protos","Projects","Playlists","PlaylistItems","Medias","Visitors","Demonstrators","Responsibles","Feedbacks","Technologies","Tags","Object","keys","forEach","table","onMessageArrived","onOffline","onClose","onConnectionLost","createMQTTClient","sendMQTTGeneric","sendMQTTScrubMedia","scrubValue","stringify","scrubMedia","publish","sendMQTTCurrentDemo","_","visitID","visitName","language","Time","retain","sendMQTTCurrentProject","path","title","startDemo","sendMQTTCurrentProto","uuid","sendMQTTCurrentNavigation","sendMQTTCurrentPreset","sendMQTTCurrentMedia","toLowerCase","changeNavigationPage","ids","changeNavigationPageRequest","navigateToPage","navigationData","navigate","actions","GoogleAuthContext","createContext","gapi","isSignedIn","loading","GoogleAuthProvider","children","useState","setGapi","setIsSignedIn","useScript","src","scriptLoading","scriptError","authLoading","setAuthLoading","authError","setAuthError","useEffect","load","auth2","init","client_id","listen","gapiError","err","message","Provider","value","NavigationItems","useContext","className","classes","NavigationItem","onClick","iconNavHome","alt","iconNavDemos","iconNavProtos","iconNavProjects","iconNavPlaylists","iconNavMedias","iconNavInputs","style","flexGrow","NavigationItemLast","getAuthInstance","signOut","iconNavLogout","backdrop","show","clicked","Backdrop","sideDrawer","open","closed","attachedClasses","SideDrawer","Close","Open","join","DrawerHeader","CloseButton","navXIcon","drawerToggle","DrawerToggle","width","height","viewBox","fill","xmlns","d","stroke","stroke-width","sendMQTTCurrentVolume","volumeLevel","changeVolumeLevel","scrubbing","changeScrubbingState","scrubbingStateRef","React","useRef","setScrubbingState","current","volumeScrub","document","getElementById","addEventListener","passive","e","updateVolumeLevel","removeEventListener","rect","getBoundingClientRect","leftPosition","left","totalWidthScrub","clickedPosition","clientX","touches","newVolumeLevelPercentage","min","max","Math","round","VolumeLevelContainer","VolumeLevel","VolumeIcon","iconVolume","drawerToggleClicked","currentDemoState","changeCurrentDemoState","time","changeTime","interval","setInterval","clearInterval","demoVisitorIds","session","visitId","indexOf","map","visitorId","navigationPages","CurrentNavigationPage","iconBreadcrumbSeparator","toUpperCase","currentProtoNav","CurrentProto","CurrentNavigationArrow","iconEnterBlockArrow","CurrentNavigationText","connectionsBlock","Connections","ConnectionsActive","ConnectionsArrow","ConnectionsIcon","iconConnectionsGreen","Number","length","Toolbar","CurrentNavigation","Hour","getHours","toString","padStart","getMinutes","Volume","Layout","sideDrawerOpen","toggleSideDrawer","changeState","Content","PlayablePreview","size","isActive","isPlaying","isIncomplete","thumbnail","sizes","M","PlaylistItem","ImageContainer","DescriptionContainer","Title","TitleM","L","TitleL","activeClass","Active","Playing","Wrapper","IconEnterBlock","backgroundImage","StatusNotCurated","Logo","iconProtoLogo","iconProjectLogo","protoBlocks","playlist","playlistItemsInPlaylist","key","protoThumbnail","url","projectThumbnail","placeholderImage","name","Playlist","PlaylistHeader","PlaylistHeaderTitle","PlaylistName","ProtosAndTransitions","changeDemo","visitorSessions","changeVisitorSessions","sessionsInVisit","VisitId","visitor","VisitorId","startCurrentDemo","currentPlaylist","firstItem","isProto","isProject","content","sidebarPlaylist","SidebarPlaylist","stayInPlaylist","playButton","PlayButton","playIcon","StopButton","stopButtonIcon","LeftContent","ContentHeader","CreatedContainer","CreatedInfo","CreatedInfoText","CreatedInfoDate","demoStartTime","toDateString","ContentInfo","VisitInfos","DateAndLanguage","dayjs","format","VisitGoals","VisitGoalsTitle","VisitGoalsText","DemoInfos","DemoPresentatorContainer","DemoPresentatorTitle","DemoPresentator","DemoPresentatorName","DemoBriefContainer","DemoBriefTitle","DemoBrief","visitorSession","takeawayFrame","takeaway","filename","isCheckedIn","checkinEndedAt","isConnected","Visitor","StatusConnected","StatusCheckedIn","StatusInvited","StatusContainer","Status","StatusColorCircle","Picture","PictureTakeaway","firstName","charAt","lastName","Name","Occupation","jobTitle","Company","company","AddVisitorContainer","ButtonAddVisitor","addVisitorIcon","RightContent","DemoContainer","searchbarActivated","isHomepage","search","changeSearch","generateBlocksForDemos","demosToGenerateBlocks","blocks","sort","a","b","Demo","KeyInfo","Info","PageTitle","Demos","NoDemosToday","demoBlocks","includes","startOfDay","getFullYear","getMonth","getDate","endOfDay","getTime","demosToday","demosPast","demosNext","demoBlocksToday","demoBlocksPast","demoBlocksNext","searchbar","Searchbar","iconSearch","placeholder","onChange","target","DemosContainer","ButtonNewDemo","REACT_APP_RESERVATION_URL","iconPlusSymbol","ButtonNewDemoText","changePlaylist","thumbnails","slice","playlistItemIndex","thumbnailField","Image","Details","KeyInfos","Description","PlaylistContainer","playlistBlocks","showcaseHomepage","charCodeAt","playlistIndex","Creator","mediaModalOpen","changeMediaModalOpen","controls","playingClass","isVideo","BackwardButton","BorderCircle","iconMediaGradientCircle","iconMediaBackward","PauseButton","iconMediaPause","ForwardButton","iconMediaForward","mediaInfoOpenClass","MediaInfoOpen","MediaInfoClosed","mediaType","isImage","MediaWrapper","Media","HiddenContent","ButtonClose","iconMediaX","MediaImage","ButtonInfo","Thumbnail","MediaInfos","MediaLogo","IconMediaImage","iconMediaImageLogo","iconMediaVideoLogo","MediaTitle","GallerySection","items","ContainerTitle","Grid","mediaItem","item","getMediaItems","m","photos","videos","stats","Gallery","Software","engine","SoftwareContainer","SoftwareLogo","iconUnityLogo","iconTouchDesignerLogo","SoftwareName","navigation","location","useLocation","refLeftContent","console","log","pathname","scrollTo","changeProto","activeProto","p","changeProtoLoadedState","tab","changeTab","protoLoaded","startCurrentProto","setTimeout","currentTab","presetBlocks","NotLoadedMessageBlock","WarningIcon","iconWarningSignPresets","NotLoadedMessage","Presets","Preset","activatePreset","PresetInfos","associatedTechnologies","protoTechnologies","t","technology","iconEnterTech","Technology","launchTechnology","IconTechnology","iconTechnology","relatedProtos","relatedProtosData","rp","Row4","RelatedProtos","Infos","Row2","NotesContainer","defaultActiveKey","Panel","header","Notes","split","line","iconArrowNotes","TechnologiesAndSoftwares","PresetsContainerWrapper","PresetsContainer","TechnologiesContainer","ref","FullWidth","PreviewImageContainer","PreviewImage","HeaderInfos","Tabs","Tab","ProtoContainer","filterIcons","interactiveParcours","iconTagInteractiveParcours","augmentedGames","iconTagAugmentedGames","augmentedPerformances","iconTagAugmentedPerformance","livingVisual","iconTagLivingVisual","interactivePopup","iconTagInteractivePopup","iconTagLaw","TagFilter","tag","FilterWrapper","Filter","FilterActive","uiIconKey","FilterIcon","DropdownMenu","options","activeOption","option","Dropdown","overlay","Item","DropdownMenuItem","optionIndex","text","trigger","iconDropdownArrow","engineFilter","changeEngineFilter","technologyFilter","changeTechnologyFilter","interactionFilter","changeInteractionFilter","tagFilter","changeTagFilter","showIncompleteProtos","changeShowIncompleteProtos","interactionDropdown","engineDropdown","technologyDropdown","engines","reduce","engineList","interactions","interactionList","interaction","filteredProtos","locations","created","SearchActions","Filters","PageHeaderBar","ToggleCuratedButton","iconIncompleteHide","iconIncompleteShow","ToggleCuratedIcon","changeProject","activeProject","startCurrentProject","projectTechnologies","relatedProjects","relatedProjectsData","RelatedProjects","Actions","ActionsScrub","ProjectContainer","showIncompleteProjects","changeShowIncompleteProjects","projectBlocks","filteredProjects","mediaBlocks","WarningNotice","visible","changeVisibility","closeButtonShown","changeCloseButtonVisibility","progressValue","closeButton","WarningNoticeButton","display","WarningNoticeContainer","WarningNoticeHeader","warningSignIcon","WarningNoticeMessage","textAlign","WarningNoticeAction","strokeLinecap","percent","strokeColor","showInfo","strokeWidth","Login","buttonEl","attachClickHandler","Button","svg_google","Icon","ScrollToTop","initApp","useDispatch","page","Homepage","warningNotice","Container","app","ReactDOM","render"],"mappings":"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","file":"static/js/main.fa8b707f.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"FilterWrapper\":\"TagFilter_FilterWrapper__2QPeJ\",\"Filter\":\"TagFilter_Filter__1vx_X\",\"FilterActive\":\"TagFilter_FilterActive__30EW5\",\"FilterIcon\":\"TagFilter_FilterIcon__1nF2p\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Dropdown\":\"Dropdown_Dropdown__3amkg\",\"DropdownMenu\":\"Dropdown_DropdownMenu__123Z_\",\"DropdownMenuItem\":\"Dropdown_DropdownMenuItem__2n0nR\"};","module.exports = __webpack_public_path__ + \"static/media/technology.eeeae101.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow_notes.07f556c1.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_backward.5f450aef.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_forward.a3b6ef72.svg\";","module.exports = __webpack_public_path__ + \"static/media/incomplete_hide.d440cbff.svg\";","module.exports = __webpack_public_path__ + \"static/media/incomplete_show.65e66a70.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VolumeLevelContainer\":\"VolumeScrub_VolumeLevelContainer__3v1lm\",\"VolumeLevel\":\"VolumeScrub_VolumeLevel__3sUyc\",\"VolumeIcon\":\"VolumeScrub_VolumeIcon__NMu8z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"GallerySection\":\"GallerySection_GallerySection__21x13\",\"ContainerTitle\":\"GallerySection_ContainerTitle__SiM6C\",\"Grid\":\"GallerySection_Grid__2J5v1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PageTitle\":\"Medias_PageTitle__22ovr\",\"Medias\":\"Medias_Medias__3E7Ls\",\"Searchbar\":\"Medias_Searchbar__2pSAW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Toolbar\":\"Toolbar_Toolbar__3vt5n\",\"CurrentNavigation\":\"Toolbar_CurrentNavigation__3oTxL\",\"CurrentNavigationPage\":\"Toolbar_CurrentNavigationPage__3nKzV\",\"CurrentProto\":\"Toolbar_CurrentProto__2M8_F\",\"CurrentNavigationArrow\":\"Toolbar_CurrentNavigationArrow__wpidA\",\"CurrentNavigationText\":\"Toolbar_CurrentNavigationText__gc37C\",\"Connections\":\"Toolbar_Connections__3hogw\",\"ConnectionsArrow\":\"Toolbar_ConnectionsArrow__19x-a\",\"ConnectionsIcon\":\"Toolbar_ConnectionsIcon__2VuEq\",\"Number\":\"Toolbar_Number__2XRVk\",\"ConnectionsActive\":\"Toolbar_ConnectionsActive__359GS\",\"Hour\":\"Toolbar_Hour__1pTFm\",\"Volume\":\"Toolbar_Volume__1klDc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"MediaWrapper\":\"Media_MediaWrapper__2JmLg\",\"Media\":\"Media_Media__2MWga\",\"Playing\":\"Media_Playing__2AIOY\",\"HiddenContent\":\"Media_HiddenContent__LiAOn\",\"Description\":\"Media_Description__5-Ojm\",\"ButtonClose\":\"Media_ButtonClose__ts-pY\",\"MediaImage\":\"Media_MediaImage__1rXeA\",\"MediaInfoClosed\":\"Media_MediaInfoClosed__38XbX\",\"close-media-info\":\"Media_close-media-info__2PsmY\",\"MediaInfoOpen\":\"Media_MediaInfoOpen__2Tdj-\",\"open-media-info\":\"Media_open-media-info__1-CDu\",\"ButtonInfo\":\"Media_ButtonInfo__22Jmv\",\"Thumbnail\":\"Media_Thumbnail__1lvr-\",\"BackwardButton\":\"Media_BackwardButton__17f4O\",\"BorderCircle\":\"Media_BorderCircle__2dJIQ\",\"ForwardButton\":\"Media_ForwardButton__36Nne\",\"PauseButton\":\"Media_PauseButton__1l3CB\",\"PlayButton\":\"Media_PlayButton__bFCh0\",\"MediaInfos\":\"Media_MediaInfos__1-pqV\",\"close-media-info-title\":\"Media_close-media-info-title__3CrE3\",\"open-media-info-title\":\"Media_open-media-info-title__2THlR\",\"MediaLogo\":\"Media_MediaLogo__1X8QQ\",\"IconMediaImage\":\"Media_IconMediaImage__1G1gN\",\"MediaTitle\":\"Media_MediaTitle__2n97B\"};","module.exports = __webpack_public_path__ + \"static/media/proto_logo.4cbaac61.svg\";","module.exports = __webpack_public_path__ + \"static/media/tag_interactive_parcours.0f06f43b.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Content\":\"Layout_Content__37oK7\",\"pageTitle\":\"Layout_pageTitle___zDL7\"};","module.exports = __webpack_public_path__ + \"static/media/nav_x.5faa0966.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_home.40de1076.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_demos.a325a39e.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_playlists.536e11bb.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_protos.605d8d00.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_projects.7cf9c626.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_medias.5b98ddf5.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_inputs.4268804a.svg\";","module.exports = __webpack_public_path__ + \"static/media/nav_logout.fb2cd4ae.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Backdrop\":\"Backdrop_Backdrop__3gG-l\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DrawerToggle\":\"DrawerToggle_DrawerToggle__1d8S6\"};","module.exports = __webpack_public_path__ + \"static/media/connections_green.a535c30d.svg\";","module.exports = __webpack_public_path__ + \"static/media/volume.80ef8464.svg\";","module.exports = __webpack_public_path__ + \"static/media/add_visitor.3d0b3593.svg\";","module.exports = __webpack_public_path__ + \"static/media/project_logo.b6e22f8a.svg\";","module.exports = __webpack_public_path__ + \"static/media/plus_symbol.25e6f111.svg\";","module.exports = __webpack_public_path__ + \"static/media/warning_sign_presets.b212826e.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_image_logo.ce464674.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_video_logo.686fdd66.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_pause.d8b4e221.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_x.eeb8b636.svg\";","module.exports = __webpack_public_path__ + \"static/media/unity_logo.8a361474.svg\";","module.exports = __webpack_public_path__ + \"static/media/touchdesigner_logo.33e7b118.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DemosContainer\":\"Demos_DemosContainer__3HPWJ\",\"ButtonNewDemo\":\"Demos_ButtonNewDemo__CFdPp\",\"ButtonNewDemoText\":\"Demos_ButtonNewDemoText__3ifGC\",\"PageTitle\":\"Demos_PageTitle__21bHk\",\"Demos\":\"Demos_Demos__3LLcz\",\"Demo\":\"Demos_Demo__23UvN\",\"IconEnterBlock\":\"Demos_IconEnterBlock__2yzI3\",\"DemoInfos\":\"Demos_DemoInfos__3scdf\",\"Title\":\"Demos_Title__dL61P\",\"KeyInfo\":\"Demos_KeyInfo__2pz0Z\",\"Visitors\":\"Demos_Visitors__1zU-D\",\"Searchbar\":\"Demos_Searchbar__uK-00\",\"NoDemosToday\":\"Demos_NoDemosToday__1cSui\"};","module.exports = __webpack_public_path__ + \"static/media/tag_augmented_games.7934db5f.svg\";","module.exports = __webpack_public_path__ + \"static/media/tag_augmented_performance.1843672d.svg\";","module.exports = __webpack_public_path__ + \"static/media/tag_interactive_popup.64035788.svg\";","module.exports = __webpack_public_path__ + \"static/media/tag_law.a8eb39ea.svg\";","module.exports = __webpack_public_path__ + \"static/media/tag_living_visual.2952bcb5.svg\";","module.exports = __webpack_public_path__ + \"static/media/dropdown_arrow.69ab75d7.svg\";","module.exports = __webpack_public_path__ + \"static/media/placeholder.5b40e02c.svg\";","module.exports = __webpack_public_path__ + \"static/media/warning_sign.b64d2e35.svg\";","module.exports = __webpack_public_path__ + \"static/media/google.fd7ba25c.svg\";","module.exports = __webpack_public_path__ + \"static/media/enter_block_arrow.c981c057.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PlaylistContainer\":\"Playlist_PlaylistContainer__2-0pf\",\"Details\":\"Playlist_Details__3Piyz\",\"ImageContainer\":\"Playlist_ImageContainer__3VPt9\",\"Image\":\"Playlist_Image__wuOsP\",\"KeyInfos\":\"Playlist_KeyInfos__3wmSV\",\"Title\":\"Playlist_Title__3X9Ww\",\"CreatedContainer\":\"Playlist_CreatedContainer__2b8pq\",\"CreatedImage\":\"Playlist_CreatedImage__2k4qN\",\"CreatedInfo\":\"Playlist_CreatedInfo__2syeI\",\"Description\":\"Playlist_Description__1mPOF\",\"PlayButton\":\"Playlist_PlayButton__3GfHp\",\"Playlist\":\"Playlist_Playlist__2salz\",\"PlaylistItem\":\"Playlist_PlaylistItem__orlw8\",\"IconEnterBlock\":\"Playlist_IconEnterBlock__363OL\",\"StatusNotCurated\":\"Playlist_StatusNotCurated__mmmWo\",\"DescriptionContainer\":\"Playlist_DescriptionContainer__O35Oz\",\"Logo\":\"Playlist_Logo__j12oT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Wrapper\":\"PlayablePreview_Wrapper__2h2dZ\",\"Active\":\"PlayablePreview_Active__2Z7UZ\",\"Playing\":\"PlayablePreview_Playing__30vmS\",\"PlayablePreview\":\"PlayablePreview_PlayablePreview__2aoEm\",\"IconEnterBlock\":\"PlayablePreview_IconEnterBlock__Q3tVB\",\"ImageContainer\":\"PlayablePreview_ImageContainer__1PmdS\",\"StatusNotCurated\":\"PlayablePreview_StatusNotCurated__2JZvB\",\"Image\":\"PlayablePreview_Image__2ygTl\",\"DescriptionContainer\":\"PlayablePreview_DescriptionContainer__1dSFm\",\"Logo\":\"PlayablePreview_Logo__1mGu_\",\"TitleM\":\"PlayablePreview_TitleM__1062f\",\"TitleL\":\"PlayablePreview_TitleL__2_mc6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"NavigationItems\":\"NavigationItems_NavigationItems__2C6C4\",\"NavigationItemInputsContainer\":\"NavigationItems_NavigationItemInputsContainer__zKrAx\",\"NavigationItemInputs\":\"NavigationItems_NavigationItemInputs__2JarQ\",\"NavigationItem\":\"NavigationItems_NavigationItem__GSzlG\",\"NavigationItemLast\":\"NavigationItems_NavigationItemLast__1hki3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PageTitle\":\"Playlists_PageTitle__33dS_\",\"Playlists\":\"Playlists_Playlists__25Fsv\",\"Playlist\":\"Playlists_Playlist__2KTxj\",\"IconEnterBlock\":\"Playlists_IconEnterBlock__1a210\",\"ImageContainer\":\"Playlists_ImageContainer__v5KOL\",\"Status\":\"Playlists_Status__2KTqr\",\"Image\":\"Playlists_Image__1Rb6g\",\"DescriptionContainer\":\"Playlists_DescriptionContainer__yOBT9\",\"Title\":\"Playlists_Title__2cS8L\",\"Creator\":\"Playlists_Creator__qG6yn\",\"Searchbar\":\"Playlists_Searchbar__1b8Ul\"};","module.exports = __webpack_public_path__ + \"static/media/play.b8814474.svg\";","module.exports = __webpack_public_path__ + \"static/media/search.fe810aa8.svg\";","import axios from 'axios'\n\nconst instance = axios.create({\n // baseURL: 'https://api.airtable.com/v0/appKEaYcqyG0vt87s/',\n baseURL: `${process.env.REACT_APP_BACKEND_URL}`,\n // headers: {\n // 'Content-Type': 'application/json',\n // 'Authorization': 'Bearer ' + process.env.REACT_APP_AIRTABLE_BEARER_TOKEN\n // }\n})\n\nexport default instance\n","import * as actionTypes from './actionTypes'\nimport axios from '../../axios-instance'\n\nfunction fetchSessionsRequest() {\n return {\n type: actionTypes.FETCH_SESSIONS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchSessionsSuccess(sessions) {\n return {\n type: actionTypes.FETCH_SESSIONS_SUCCESS,\n receivedAt: Date.now(),\n sessions\n }\n}\n\nfunction fetchSessionsFailed(error) {\n return {\n type: actionTypes.FETCH_SESSIONS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchSessions() {\n return function(dispatch) {\n dispatch(fetchSessionsRequest())\n return axios\n // .get('/Sessions?view=frontend_demos_detail')\n .get('/Sessions')\n .then(response => {\n return dispatch(fetchSessionsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchSessionsFailed(error))\n })\n }\n}\n\nfunction fetchDemosRequest() {\n return {\n type: actionTypes.FETCH_DEMOS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchDemosSuccess(demos) {\n return {\n type: actionTypes.FETCH_DEMOS_SUCCESS,\n receivedAt: Date.now(),\n demos\n }\n}\n\nfunction fetchDemosFailed(error) {\n return {\n type: actionTypes.FETCH_DEMOS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchDemos() {\n return function(dispatch) {\n dispatch(fetchDemosRequest())\n return axios\n // .get('/Demos?view=frontend_demos_detail')\n .get('/Visits')\n .then(response => {\n return dispatch(fetchDemosSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchDemosFailed(error))\n })\n }\n}\n\nfunction fetchProtosRequest() {\n return {\n type: actionTypes.FETCH_PROTOS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchProtosSuccess(protos) {\n return {\n type: actionTypes.FETCH_PROTOS_SUCCESS,\n receivedAt: Date.now(),\n protos: protos.filter(proto => proto.fields.status !== \"willNotFix\")\n }\n}\n\nfunction fetchProtosFailed(error) {\n return {\n type: actionTypes.FETCH_PROTOS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchProtos() {\n return function(dispatch) {\n dispatch(fetchProtosRequest())\n return axios\n .get('/Protos')\n .then(response => {\n return dispatch(fetchProtosSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchProtosFailed(error))\n })\n }\n}\n\nfunction fetchPlaylistsRequest() {\n return {\n type: actionTypes.FETCH_PLAYLISTS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchPlaylistsSuccess(playlists) {\n return {\n type: actionTypes.FETCH_PLAYLISTS_SUCCESS,\n receivedAt: Date.now(),\n playlists\n }\n}\n\nfunction fetchPlaylistsFailed(error) {\n return {\n type: actionTypes.FETCH_PLAYLISTS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchPlaylists() {\n return function(dispatch) {\n dispatch(fetchPlaylistsRequest())\n return axios\n .get('/Playlists?view=playlist_list_view')\n .then(response => {\n return dispatch(fetchPlaylistsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchPlaylistsFailed(error))\n })\n }\n}\n\nfunction fetchPlaylistItemsRequest() {\n return {\n type: actionTypes.FETCH_PLAYLIST_ITEMS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchPlaylistItemsSuccess(playlistItems) {\n return {\n type: actionTypes.FETCH_PLAYLIST_ITEMS_SUCCESS,\n receivedAt: Date.now(),\n playlistItems: playlistItems.filter(\n (playlistItem) =>\n playlistItem.fields.protoStatus?.[0] !== \"willNotFix\" && playlistItem.fields.projectStatus?.[0] !== \"willNotFix\"\n ),\n };\n}\n\nfunction fetchPlaylistItemsFailed(error) {\n return {\n type: actionTypes.FETCH_PLAYLIST_ITEMS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchPlaylistItems() {\n return function(dispatch) {\n dispatch(fetchPlaylistItemsRequest())\n return axios\n .get('/PlaylistItems')\n .then(response => {\n return dispatch(fetchPlaylistItemsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchPlaylistItemsFailed(error))\n })\n }\n}\n\nfunction fetchMediasRequest() {\n return {\n type: actionTypes.FETCH_MEDIAS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchMediasSuccess(medias) {\n return {\n type: actionTypes.FETCH_MEDIAS_SUCCESS,\n receivedAt: Date.now(),\n medias\n }\n}\n\nfunction fetchMediasFailed(error) {\n return {\n type: actionTypes.FETCH_MEDIAS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchMedias() {\n return function(dispatch) {\n dispatch(fetchMediasRequest())\n return axios\n .get('/Medias')\n .then(response => {\n return dispatch(fetchMediasSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchMediasFailed(error))\n })\n }\n}\n\nfunction fetchVisitorsRequest() {\n return {\n type: actionTypes.FETCH_VISITORS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchVisitorsSuccess(visitors) {\n return {\n type: actionTypes.FETCH_VISITORS_SUCCESS,\n receivedAt: Date.now(),\n visitors\n }\n}\n\nfunction fetchVisitorsFailed(error) {\n return {\n type: actionTypes.FETCH_VISITORS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchVisitors() {\n return function(dispatch) {\n dispatch(fetchVisitorsRequest())\n return axios\n .get('/Visitors')\n .then(response => {\n return dispatch(fetchVisitorsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchVisitorsFailed(error))\n })\n }\n}\nfunction fetchDemonstratorsRequest() {\n return {\n type: actionTypes.FETCH_DEMONSTRATORS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchDemonstratorsSuccess(demonstrators) {\n return {\n type: actionTypes.FETCH_DEMONSTRATORS_SUCCESS,\n receivedAt: Date.now(),\n demonstrators\n }\n}\n\nfunction fetchDemonstratorsFailed(error) {\n return {\n type: actionTypes.FETCH_DEMONSTRATORS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchDemonstrators() {\n return function(dispatch) {\n dispatch(fetchDemonstratorsRequest())\n return axios\n .get('/Demonstrators')\n .then(response => {\n return dispatch(fetchDemonstratorsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchDemonstratorsFailed(error))\n })\n }\n}\nfunction fetchResponsiblesRequest() {\n return {\n type: actionTypes.FETCH_RESPONSIBLES_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchResponsiblesSuccess(responsibles) {\n return {\n type: actionTypes.FETCH_RESPONSIBLES_SUCCESS,\n receivedAt: Date.now(),\n responsibles\n }\n}\n\nfunction fetchResponsiblesFailed(error) {\n return {\n type: actionTypes.FETCH_RESPONSIBLES_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchResponsibles() {\n return function(dispatch) {\n dispatch(fetchResponsiblesRequest())\n return axios\n .get('/Responsibles')\n .then(response => {\n return dispatch(fetchResponsiblesSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchResponsiblesFailed(error))\n })\n }\n}\nfunction fetchFeedbacksRequest() {\n return {\n type: actionTypes.FETCH_FEEDBACKS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchFeedbacksSuccess(feedbacks) {\n return {\n type: actionTypes.FETCH_FEEDBACKS_SUCCESS,\n receivedAt: Date.now(),\n feedbacks\n }\n}\n\nfunction fetchFeedbacksFailed(error) {\n return {\n type: actionTypes.FETCH_FEEDBACKS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchFeedbacks() {\n return function(dispatch) {\n dispatch(fetchFeedbacksRequest())\n return axios\n .get('/Feedbacks')\n .then(response => {\n return dispatch(fetchFeedbacksSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchFeedbacksFailed(error))\n })\n }\n}\n\nfunction fetchTechnologiesRequest() {\n return {\n type: actionTypes.FETCH_TECHNOLOGIES_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchTechnologiesSuccess(technologies) {\n return {\n type: actionTypes.FETCH_TECHNOLOGIES_SUCCESS,\n receivedAt: Date.now(),\n technologies\n }\n}\n\nfunction fetchTechnologiesFailed(error) {\n return {\n type: actionTypes.FETCH_TECHNOLOGIES_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchTechnologies() {\n return function(dispatch) {\n dispatch(fetchTechnologiesRequest())\n return axios\n .get('/Technologies')\n .then(response => {\n return dispatch(fetchTechnologiesSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchTechnologiesFailed(error))\n })\n }\n}\n\nfunction fetchTagsRequest() {\n return {\n type: actionTypes.FETCH_TAGS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchTagsSuccess(tags) {\n return {\n type: actionTypes.FETCH_TAGS_SUCCESS,\n receivedAt: Date.now(),\n tags\n }\n}\n\nfunction fetchTagsFailed(error) {\n return {\n type: actionTypes.FETCH_TAGS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchTags() {\n return function(dispatch) {\n dispatch(fetchTagsRequest())\n return axios\n .get('/Tags')\n .then(response => {\n return dispatch(fetchTagsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchTagsFailed(error))\n })\n }\n}\n\nfunction fetchProjectsRequest() {\n return {\n type: actionTypes.FETCH_PROJECTS_REQUEST,\n receivedAt: Date.now()\n }\n}\n\nexport function fetchProjectsSuccess(projects) {\n return {\n type: actionTypes.FETCH_PROJECTS_SUCCESS,\n receivedAt: Date.now(),\n projects\n }\n}\n\nfunction fetchProjectsFailed(error) {\n return {\n type: actionTypes.FETCH_PROJECTS_FAILED,\n receivedAt: Date.now(),\n error\n }\n}\n\nexport function fetchProjects() {\n return function(dispatch) {\n dispatch(fetchProjectsRequest())\n return axios\n .get('/mfprojects')\n .then(response => {\n return dispatch(fetchProjectsSuccess(response.data))\n })\n .catch(error => {\n return dispatch(fetchProjectsFailed(error))\n })\n }\n}\n\nexport function getItemByID(model, id) {\n return function(dispatch, getState) {\n const airtableState = getState().airtableReducer\n if(model in airtableState) {\n return airtableState[model].find(i => i.id === id)\n }\n return null\n }\n}\n","\nexport const FETCH_DEMOS_REQUEST = 'FETCH_DEMOS_REQUEST'\nexport const FETCH_DEMOS_SUCCESS = 'FETCH_DEMOS_SUCCESS'\nexport const FETCH_DEMOS_FAILED = 'FETCH_DEMOS_FAILED'\n\nexport const FETCH_SESSIONS_REQUEST = 'FETCH_SESSIONS_REQUEST'\nexport const FETCH_SESSIONS_SUCCESS = 'FETCH_SESSIONS_SUCCESS'\nexport const FETCH_SESSIONS_FAILED = 'FETCH_SESSIONS_FAILED'\n\nexport const FETCH_PROTOS_REQUEST = 'FETCH_PROTOS_REQUEST'\nexport const FETCH_PROTOS_SUCCESS = 'FETCH_PROTOS_SUCCESS'\nexport const FETCH_PROTOS_FAILED = 'FETCH_PROTOS_FAILED'\n\nexport const FETCH_PLAYLISTS_REQUEST = 'FETCH_PLAYLISTS_REQUEST'\nexport const FETCH_PLAYLISTS_SUCCESS = 'FETCH_PLAYLISTS_SUCCESS'\nexport const FETCH_PLAYLISTS_FAILED = 'FETCH_PLAYLISTS_FAILED'\n\nexport const FETCH_PLAYLIST_ITEMS_REQUEST = 'FETCH_PLAYLIST_ITEMS_REQUEST'\nexport const FETCH_PLAYLIST_ITEMS_SUCCESS = 'FETCH_PLAYLIST_ITEMS_SUCCESS'\nexport const FETCH_PLAYLIST_ITEMS_FAILED = 'FETCH_PLAYLIST_ITEMS_FAILED'\n\nexport const FETCH_MEDIAS_REQUEST = 'FETCH_MEDIAS_REQUEST'\nexport const FETCH_MEDIAS_SUCCESS = 'FETCH_MEDIAS_SUCCESS'\nexport const FETCH_MEDIAS_FAILED = 'FETCH_MEDIAS_FAILED'\n\nexport const FETCH_VISITORS_REQUEST = 'FETCH_VISITORS_REQUEST'\nexport const FETCH_VISITORS_SUCCESS = 'FETCH_VISITORS_SUCCESS'\nexport const FETCH_VISITORS_FAILED = 'FETCH_VISITORS_FAILED'\n\nexport const FETCH_DEMONSTRATORS_REQUEST = 'FETCH_DEMONSTRATORS_REQUEST'\nexport const FETCH_DEMONSTRATORS_SUCCESS = 'FETCH_DEMONSTRATORS_SUCCESS'\nexport const FETCH_DEMONSTRATORS_FAILED = 'FETCH_DEMONSTRATORS_FAILED'\n\nexport const FETCH_RESPONSIBLES_REQUEST = 'FETCH_RESPONSIBLES_REQUEST'\nexport const FETCH_RESPONSIBLES_SUCCESS = 'FETCH_RESPONSIBLES_SUCCESS'\nexport const FETCH_RESPONSIBLES_FAILED = 'FETCH_RESPONSIBLES_FAILED'\n\nexport const FETCH_FEEDBACKS_REQUEST = 'FETCH_FEEDBACKS_REQUEST'\nexport const FETCH_FEEDBACKS_SUCCESS = 'FETCH_FEEDBACKS_SUCCESS'\nexport const FETCH_FEEDBACKS_FAILED = 'FETCH_FEEDBACKS_FAILED'\n\nexport const FETCH_TECHNOLOGIES_REQUEST = 'FETCH_TECHNOLOGIES_REQUEST'\nexport const FETCH_TECHNOLOGIES_SUCCESS = 'FETCH_TECHNOLOGIES_SUCCESS'\nexport const FETCH_TECHNOLOGIES_FAILED = 'FETCH_TECHNOLOGIES_FAILED'\n\nexport const FETCH_TAGS_REQUEST = 'FETCH_TAGS_REQUEST'\nexport const FETCH_TAGS_SUCCESS = 'FETCH_TAGS_SUCCESS'\nexport const FETCH_TAGS_FAILED = 'FETCH_TAGS_FAILED'\n\nexport const FETCH_PROJECTS_REQUEST = 'FETCH_PROJECTS_REQUEST'\nexport const FETCH_PROJECTS_SUCCESS = 'FETCH_PROJECTS_SUCCESS'\nexport const FETCH_PROJECTS_FAILED = 'FETCH_PROJECTS_FAILED'\n\n/* MQTT CLIENT INITIATION AND EVENTS */\nexport const CHANGE_MQTT_CLIENT_STATE = 'CHANGE_MQTT_CLIENT_STATE'\nexport const CREATE_MQTT_CLIENT = 'CREATE_MQTT_CLIENT'\nexport const ERROR_MQTT_CLIENT = 'ERROR_MQTT_CLIENT'\nexport const HANDLE_MQTT_MESSAGE = 'HANDLE_MQTT_MESSAGE'\n\n/* HANDLE SPECIFIC MQTT MESSAGES */\nexport const MQTT_CURRENT_GUESTS_CHECKED_IN_IDS = 'MQTT_CURRENT_GUESTS_CHECKED_IN_IDS'\nexport const MQTT_CURRENT_PROTO_PRESETS = 'MQTT_CURRENT_PROTO_PRESETS'\nexport const MQTT_DISPLAY_SENSORS_INFOS = 'MQTT_DISPLAY_SENSORS_INFOS'\nexport const MQTT_UPDATE = 'MQTT_UPDATE'\nexport const MQTT_IS_TRANSITION = 'MQTT_IS_TRANSITION'\nexport const MQTT_STATS = 'MQTT_STATS'\nexport const MQTT_VOLUME = 'MQTT_VOLUME'\nexport const MQTT_CURRENT_DEMO = 'MQTT_CURRENT_DEMO'\nexport const MQTT_DEMO_STATE = 'MQTT_DEMO_STATE'\nexport const MQTT_CURRENT_PROTO = 'MQTT_CURRENT_PROTO'\nexport const MQTT_CURRENT_PROJECT = 'MQTT_CURRENT_PROJECT'\nexport const MQTT_CURRENT_NAVIGATION = 'MQTT_CURRENT_NAVIGATION'\nexport const MQTT_CURRENT_PRESET = 'MQTT_CURRENT_PRESET'\nexport const MQTT_CURRENT_GUESTS = 'MQTT_CURRENT_GUESTS'\nexport const MQTT_CURRENT_MEDIA = 'MQTT_CURRENT_MEDIA'\nexport const MQTT_REFRESH_CACHE = 'MQTT_REFRESH_CACHE'\nexport const MQTT_SCRUB_MEDIA = 'MQTT_SCRUB_MEDIA'\n\n/* CHANGE APPLICATION STATE */\nexport const CHANGE_NAVIGATION_PAGE = 'CHANGE_NAVIGATION_PAGE'\n\n","export const updateObject = (oldObject, updatedValue) => {\n return {\n ...oldObject,\n ...updatedValue\n }\n}","import * as actionTypes from '../actions/actionTypes.js'\nimport { updateObject } from '../utility'\n\nconst initialState = {\n demos: [],\n playlists: [],\n protos: [],\n playlistItems: [],\n medias: [],\n visitors: [],\n demonstrators: [],\n responsibles: [],\n feedbacks: [],\n technologies: [],\n sessions: [],\n tags: [],\n projects: [],\n}\n\nconst reducer = (state = initialState, action) => {\n switch(action.type) {\n case actionTypes.FETCH_DEMOS_SUCCESS:\n return updateObject(state, {\n demos: action.demos\n })\n case actionTypes.FETCH_SESSIONS_SUCCESS:\n return updateObject(state, {\n sessions: action.sessions\n })\n case actionTypes.FETCH_PROTOS_SUCCESS:\n return updateObject(state, {\n protos: action.protos\n })\n case actionTypes.FETCH_PROJECTS_SUCCESS:\n return updateObject(state, {\n projects: action.projects\n })\n case actionTypes.FETCH_PLAYLISTS_SUCCESS:\n return updateObject(state, {\n playlists: action.playlists\n })\n case actionTypes.FETCH_PLAYLIST_ITEMS_SUCCESS:\n return updateObject(state, {\n playlistItems: action.playlistItems\n })\n case actionTypes.FETCH_MEDIAS_SUCCESS:\n return updateObject(state, {\n medias: action.medias\n })\n case actionTypes.FETCH_VISITORS_SUCCESS:\n return updateObject(state, {\n visitors: action.visitors\n })\n case actionTypes.FETCH_DEMONSTRATORS_SUCCESS:\n return updateObject(state, {\n demonstrators: action.demonstrators\n })\n case actionTypes.FETCH_RESPONSIBLES_SUCCESS:\n return updateObject(state, {\n responsibles: action.responsibles\n })\n case actionTypes.FETCH_FEEDBACKS_SUCCESS:\n return updateObject(state, {\n feedbacks: action.feedbacks\n })\n case actionTypes.FETCH_TECHNOLOGIES_SUCCESS:\n return updateObject(state, {\n technologies: action.technologies\n })\n case actionTypes.FETCH_TAGS_SUCCESS:\n return updateObject(state, {\n tags: action.tags\n })\n default:\n return updateObject(state)\n }\n}\n\nexport default reducer\n","import * as actionTypes from '../actions/actionTypes.js'\nimport { updateObject } from '../utility'\nimport { update } from 'lodash'\n\nconst initialState = {\n mqttClient: null,\n online: false,\n presets: [],\n currentMedia: null,\n currentDemo: null,\n currentPreset: null,\n currentProto: null,\n currentProject: null,\n currentNavigation: null,\n currentVolume: null,\n currentGuestsCheckedInIds: []\n}\n\nconst reducer = (state = initialState, action) => {\n switch(action.type) {\n case actionTypes.MQTT_VOLUME:\n case actionTypes.MQTT_VOLUME:\n return updateObject(state, {\n currentVolume: action.volume\n })\n case actionTypes.MQTT_CURRENT_GUESTS_CHECKED_IN_IDS:\n return updateObject(state, {\n currentGuestsCheckedInIds: action.payload.sessionIds\n })\n case actionTypes.CREATE_MQTT_CLIENT:\n return updateObject(state, {\n mqttClient: action.mqttClient\n })\n case actionTypes.CHANGE_MQTT_CLIENT_STATE:\n return updateObject(state, {\n online: action.state\n })\n //MQTT OUT\n case actionTypes.MQTT_CURRENT_PRESET:\n return updateObject(state, {\n currentPreset: action.preset\n })\n\n case actionTypes.MQTT_CURRENT_PROJECT:\n return updateObject(state, {\n currentProject: action.project,\n })\n\n case actionTypes.MQTT_CURRENT_NAVIGATION:\n return updateObject(state, {\n currentNavigation: action.payload,\n })\n\n case actionTypes.MQTT_CURRENT_PROTO:\n return updateObject(state, {\n currentProto: action.proto,\n })\n case actionTypes.MQTT_CURRENT_MEDIA:\n return updateObject(state, {\n currentMedia: action.media,\n })\n case actionTypes.MQTT_CURRENT_DEMO:\n return updateObject(state, {\n currentDemo: action.demo,\n currentProto: null\n })\n // case actionTypes.MQTT_DEMO_STATE:\n // case actionTypes.MQTT_CURRENT_GUESTS:\n //MQTT IN\n case actionTypes.MQTT_CURRENT_PROTO_PRESETS:\n let presets = 'presets' in action.payload ? action.payload.presets : []\n return updateObject(state, {\n presets\n })\n case actionTypes.MQTT_DISPLAY_SENSORS_INFOS:\n case actionTypes.MQTT_IS_TRANSITION:\n case actionTypes.MQTT_STATS:\n case actionTypes.MQTT_UPDATE:\n //NEEDS TO BE IMPLEMENTED\n return updateObject(state)\n default:\n return updateObject(state)\n }\n}\n\nexport default reducer\n","import * as actionTypes from '../actions/actionTypes.js'\nimport { updateObject } from '../utility'\n\nconst initialState = {\n demoID: \"\",\n playlistID: \"\",\n protoID: \"\",\n projectID: \"\"\n}\n\nconst reducer = (state = initialState, action) => {\n switch(action.type) {\n case actionTypes.CHANGE_NAVIGATION_PAGE:\n return updateObject(state, {\n demoID: action.demoID,\n protoID: action.protoID,\n projectID: action.projectID,\n playlistID: action.playlistID,\n playlistItemID: action.playlistItemID,\n })\n default:\n return updateObject(state)\n }\n}\n\nexport default reducer\n","import { combineReducers, applyMiddleware, createStore, compose } from 'redux'\nimport airtableReducer from './store/reducers/airtableReducer'\nimport mqttReducer from './store/reducers/mqttReducer'\nimport applicationReducer from './store/reducers/applicationReducer'\nimport thunk from 'redux-thunk'\n\n/**\n * REDUX OUTSIDE REACT ?\n * \n * Why putting the redux store outside in its own file ?\n * By doing so, you enable redux to be completly independant from React\n * It becomes your decision to import the redux state anywhere you need and manipulates it.\n * \n * I decided to do so after creating the breadcrumb system with the function navigateToPage() in utils\n * My utils function are completly out of React and can still call redux and manage my state.\n * Personally, I found it really interesting to use Redux like this.\n * I prefer to keep pieces of my code more independent when its possible, making it easier to manage and understand.\n * \n */\n\nconst rootReducer = combineReducers({\n airtableReducer,\n mqttReducer,\n applicationReducer\n})\n\nconst logger = store => {\n return next => {\n return action => {\n const result = next(action)\n return result\n }\n }\n}\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose\nconst store = createStore(\n rootReducer,\n composeEnhancers(applyMiddleware(logger, thunk))\n)\n\nexport default store\n","import * as actionTypes from './actionTypes'\nimport _ from 'lodash'\nimport mqtt from 'mqtt'\nimport mqttMatch from 'mqtt-match'\nimport store from '../../store-redux'\n\nimport * as airtableActions from './airtableActions'\n\nconst MQTT_TOPIC_PUBLISH = {\n CURRENT_DEMO: `demoRoom/common/state/demo`,\n CURRENT_PROTO: `demoRoom/common/state/proto`,\n CURRENT_PROJECT: `demoRoom/common/state/project`,\n CURRENT_NAVIGATION: `demoRoom/common/state/navigation`,\n CURRENT_MEDIA: `demoRoom/common/state/media`,\n CURRENT_PRESET: `demoRoom/common/state/protoPreset`,\n SCRUB_MEDIA: `demoRoom/common/event/scrubMedia`,\n REFRESH_CACHE: `demoRoom/common/event/clearMiddlewareCache`,\n\n // TODO: protoFramework never sends this, might be obsolete\n VOLUME: `demoRoom/common/state/volume`\n}\n\nconst MQTT_TOPIC_SUBSCRIBED = [\n \"connectedFactory/middleware/datacache\",\n\n // TODO: protoFramework never sends this, might be obsolete\n `demoRoom/common/state/volume`,\n\n `demoRoom/connectedFactory/state/guestsCheckedInIds`,\n `demoRoom/common/state/demo`,\n `demoRoom/common/state/proto`,\n `demoRoom/common/state/project`,\n `demoRoom/common/state/navigation`,\n `demoRoom/common/state/media`,\n `demoRoom/common/state/protoPresets`,\n `demoRoom/common/state/protoPreset`,\n]\n\nfunction createMQTTClient(mqttClient) {\n return {\n type: actionTypes.CREATE_MQTT_CLIENT,\n receivedAt: Date.now(),\n mqttClient\n }\n}\n\n/**\n * MQTT client implementation\n *\n * This approach to initiate the MQTT client all in redux is the one that worked\n * the best after multiple try in different projects.\n *\n * The client is initiated with the ENV variable declared in the .env,\n * then we put the client inside the mqttReducer state.\n *\n * Adding redux-thunk to the equation, we can now easily get the client inside all of our actions.\n * Using the function getState().mqttReducer.client, we can simply dispatch our actions from react.\n *\n * The MQTT logic will always be in this file ! Including how we handle what we publish and what happens when\n * we received a message on a topic that we are subscribed to.\n *\n * By completly separating MQTT and the React code, I think everything becomes more simple since we create an easy go-to\n * situation when it comes to MQTT in our code.\n *\n */\nexport function initMQTTClient() {\n return function(dispatch, getState) {\n let mqttClient = mqtt.connect(\n `${process.env.REACT_APP_MQTT_PROTOCOL}://${process.env.REACT_APP_MQTT_HOST}:${process.env.REACT_APP_MQTT_PORT}`\n );\n mqttClient.subscribe(MQTT_TOPIC_SUBSCRIBED)\n mqttClient.on('connect', () => onConnect(dispatch))\n mqttClient.on('error', (error) => onError(dispatch, error))\n mqttClient.on('message', (topic, payload) => onMessageArrived(dispatch, topic, payload))\n mqttClient.on('offline', () => onOffline(dispatch))\n mqttClient.on('close', () => onClose(dispatch))\n mqttClient.on('end', () => onConnectionLost(dispatch))\n dispatch(createMQTTClient(mqttClient))\n }\n}\n\nfunction changeMQTTClientState(state) {\n return {\n type: actionTypes.CHANGE_MQTT_CLIENT_STATE,\n receivedAt: Date.now(),\n state\n }\n}\n\nfunction onConnect(dispatch) {\n dispatch(changeMQTTClientState(true))\n}\n\nfunction onClose(dispatch) {\n dispatch(changeMQTTClientState(false))\n}\n\nfunction onOffline(dispatch) {\n dispatch(changeMQTTClientState(false))\n}\n\nfunction onConnectionLost(dispatch) {\n dispatch(changeMQTTClientState(false))\n}\n\nfunction errorMQTTClient(error) {\n return {\n type: actionTypes.ERROR_MQTT_CLIENT,\n receivedAt: Date.now(),\n error\n }\n}\n\nfunction onError(dispatch, error) {\n dispatch(errorMQTTClient(error))\n}\n\nfunction sendMQTTGeneric(type, payload) {\n return {\n type,\n receivedAt: Date.now(),\n payload\n }\n}\n\nexport function sendMQTTRefreshCache() {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = JSON.stringify({})\n mqttClient.publish(MQTT_TOPIC_PUBLISH.REFRESH_CACHE, payload)\n dispatch(sendMQTTGeneric(actionTypes.MQTT_REFRESH_CACHE, payload))\n }\n}\n\nexport function sendMQTTScrubMedia(scrubValue) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = JSON.stringify({\n scrubMedia: scrubValue\n })\n mqttClient.publish(MQTT_TOPIC_PUBLISH.SCRUB_MEDIA, payload)\n dispatch(sendMQTTGeneric(actionTypes.MQTT_SCRUB_MEDIA, payload))\n }\n}\n\nfunction sendMQTTCurrentDemoRequest(payload, demo) {\n return {\n type: actionTypes.MQTT_CURRENT_DEMO,\n receivedAt: Date.now(),\n payload,\n demo\n }\n}\n\nexport function sendMQTTCurrentDemo(demo) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = {\n airtableID: _.get(demo, 'id', null),\n visitID: _.get(demo, \"fields['visitID']\", null),\n visitName: _.get(demo, \"fields['visitName']\", null),\n language: _.get(demo, \"fields['language']\", null),\n Date: _.get(demo, \"fields['date']\", null),\n Time: _.get(demo, \"fields['time']\", null),\n }\n mqttClient.publish(MQTT_TOPIC_PUBLISH.CURRENT_DEMO, JSON.stringify(payload), {retain: true})\n dispatch(sendMQTTCurrentDemoRequest(payload, demo))\n }\n}\n\nfunction sendMQTTCurrentGuestsCheckedInIdsRequest(payload) {\n return {\n type: actionTypes.MQTT_CURRENT_GUESTS_CHECKED_IN_IDS,\n receivedAt: Date.now(),\n payload,\n };\n}\n\nfunction sendMQTTCurrentProjectRequest(payload, project) {\n return {\n type: actionTypes.MQTT_CURRENT_PROJECT,\n receivedAt: Date.now(),\n payload,\n project,\n };\n}\n\nexport function sendMQTTCurrentProject(project) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = {\n airtableID: _.get(project, 'id', null),\n path: _.get(project, 'fields.relativePath', null),\n title: _.get(project, 'fields.name', null),\n startDemo: false\n }\n if(!project) {\n payload = {}\n }\n mqttClient.publish(MQTT_TOPIC_PUBLISH.CURRENT_PROJECT, JSON.stringify(payload), {retain: true})\n dispatch(sendMQTTCurrentProjectRequest(payload, project))\n }\n}\n\nfunction sendMQTTCurrentProtoRequest(payload, proto) {\n return {\n type: actionTypes.MQTT_CURRENT_PROTO,\n receivedAt: Date.now(),\n payload,\n proto,\n };\n}\n\nexport function sendMQTTCurrentProto(proto) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = {\n airtableID: _.get(proto, 'id', null),\n uuid: _.get(proto, 'fields.uuid', null),\n title: _.get(proto, 'fields.name', null),\n startDemo: false\n }\n if(!proto) {\n payload = {}\n }\n mqttClient.publish(MQTT_TOPIC_PUBLISH.CURRENT_PROTO, JSON.stringify(payload), {retain: true})\n dispatch(sendMQTTCurrentProtoRequest(payload, proto))\n }\n}\n\nfunction sendMQTTCurrentNavigationRequest(payload) {\n return {\n type: actionTypes.MQTT_CURRENT_NAVIGATION,\n receivedAt: Date.now(),\n payload\n };\n}\n\nexport function sendMQTTCurrentNavigation(payload) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient;\n mqttClient.publish(MQTT_TOPIC_PUBLISH.CURRENT_NAVIGATION, JSON.stringify(payload), { retain: true });\n dispatch(sendMQTTCurrentNavigationRequest(payload));\n };\n}\n\nfunction sendMQTTCurrentPresetRequest(preset, payload) {\n return {\n type: actionTypes.MQTT_CURRENT_PRESET,\n receivedAt: Date.now(),\n preset,\n payload\n }\n}\n\nexport function sendMQTTCurrentPreset(preset) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = { currentPreset: preset }\n mqttClient.publish(MQTT_TOPIC_PUBLISH.CURRENT_PRESET, JSON.stringify(payload), {retain: true})\n dispatch(sendMQTTCurrentPresetRequest(preset, payload))\n }\n}\n\nfunction sendMQTTCurrentVolumeRequest(payload, volume) {\n return {\n type: actionTypes.MQTT_VOLUME,\n receivedAt: Date.now(),\n payload,\n volume\n }\n}\n\nexport function sendMQTTCurrentVolume(volume) {\n return function(dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = {\n volume: volume\n }\n mqttClient.publish(MQTT_TOPIC_PUBLISH.VOLUME, JSON.stringify(payload), {retain: true})\n dispatch(sendMQTTCurrentVolumeRequest(payload, volume))\n }\n}\n\nfunction sendMQTTCurrentMediaRequest(payload, media) {\n return {\n type: actionTypes.MQTT_CURRENT_MEDIA,\n receivedAt: Date.now(),\n payload,\n media\n }\n}\n\nexport function sendMQTTCurrentMedia(media) {\n return function (dispatch, getState) {\n let mqttClient = getState().mqttReducer.mqttClient\n let payload = {\n airtableID: _.get(media, 'id', null),\n path: _.get(media, \"fields['relativePath']\", \"\"),\n type: _.get(media, \"fields['type']\", \"\").toLowerCase()\n }\n mqttClient.publish(MQTT_TOPIC_PUBLISH.CURRENT_MEDIA, JSON.stringify(payload), {retain: true})\n dispatch(sendMQTTCurrentMediaRequest(payload, media))\n }\n}\n\nfunction handleMessageCurrentProtoPresets(payload) {\n return {\n type: actionTypes.MQTT_CURRENT_PROTO_PRESETS,\n receivedAt: Date.now(),\n payload\n }\n}\n\nfunction handleMessageDisplaySensorsInfos(payload) {\n return {\n type: actionTypes.MQTT_DISPLAY_SENSORS_INFOS,\n receivedAt: Date.now(),\n payload\n }\n}\n\n/**\n * A function to rapidly get a specific item from our cache\n * By specifying the model and the airtable id you can easily get the item\n * referenced inside a field of a prototypes. (or any other airtable object)\n *\n * Since airtable does not allow to populate automatically the ids of one-to-multiple or one-to-one relationship,\n * we use this function in the frontend to get the full items linked to a model.\n *\n * @param model the model name as stated in the airtableReducer state\n * @param id airtable id\n */\nfunction getItemByID(model, id) {\n const airtableState = store.getState().airtableReducer\n if(model in airtableState) {\n return airtableState[model].find(i => i.id === id)\n }\n return null\n}\n\n\nfunction onMessageArrived(dispatch, topic, payload) {\n payload = JSON.parse(payload)\n\n if (mqttMatch(\"demoRoom/common/state/protoPresets\", topic)) {\n dispatch(handleMessageCurrentProtoPresets(payload))\n }\n\n else if (mqttMatch(\"demoRoom/common/state/media\", topic)) {\n let media = getItemByID('medias', payload.airtableID)\n dispatch(sendMQTTCurrentMediaRequest(payload, media))\n }\n\n else if (mqttMatch(\"demoRoom/common/state/protoPreset\", topic)) {\n let preset = payload.currentPreset\n dispatch(sendMQTTCurrentPresetRequest(preset, payload))\n }\n\n else if (mqttMatch(\"demoRoom/common/state/demo\", topic)) {\n let demo = getItemByID('demos', payload.airtableID)\n dispatch(sendMQTTCurrentDemoRequest(payload, demo))\n }\n\n else if (mqttMatch(\"demoRoom/common/state/proto\", topic)) {\n let proto = getItemByID('protos', payload.airtableID)\n dispatch(sendMQTTCurrentProtoRequest(payload, proto))\n }\n\n else if (mqttMatch(\"demoRoom/common/state/project\", topic)) {\n let project = getItemByID('projects', payload.airtableID)\n dispatch(sendMQTTCurrentProjectRequest(payload, project))\n }\n\n else if (mqttMatch(\"demoRoom/common/state/navigation\", topic)) {\n dispatch(sendMQTTCurrentNavigationRequest(payload))\n }\n\n // TODO: protoFramework never sends currentVolume, might be obsolete\n else if (mqttMatch(\"demoRoom/common/state/volume\", topic)) {\n let volume = payload.volume\n dispatch(sendMQTTCurrentVolumeRequest(payload, volume))\n }\n\n else if (mqttMatch(\"demoRoom/connectedFactory/state/guestsCheckedInIds\", topic)) {\n dispatch(sendMQTTCurrentGuestsCheckedInIdsRequest(payload))\n }\n\n else if (mqttMatch(\"demoRoom/common/event/clearMiddlewareCache\", topic)) {\n const data = payload;\n\n const mapTableToAction = {\n Visits: airtableActions.fetchDemosSuccess,\n Sessions: airtableActions.fetchSessionsSuccess,\n Protos: airtableActions.fetchProtosSuccess,\n Projects: airtableActions.fetchProjectsSuccess,\n Playlists: airtableActions.fetchPlaylistsSuccess,\n PlaylistItems: airtableActions.fetchPlaylistItemsSuccess,\n Medias: airtableActions.fetchMediasSuccess,\n Visitors: airtableActions.fetchVisitorsSuccess,\n Demonstrators: airtableActions.fetchDemonstratorsSuccess,\n Responsibles: airtableActions.fetchResponsiblesSuccess,\n Feedbacks: airtableActions.fetchFeedbacksSuccess,\n Technologies: airtableActions.fetchTechnologiesSuccess,\n Tags: airtableActions.fetchTagsSuccess\n }\n\n // Loop over all the refreshed data and update the corresponding state if we have a handler for it\n // This makes sure we don't try to update data that hasn't been refreshed by the backend\n // It also makes sure we don't try to handle data from the backend that we don't have a handler for\n Object.keys(data).forEach(table => {\n if(mapTableToAction[table]) {\n dispatch(mapTableToAction[table](data[table]));\n }\n });\n }\n}\n","import * as actionTypes from './actionTypes'\n\nfunction changeNavigationPageRequest({ demoID, protoID, projectID, playlistID, playlistItemID }) {\n return {\n type: actionTypes.CHANGE_NAVIGATION_PAGE,\n receivedAt: Date.now(),\n demoID,\n playlistID,\n playlistItemID,\n protoID,\n projectID,\n };\n}\n\nexport function changeNavigationPage(ids) {\n return function(dispatch) {\n const { demoID, protoID, projectID, playlistID, playlistItemID } = ids\n dispatch(changeNavigationPageRequest({ demoID, playlistID, protoID, projectID, playlistID, playlistItemID }));\n }\n}\n","import * as actions from '../store/actions/index'\nimport { navigate } from '@reach/router'\nimport store from '../store-redux'\n\n/**\n * This function is used when you want to update the breadcrumb and navigate to the desired page\n * Depending on the protoID, playlistID and demoID you specify the URL that you navigate to will be determined\n * After you navigated to the page, the current page ids corresponding to the page are stored in the Redux application reducer.\n *\n * @param ids object with protoID, playlistID and demoID of airtable (you can exclude playlistID and demoID)\n * @param dispatch deprecated\n */\nexport function navigateToPage(navigationData, dispatch) {\n const { path, demoID, playlistID, protoID, playlistItemID, projectID } = navigationData\n if(path) {\n navigate(path)\n navigationData = {demoID: null, playlistID: null, protoID: null}\n }\n else {\n if (demoID) {\n if(playlistItemID) {\n navigate(`/demos/${demoID}/${playlistID}/playlistItem/${playlistItemID}`)\n } else if (playlistID) {\n navigate(`/demos/${demoID}/${playlistID}`)\n } else {\n navigate(`/demos/${demoID}`)\n }\n } else if (playlistID) {\n if(playlistItemID) {\n navigate(`/playlists/${playlistID}/playlistItem/${playlistItemID}`)\n } else if (protoID) {\n navigate(`/protos/${protoID}`);\n } else {\n navigate(`/playlists/${playlistID}`)\n }\n } else if (protoID) {\n navigate(`/protos/${protoID}`);\n } else if (projectID) {\n navigate(`/projects/${projectID}`)\n }\n }\n store.dispatch(actions.changeNavigationPage(navigationData))\n}\n\n","import React, { useEffect, useState, createContext } from \"react\";\nimport useScript from \"react-script-hook\";\n\nexport const GoogleAuthContext = createContext({\n gapi: null,\n isSignedIn: false,\n loading: false,\n error: null,\n});\n\nfunction GoogleAuthProvider({ children }) {\n const [gapi, setGapi] = useState(null);\n const [isSignedIn, setIsSignedIn] = useState(false);\n const [scriptLoading, scriptError] = useScript({ src: \"https://apis.google.com/js/platform.js\" });\n\n const [authLoading, setAuthLoading] = useState(true);\n const [authError, setAuthError] = useState(false);\n\n // Initialize Google API\n useEffect(() => {\n if (scriptError || scriptLoading) return;\n const gapi = window.gapi;\n gapi.load(\"auth2\", () => {\n // Configure API\n try {\n gapi.auth2\n .init({\n client_id: process.env.REACT_APP_GOOGLE_AUTH_CLIENT_ID,\n })\n .then(\n (auth2) => {\n setGapi(gapi);\n // Check SignedIn status\n setIsSignedIn(auth2.isSignedIn.get());\n auth2.isSignedIn.listen((isSignedIn) => {\n setIsSignedIn(isSignedIn);\n });\n\n setAuthLoading(false);\n },\n (gapiError) => {\n setAuthError(gapiError);\n setAuthLoading(false);\n }\n )\n } catch (err) {\n setAuthError(err.message);\n }\n });\n }, [scriptLoading, scriptError]);\n\n const loading = authLoading || scriptLoading;\n const error = authError || scriptError;\n\n return (\n {children}\n );\n}\n\nexport default GoogleAuthProvider;\n","import React, { useContext } from \"react\";\n\nimport { navigateToPage } from \"../../../utils/utils\";\nimport iconNavHome from \"shared/icons/nav_home.svg\";\nimport iconNavDemos from \"shared/icons/nav_demos.svg\";\nimport iconNavPlaylists from \"shared/icons/nav_playlists.svg\";\nimport iconNavProtos from \"shared/icons/nav_protos.svg\";\nimport iconNavProjects from \"shared/icons/nav_projects.svg\";\nimport iconNavMedias from \"shared/icons/nav_medias.svg\";\nimport iconNavInputs from \"shared/icons/nav_inputs.svg\";\nimport iconNavLogout from \"shared/icons/nav_logout.svg\";\n\nimport { GoogleAuthContext } from \"../../../utils/GoogleAuthProvider\";\n\nimport classes from \"./NavigationItems.module.sass\";\n\nfunction NavigationItems() {\n const { gapi } = useContext(GoogleAuthContext);\n\n function logout() {\n gapi.auth2.getAuthInstance().signOut();\n }\n\n const hasDemos = process.env.REACT_APP_OFFICE_LOCATION === \"Montreal\";\n const hasGoogleSignIn = typeof process.env.REACT_APP_GOOGLE_AUTH_CLIENT_ID !== \"undefined\";\n\n return (\n \n );\n}\n\nexport default NavigationItems;\n","import React from 'react'\n\nimport classes from './Backdrop.module.sass'\n\nconst backdrop = ({show, clicked}) =>\n (show\n ?
\n : null)\n\nexport default backdrop\n","import React from 'react'\nimport navXIcon from 'shared/icons/nav_x.svg'\n\nimport NavigationItems from '../NavigationItems/NavigationItems'\nimport classes from './SideDrawer.module.sass'\nimport Backdrop from './Backdrop/Backdrop'\n\nconst sideDrawer = ({open, closed}) => {\n let attachedClasses = [classes.SideDrawer, classes.Close]\n if (open) {\n attachedClasses = [classes.SideDrawer, classes.Open]\n }\n return (\n <>\n \n
\n
\n
\n
\"Close
\n
\n \n
\n \n )\n}\n\nexport default sideDrawer\n","import React from 'react'\n\nimport classes from './DrawerToggle.module.sass'\n\nconst drawerToggle = ({ clicked }) => (\n
\n \n \n \n \n \n
\n);\n\nexport default drawerToggle\n","import React, { useState, useEffect } from 'react'\nimport * as actions from '../../../store/actions/index'\nimport iconVolume from 'shared/icons/volume.svg'\nimport { connect } from 'react-redux'\n\nimport classes from './VolumeScrub.module.sass'\n\nconst clamp = (value, min, max) => {\n return Math.min(max, Math.max(min, value));\n}\n\nconst VolumeScrub = ({currentVolume, sendMQTTCurrentVolume}) => {\n const [volumeLevel, changeVolumeLevel] = useState(currentVolume)\n const [scrubbing, changeScrubbingState] = useState(false)\n\n const scrubbingStateRef = React.useRef(scrubbing);\n const setScrubbingState = state => {\n scrubbingStateRef.current = state;\n changeScrubbingState(state);\n };\n\n useEffect(() => {\n changeVolumeLevel(currentVolume)\n return () => {\n //nothing\n }\n }, [currentVolume])\n\n useEffect(() => {\n const volumeScrub = document.getElementById('volume-scrub')\n volumeScrub.addEventListener('mousedown', () => setScrubbingState(true));\n volumeScrub.addEventListener('touchstart', () => setScrubbingState(true), {passive: true});\n window.addEventListener('mouseup', (e) => setScrubbingState(false));\n window.addEventListener('touchend', () => setScrubbingState(false), {passive: true});\n volumeScrub.addEventListener('mousemove', (e) => updateVolumeLevel(e))\n volumeScrub.addEventListener('touchmove', (e) => updateVolumeLevel(e), {passive: true})\n volumeScrub.addEventListener('click', (e) => updateVolumeLevel(e))\n volumeScrub.addEventListener('touch', (e) => updateVolumeLevel(e))\n return () => {\n volumeScrub.removeEventListener('mousedown', () => setScrubbingState(true))\n volumeScrub.addEventListener('touchstart', () => changeScrubbingState(true), {passive: true});\n volumeScrub.removeEventListener('mouseup', () => setScrubbingState(false))\n volumeScrub.removeEventListener('touchend', () => changeScrubbingState(false), {passive: true});\n window.removeEventListener('mousemove', (e) => updateVolumeLevel(e))\n volumeScrub.removeEventListener('touchmove', (e) => updateVolumeLevel(e), {passive: true})\n volumeScrub.removeEventListener('click', (e) => updateVolumeLevel(e))\n volumeScrub.removeEventListener('touch', (e) => updateVolumeLevel(e))\n }\n }, [])\n\n const updateVolumeLevel = (e) => {\n if(scrubbingStateRef.current) {\n const volumeScrub = document.getElementById('volume-scrub')\n const rect = volumeScrub.getBoundingClientRect();\n let leftPosition = rect.left\n let totalWidthScrub = rect.width;\n let clickedPosition = e.clientX || e.touches[0].clientX\n let clickedPositionRelativeToScrub = clickedPosition - leftPosition\n let newVolumeLevelPercentage = clamp(clickedPositionRelativeToScrub / totalWidthScrub, 0, 1) * 100;\n changeVolumeLevel(newVolumeLevelPercentage)\n sendMQTTCurrentVolume(Math.round(newVolumeLevelPercentage))\n }\n }\n\n return (\n
\n
\n \"Monitor\n
\n )\n}\n\nconst mapStateToProps = state => {\n return {\n currentVolume: state.mqttReducer.currentVolume\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n sendMQTTCurrentVolume: (volume) => {\n return dispatch(actions.sendMQTTCurrentVolume(volume))\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(VolumeScrub)\n","import React, { useState, useEffect } from 'react'\nimport _ from 'lodash'\nimport DrawerToggle from '../SideDrawer/DrawerToggle/DrawerToggle'\nimport { connect } from 'react-redux'\nimport { navigateToPage } from '../../../utils/utils'\nimport * as actions from '../../../store/actions/index'\n\nimport iconBreadcrumbSeparator from 'shared/icons/breadcrumb_separator.svg'\nimport iconEnterBlockArrow from 'shared/icons/enter_block_arrow.svg'\nimport iconConnectionsGreen from 'shared/icons/connections_green.svg'\n\nimport classes from './Toolbar.module.sass'\nimport VolumeScrub from '../VolumeScrub/VolumeScrub'\n\nconst Toolbar = ({\n drawerToggleClicked,\n demoID,\n playlistID,\n playlistItemID,\n protoID,\n projectID,\n sessions,\n getItemByID,\n currentDemo,\n currentProto,\n currentProject,\n currentNavigation\n}) => {\n const [currentDemoState, changeCurrentDemoState] = useState(\"\");\n const [time, changeTime] = useState(new Date());\n\n useEffect(() => {\n let interval = setInterval(() => {\n changeTime(new Date());\n }, 60000);\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n useEffect(() => {\n changeCurrentDemoState(currentDemo);\n return () => {\n changeCurrentDemoState(null);\n };\n }, [currentDemo]);\n\n const demoVisitorIds =\n currentDemoState &&\n sessions\n .filter((session) => session.fields.visitId && session.fields.visitId.indexOf(currentDemoState.id) >= 0)\n .map((session) => {\n return session.fields.visitorId[0];\n });\n\n let navigationPages = null;\n if (demoID) {\n navigationPages = (\n <>\n
navigateToPage({ path: \"/demos\" })}>\n
DEMOS
\n
\n \"Breadcrumb\n
navigateToPage({ demoID })}>\n
{_.get(getItemByID(\"demos\", demoID), \"fields.visitName\", \"DEMO\").toUpperCase()}
\n
\n {playlistID ? \"Breadcrumb : null}\n {playlistID ? (\n <>\n
navigateToPage({ demoID, playlistID })}>\n
{_.get(getItemByID(\"playlists\", playlistID), \"fields.name\", \"PLAYLIST\").toUpperCase()}
\n
\n {protoID ? \"Breadcrumb : null}\n \n ) : null}\n {protoID ? (\n <>\n navigateToPage({ demoID, playlistID, playlistItemID, protoID })}\n >\n
{_.get(getItemByID(\"protos\", protoID), \"fields.name\", \"PROTO\").toUpperCase()}
\n
\n \n ) : null}\n \n );\n } else if (playlistID) {\n navigationPages = (\n <>\n
navigateToPage({ path: \"/playlists\" })}>\n
PLAYLISTS
\n
\n \"Breadcrumb\n
navigateToPage({ playlistID })}>\n
{_.get(getItemByID(\"playlists\", playlistID), \"fields.name\", \"PLAYLIST\").toUpperCase()}
\n
\n {protoID ? \"Breadcrumb : null}\n {protoID ? (\n <>\n navigateToPage({ playlistID, playlistItemID, protoID })}\n >\n
{_.get(getItemByID(\"protos\", protoID), \"fields.name\", \"PROTO\").toUpperCase()}
\n \n \n ) : null}\n \n );\n } else if (protoID) {\n navigationPages = (\n <>\n
navigateToPage({ path: \"/protos\" })}>\n
PROTOS
\n
\n \"Breadcrumb\n
navigateToPage({ protoID })}>\n
{_.get(getItemByID(\"protos\", protoID), \"fields.name\", \"PROTO\").toUpperCase()}
\n
\n \n );\n } else if (projectID) {\n navigationPages = (\n <>\n
navigateToPage({ path: \"/projects\" })}>\n
PROJECTS
\n
\n \"Breadcrumb\n
navigateToPage({ projectID })}>\n
{_.get(getItemByID(\"projects\", projectID), \"fields.name\", \"PROJECT\").toUpperCase()}
\n
\n \n );\n }\n\n const navigateToConnections = () => {\n if (currentDemoState) {\n navigateToPage({ demoID: currentDemoState.id });\n }\n };\n\n const navigateToCurrentPlaylistItem = () => {\n navigateToPage(currentNavigation);\n };\n\n let currentProtoNav = null;\n if ((currentProto && currentProto.id !== protoID) || (currentProject && currentProject.id !== projectID)) {\n currentProtoNav = (\n
navigateToCurrentPlaylistItem()} className={classes.CurrentProto}>\n \"Enter\n {/*
\"Logo
*/}\n
CURRENTLY PLAYING
\n
\n );\n }\n\n let connectionsBlock = null;\n if (currentDemoState) {\n connectionsBlock = (\n navigateToConnections()}\n className={classes.Connections + \" \" + (currentDemoState ? classes.ConnectionsActive : null)}\n >\n \"Go\n \"Connections\n
{demoVisitorIds.length || 0}
\n \n );\n }\n\n return (\n
\n \n
{navigationPages}
\n {currentProtoNav}\n {connectionsBlock}\n
\n
{`${time.getHours().toString().padStart(2, \"0\")}:${time.getMinutes().toString().padStart(2, \"0\")}`}
\n
\n {!process.env.REACT_APP_HIDE_VOLUME_CONTROL || process.env.REACT_APP_HIDE_VOLUME_CONTROL !== \"true\" && (\n
\n \n
\n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n demoID: state.applicationReducer.demoID,\n playlistID: state.applicationReducer.playlistID,\n playlistItemID: state.applicationReducer.playlistItemID,\n protoID: state.applicationReducer.protoID,\n projectID: state.applicationReducer.projectID,\n protos: state.airtableReducer.protos,\n playlists: state.airtableReducer.playlists,\n demos: state.airtableReducer.demos,\n sessions: state.airtableReducer.sessions,\n currentProto: state.mqttReducer.currentProto,\n currentProject: state.mqttReducer.currentProject,\n currentDemo: state.mqttReducer.currentDemo,\n currentNavigation: state.mqttReducer.currentNavigation,\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id))\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Toolbar)\n","import React, { useState } from 'react'\nimport classes from './Layout.module.sass'\nimport SideDrawer from './SideDrawer/SideDrawer'\nimport Toolbar from './Toolbar/Toolbar'\n\nconst Layout = ({children}) => {\n const [sideDrawerOpen, toggleSideDrawer] = useState(false)\n\n return (\n <>\n toggleSideDrawer(!sideDrawerOpen)}\n drawerToggleClicked={() => toggleSideDrawer(!sideDrawerOpen)}\n />\n toggleSideDrawer(false)}\n />\n
\n {children}\n
\n \n )\n}\n\nexport default Layout\n","import React from \"react\";\n\nimport classes from \"./PlayablePreview.module.sass\";\n\nimport iconEnterBlockArrow from \"shared/icons/enter_block_arrow.svg\";\nimport iconProtoLogo from \"shared/icons/proto_logo.svg\";\nimport iconProjectLogo from \"shared/icons/project_logo.svg\";\n\nimport { navigateToPage } from \"../../utils/utils\";\n\nfunction PlayablePreview({ size = \"M\", navigationData, isActive, isPlaying, isIncomplete, title, thumbnail, type }) {\n const sizes = {\n M: {\n PlaylistItem: 154,\n ImageContainer: 112,\n DescriptionContainer: 42,\n Title: classes.TitleM,\n },\n L: {\n PlaylistItem: 220,\n ImageContainer: 160,\n DescriptionContainer: 60,\n Title: classes.TitleL,\n },\n };\n\n let activeClass = \"\";\n if (isActive) {\n activeClass = classes.Active;\n }\n if (isPlaying) {\n activeClass = classes.Playing;\n }\n\n function onClick() {\n navigateToPage(navigationData);\n }\n\n return (\n
\n
\n
\n \"Enter\n
\n \n {isIncomplete ?
INCOMPLETE
: null}\n
\n
\n \"Logo\n
{title}
\n
\n
\n \n );\n}\n\nexport default PlayablePreview;\n","import React from \"react\";\nimport _ from \"lodash\";\nimport * as actions from \"../../store/actions/index\";\nimport { connect } from \"react-redux\";\n\nimport classes from \"./SidebarPlaylist.module.sass\";\n\nimport PlayablePreview from \"../PlayablePreview/PlayablePreview\";\nimport placeholderImage from \"shared/icons/placeholder.svg\";\n\nconst Playlist = ({ demoID, protoID, projectID, playlist, playlistItems, currentProto, currentProject }) => {\n let protoBlocks = null;\n\n const playlistItemsInPlaylist =\n playlist.fields.playlistItems &&\n playlist.fields.playlistItems\n .map((playlistItemID) => playlistItems.find((playlistItem) => playlistItem.id === playlistItemID))\n .filter((playlistItem) => typeof playlistItem !== \"undefined\");\n\n protoBlocks = playlistItemsInPlaylist && playlistItemsInPlaylist.map((playlistItem) => {\n return (\n \n );\n });\n\n return (\n
\n
\n
Playlist
\n
{_.get(playlist, \"fields.name\", \"No name\")}
\n
\n
{protoBlocks}
\n
\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n protos: state.airtableReducer.protos,\n playlistItems: state.airtableReducer.playlistItems,\n currentProto: state.mqttReducer.currentProto,\n currentProject: state.mqttReducer.currentProject,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n sendMQTTCurrentProto: (proto) => {\n return dispatch(actions.sendMQTTCurrentProto(proto));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Playlist);\n","import React, { useEffect, useState } from \"react\";\nimport _, { first } from \"lodash\";\nimport * as actions from \"../../store/actions/index\";\nimport { connect } from \"react-redux\";\nimport playIcon from \"shared/icons/play.svg\";\nimport addVisitorIcon from \"shared/icons/add_visitor.svg\";\nimport stopButtonIcon from \"shared/icons/stop_button.svg\";\nimport dayjs from \"dayjs\";\n\nimport classes from \"./Demo.module.sass\";\nimport SidebarPlaylist from \"../../components/SidebarPlaylist/SidebarPlaylist\";\nimport { navigateToPage } from \"../../utils/utils\";\n\nconst Demo = ({\n changeNavigationPage,\n demoID,\n demos,\n sessions,\n visitors,\n getItemByID,\n sendMQTTCurrentDemo,\n sendMQTTCurrentPreset,\n sendMQTTCurrentProto,\n sendMQTTCurrentProject,\n currentDemo,\n currentGuestsCheckedInIds,\n}) => {\n const [demo, changeDemo] = useState(null);\n const [visitorSessions, changeVisitorSessions] = useState(null);\n\n //Handle current demo change\n useEffect(() => {\n const currentDemo = demos.find((d) => d.id === demoID);\n if (currentDemo) {\n changeDemo(currentDemo);\n }\n return () => {\n changeDemo(null);\n };\n }, [demos, demoID]);\n\n useEffect(() => {\n changeNavigationPage({ demoID });\n }, [demoID]);\n\n //Handle current demo change\n useEffect(() => {\n if (!visitors || !visitors.length || !sessions || !sessions.length || !demoID) return;\n\n // Get VisitorIds from the Session that has the given visitId\n const sessionsInVisit = sessions\n .filter((session) => session.fields.VisitId && session.fields.VisitId.indexOf(demoID) >= 0)\n .map((session) => ({\n session,\n visitor: visitors.find((visitor) => session.fields.VisitorId && session.fields.VisitorId[0] === visitor.id),\n }))\n .map((session) => {\n return session;\n });\n\n // Filter visitors\n changeVisitorSessions(sessionsInVisit);\n\n return () => {\n changeVisitorSessions(null);\n };\n }, [demoID, sessions, visitors]);\n\n //Send launched demo informations and guests to the ProtoFramework\n const startCurrentDemo = () => {\n if (currentDemo && currentDemo.id === demoID) {\n sendMQTTCurrentDemo(null);\n //Reset proto MQTT state\n sendMQTTCurrentPreset(null);\n sendMQTTCurrentProto(null);\n } else {\n sendMQTTCurrentDemo(demo);\n //Reset proto MQTT state\n sendMQTTCurrentPreset(null);\n let currentPlaylist = getItemByID(\"playlists\", _.get(demo.fields, \"playlist[0]\", \"\"));\n let playlistItemID = _.get(currentPlaylist.fields, `playlistItems[0]`);\n\n //Start proto at the same time of demo\n let firstItem = getItemByID(\"playlistItems\", playlistItemID);\n const isProto = firstItem.fields?.proto;\n const isProject = firstItem.fields?.project;\n\n if (isProto) {\n const proto = getItemByID(\"protos\", firstItem.fields.proto[0]);\n sendMQTTCurrentProto(proto);\n } else if (isProject) {\n const project = getItemByID(\"projects\", firstItem.fields.project[0]);\n sendMQTTCurrentProject(project);\n }\n\n //Navigate to page\n navigateToPage({ playlistID: currentPlaylist.id, playlistItemID });\n }\n };\n\n let content =
No demo with this ID found !
;\n if (demo) {\n let fields = demo.fields;\n let currentPlaylist = getItemByID(\"playlists\", _.get(fields, \"playlist[0]\", \"\"));\n let sidebarPlaylist = null;\n if (currentPlaylist) {\n sidebarPlaylist = (\n <>\n \n \n );\n }\n let playButton = (\n
startCurrentDemo()}>\n {\"Play\n
\n );\n if (currentDemo && currentDemo.id === demoID) {\n playButton = (\n
startCurrentDemo(null)}>\n {\"Stop\n
\n );\n }\n\n // Quick hack to fix errors when data isn't loaded fast enough\n if (!visitorSessions) return \"...\";\n\n content = (\n <>\n
\n
\n {playButton}\n
{_.get(fields, \"visitName\", \"No Name\")}
\n
\n {/*
*/}\n
\n
Created by {_.get(fields, \"ownerName\", \"\")}
\n
{new Date(fields.demoStartTime).toDateString()}
\n
\n
\n
\n
\n
\n
\n
{new Date(_.get(fields, \"demoStartTime\", 0)).toDateString()}
\n
\n {dayjs(_.get(fields, \"demoStartTime\", 0)).format(\"h:mm a\") +\n \" - \" +\n dayjs(_.get(fields, \"demoEndTime\", 0)).format(\"h:mm a\")}\n
\n
{_.get(fields, \"language\", \"\")}
\n
\n
\n
VISIT GOALS
\n
\n {_.get(\n fields,\n \"visitGoals\",\n \"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.\"\n )}\n
\n
\n
\n
\n
\n
DEMO PRESENTATOR
\n
\n {/*
*/}\n
{_.get(fields, \"demonstratorName\", \"\")}
\n
\n
\n
\n
DEMO BRIEF
\n
\n {_.get(\n fields,\n \"demoBrief\",\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\"\n )}\n
\n
\n
\n
\n {/*
Visitors
*/}\n
\n {visitorSessions.map((visitorSession, i) => {\n const takeawayFrame =\n visitorSession.session.fields.takeaway &&\n visitorSession.session.fields.takeaway.find(\n (takeaway) => takeaway.filename === \"welcomeStationFrame.jpg\"\n );\n\n const isCheckedIn = typeof visitorSession.session.fields.checkinEndedAt !== \"undefined\";\n const isConnected = currentGuestsCheckedInIds.indexOf(visitorSession.session.id) >= 0;\n const status = (isConnected && \"Connected\") || (isCheckedIn && \"Checked In\") || \"Invited\";\n\n return (\n \n
\n
\n
\n {status}\n
\n
\n
\n {takeawayFrame ? (\n
\n ) : (\n
\n {(\n visitorSession.visitor.fields.firstName.charAt(0) +\n visitorSession.visitor.fields.lastName.charAt(0)\n ).toUpperCase()}\n
\n )}\n
\n
\n {visitorSession.visitor.fields.firstName + \" \" + visitorSession.visitor.fields.lastName}\n
\n
{visitorSession.visitor.fields.jobTitle}
\n
{visitorSession.visitor.fields.company}
\n \n );\n })}\n
\n window.open(process.env.REACT_APP_BACKSTAGE_URL + \"/lobby/\" + demoID, \"_blank\")}\n >\n \"Add\n
\n \n \n \n
{sidebarPlaylist}
\n \n );\n }\n\n return
{content}
;\n};\n\nconst mapStateToProps = (state) => {\n return {\n demos: state.airtableReducer.demos,\n sessions: state.airtableReducer.sessions,\n visitors: state.airtableReducer.visitors,\n currentDemo: state.mqttReducer.currentDemo,\n currentGuestsCheckedInIds: state.mqttReducer.currentGuestsCheckedInIds,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n changeNavigationPage: (ids) => {\n return dispatch(actions.changeNavigationPage(ids));\n },\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id));\n },\n sendMQTTCurrentDemo: (demo) => {\n return dispatch(actions.sendMQTTCurrentDemo(demo));\n },\n sendMQTTCurrentProto: (proto) => {\n return dispatch(actions.sendMQTTCurrentProto(proto));\n },\n sendMQTTCurrentProject: (project) => {\n return dispatch(actions.sendMQTTCurrentProject(project));\n },\n sendMQTTCurrentPreset: (preset) => {\n return dispatch(actions.sendMQTTCurrentPreset(preset));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Demo);\n","import React, { useState, useEffect } from 'react'\nimport _ from 'lodash'\nimport { connect } from 'react-redux'\nimport { navigateToPage } from '../../utils/utils'\nimport dayjs from 'dayjs';\n\nimport iconSearch from 'shared/icons/search.svg'\nimport iconEnterBlockArrow from 'shared/icons/enter_block_arrow.svg'\nimport iconPlusSymbol from 'shared/icons/plus_symbol.svg'\n\nimport classes from './Demos.module.sass'\n\nconst Demos = ({ demos, sessions, searchbarActivated, isHomepage }) => {\n const [search, changeSearch] = useState('')\n\n const demoVisitorIds = {};\n demos.forEach(demo => {\n demoVisitorIds[demo.id] = sessions\n .filter((session) => session.fields.visitId && session.fields.visitId.indexOf(demo.id) >= 0)\n .map((session) => {\n return session.fields.visitorId && session.fields.visitorId.length && session.fields.visitorId[0];\n })\n })\n\n //This can be converted to a component\n const generateBlocksForDemos = (demosToGenerateBlocks, title) => {\n let blocks = demosToGenerateBlocks.sort((a,b) => new Date(_.get(b.fields, 'demoStartTime', 0)) - new Date(_.get(a.fields, 'demoStartTime', 0))).map((demo, i) => {\n let fields = demo.fields\n return (\n
navigateToPage({ demoID: demo.id })} className={classes.Demo}>\n
\n
\n \"Enter\n
\n
{_.get(fields, \"visitName\", \"\")}
\n
\n
{new Date(_.get(fields, \"demoStartTime\", 0)).toDateString()}
\n
\n
\n
\n {dayjs(_.get(fields, \"demoStartTime\", 0)).format(\"h:mm a\") +\n \" - \" +\n dayjs(_.get(fields, \"demoEndTime\", 0)).format(\"h:mm a\")}\n
\n
\n
\n
{demoVisitorIds[demo.id].length} Visitors
\n
\n );\n })\n return (\n <>\n
{title}
\n
\n {blocks.length ? blocks :
No demos
}\n
\n \n )\n }\n\n let demoBlocks = null\n if(demos) {\n if(search != '') {\n demos = demos.filter(demo => _.get(demo.fields, 'visitName', '').toLowerCase().includes(search))\n }\n\n let now = new Date()\n let startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n let endOfDay = new Date((startOfDay).getTime() + 86399999)\n\n let demosToday = demos.filter(demo => new Date(_.get(demo.fields, 'demoStartTime', 0)) > startOfDay && new Date(_.get(demo.fields, 'demoStartTime', 0)) < endOfDay)\n let demosPast = demos.filter(demo => new Date(_.get(demo.fields, 'demoStartTime', 0)) < startOfDay)\n let demosNext = demos.filter(demo => new Date(_.get(demo.fields, 'demoStartTime', 0)) > endOfDay)\n let demoBlocksToday = generateBlocksForDemos(demosToday, \"TODAY'S DEMOS\")\n let demoBlocksPast = generateBlocksForDemos(demosPast, \"PAST DEMOS\")\n let demoBlocksNext = generateBlocksForDemos(demosNext, \"NEXT DEMOS\")\n\n if(isHomepage) {\n demoBlocks = (\n <>\n {demoBlocksToday}\n {demoBlocksNext}\n \n )\n } else {\n demoBlocks = (\n <>\n {demoBlocksToday}\n {demoBlocksNext}\n {demoBlocksPast}\n \n )\n }\n }\n\n let searchbar = null\n if(searchbarActivated) {\n searchbar = (\n
\n \"Searchbar\n changeSearch(e.target.value.toLowerCase())} />\n
\n )\n }\n\n return (\n
\n {searchbar}\n
window.open(process.env.REACT_APP_RESERVATION_URL,'_blank')}>\n \"Add\n
NEW DEMO
\n
\n {demoBlocks}\n
\n )\n}\n\nconst mapStateToProps = state => {\n return {\n demos: state.airtableReducer.demos,\n sessions: state.airtableReducer.sessions\n }\n}\n\nexport default connect(mapStateToProps, null)(Demos)\n","import React, { useState, useEffect } from \"react\";\nimport _ from \"lodash\";\nimport * as actions from \"../../store/actions/index\";\nimport { connect } from \"react-redux\";\nimport { navigateToPage } from \"../../utils/utils\";\nimport placeholderImage from \"shared/icons/placeholder.svg\";\nimport playIcon from \"shared/icons/play.svg\";\nimport PlayablePreview from \"../../components/PlayablePreview/PlayablePreview\";\nimport classes from \"./Playlist.module.sass\";\n\nconst Playlist = ({ playlists, playlistItems, demoID, playlistID }) => {\n const [playlist, changePlaylist] = useState(null);\n\n //Find the current playlist based on the URL playlistID\n useEffect(() => {\n const currentPlaylist = playlists.find((d) => d.id === playlistID);\n changePlaylist(currentPlaylist);\n return () => {\n changePlaylist(null);\n };\n }, [playlists, playlistID]);\n\n let content =
No playlist with this ID found !
;\n if (playlist) {\n let fields = playlist.fields;\n const playlistItemsInPlaylist =\n playlist.fields.playlistItems &&\n playlist.fields.playlistItems\n .map((playlistItemID) => playlistItems.find((playlistItem) => playlistItem.id === playlistItemID))\n .filter((playlistItem) => typeof playlistItem !== \"undefined\");\n let thumbnails =\n playlistItemsInPlaylist &&\n playlistItemsInPlaylist.slice(0, 4).map((playlistItem, playlistItemIndex) => {\n let thumbnailField = playlistItem.fields.protoThumbnail || playlistItem.fields.projectThumbnail;\n return (\n
\n {thumbnailField && thumbnailField[0].url ? \"Thumbnail\" : null}\n
\n );\n });\n\n content = (\n <>\n
\n
{thumbnails}
\n
\n
{_.get(fields, \"name\", \"No name\")}
\n
\n
\n
Created by {_.get(fields, \"createdBy\", \"\")}
\n
\n {new Date(_.get(fields, \"created\", 0)).toDateString()}\n
\n
\n
\n
{_.get(fields, \"description\")}
\n
\n {\n navigateToPage({\n demoID: demoID,\n playlistID: playlist.id,\n playlistItemID: _.get(playlistItemsInPlaylist, \"[0].id\", null),\n });\n }}\n >\n {\"Play\n
\n \n
\n {playlistItemsInPlaylist && playlistItemsInPlaylist.map((playlistItem) => {\n return (\n \n );\n })}\n
\n \n );\n }\n return
{content}
;\n};\n\nconst mapStateToProps = (state) => {\n return {\n playlists: state.airtableReducer.playlists,\n playlistItems: state.airtableReducer.playlistItems,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Playlist);\n","import React, { useState } from 'react'\nimport _ from 'lodash'\nimport { connect } from 'react-redux'\nimport { navigateToPage } from '../../utils/utils'\n\nimport iconSearch from 'shared/icons/search.svg'\nimport iconEnterBlockArrow from 'shared/icons/enter_block_arrow.svg'\n\nimport classes from './Playlists.module.sass'\n\nconst Playlists = ({ playlists, playlistItems, searchbarActivated, isHomepage }) => {\n const [search, changeSearch] = useState('')\n\n let playlistBlocks = null\n if(playlists) {\n if(search != '') {\n playlists = playlists.filter(playlist => _.get(playlist.fields, 'name', '').toLowerCase().includes(search))\n }\n if(isHomepage) {\n playlists = playlists.filter(playlist => playlist.fields.showcaseHomepage).slice(0, 6)\n }\n playlistBlocks = playlists.sort((a,b) => _.get(a, 'fields.name', '-').charCodeAt(0) - _.get(b, 'fields.name', '-').charCodeAt(0)).map((playlist, playlistIndex) => {\n let fields = playlist.fields\n const playlistItemsInPlaylist =\n playlist.fields.playlistItems &&\n playlist.fields.playlistItems\n .map((playlistItemID) => playlistItems.find((playlistItem) => playlistItem.id === playlistItemID))\n .filter((playlistItem) => typeof playlistItem !== \"undefined\");\n let thumbnails =\n playlistItemsInPlaylist &&\n playlistItemsInPlaylist.slice(0, 4).map((playlistItem, playlistItemIndex) => {\n let thumbnailField = playlistItem.fields.protoThumbnail || playlistItem.fields.projectThumbnail;\n return (\n
\n {thumbnailField && thumbnailField[0].url ? \"Thumbnail\" : null}\n
\n );\n });\n\n return (\n
navigateToPage({ playlistID: playlist.id})} className={classes.Playlist}>\n
\n \"Enter\n
\n
\n {thumbnails}\n
\n
\n
{_.get(fields, 'name', 'No name')}
\n {/*
{_.get(fields, 'tagNames', []).map(t => '#'+t+' ').join('')}
*/}\n
Created by {_.get(fields, 'createdBy', '')}
\n
\n
\n )\n })\n }\n\n let searchbar = null\n if(searchbarActivated) {\n searchbar = (\n
\n \"Searchbar\n changeSearch(e.target.value.toLowerCase())} />\n
\n )\n }\n\n return (\n
\n {searchbar}\n
Playlists
\n
\n {playlistBlocks}\n
\n
\n )\n}\n\nconst mapStateToProps = state => {\n return {\n playlists: state.airtableReducer.playlists,\n playlistItems: state.airtableReducer.playlistItems,\n }\n}\n\nexport default connect(mapStateToProps, null)(Playlists)\n","import React, { useState } from \"react\";\nimport { connect, useDispatch } from \"react-redux\";\n\nimport * as actions from \"../../store/actions/index\";\nimport _ from \"lodash\";\n\nimport classes from \"./Media.module.sass\";\n\nimport placeholderImage from \"shared/icons/placeholder.svg\";\nimport playIcon from \"shared/icons/play.svg\";\nimport iconMediaImageLogo from \"shared/icons/media_image_logo.svg\";\nimport iconMediaVideoLogo from \"shared/icons/media_video_logo.svg\";\nimport iconMediaGradientCircle from \"shared/icons/media_gradient_circle.svg\";\nimport iconMediaBackward from \"shared/icons/media_backward.svg\";\nimport iconMediaForward from \"shared/icons/media_forward.svg\";\nimport iconMediaPause from \"shared/icons/media_pause.svg\";\nimport iconMediaX from \"shared/icons/media_x.svg\";\n\nfunction Media({ media, currentMedia, sendMQTTCurrentMedia, sendMQTTScrubMedia }) {\n const [mediaModalOpen, changeMediaModalOpen] = useState(false);\n\n const startMedia = () => {\n if (!currentMedia || currentMedia.airtableID !== media.id) {\n sendMQTTCurrentMedia(media);\n changeMediaModalOpen(false);\n }\n };\n\n const stopMedia = () => {\n sendMQTTCurrentMedia({});\n };\n\n let fields = media.fields;\n let controls = (\n
\n {\"Play\n
\n );\n let playingClass = null;\n if (currentMedia && currentMedia.id === media.id) {\n playingClass = classes.Playing;\n const isVideo = _.get(fields, \"type\", \"Video\") === \"Video\";\n controls = (\n <>\n {isVideo && (\n
sendMQTTScrubMedia(-15)}>\n {\"Circle\n {\"Backward\n
\n )}\n
\n {\"Circle\n {\"Pause\n
\n {isVideo && (\n
sendMQTTScrubMedia(15)}>\n {\"Circle\n {\"Forward\n
\n )}\n \n );\n }\n\n const mediaInfoOpenClass = mediaModalOpen ? classes.MediaInfoOpen : classes.MediaInfoClosed;\n const mediaType = _.get(fields, \"type\", \"Photo\");\n const isImage = mediaType === \"Photo\" || mediaType === \"Stats\";\n\n return (\n
\n
\n
\n
changeMediaModalOpen(false)}>\n {\"Close\n
\n
{_.get(fields, \"description\", \"\")}
\n
\n
\n
changeMediaModalOpen(true)}>\n
i
\n
\n \n {controls}\n
\n
\n
\n \n
\n
{_.get(fields, \"name\", \"\")}
\n
\n
\n
\n );\n}\n\nconst mapStateToProps = (state) => {\n return {\n currentMedia: state.mqttReducer.currentMedia,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id));\n },\n sendMQTTCurrentMedia: (media) => {\n return dispatch(actions.sendMQTTCurrentMedia(media));\n },\n sendMQTTScrubMedia: (scrubValue) => {\n return dispatch(actions.sendMQTTScrubMedia(scrubValue));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Media);\n","import React from \"react\";\n\nimport classes from \"./GallerySection.module.sass\";\nimport Media from \"components/Media/Media\";\n\nexport default function GallerySection({ title, items }) {\n return (\n
\n
{title}
\n
\n {items.map((mediaItem) => (\n \n ))}\n
\n
\n );\n}\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport * as actions from \"../../store/actions/index\";\n\nimport classes from \"./GalleryTab.module.sass\";\nimport GallerySection from \"./GallerySection\";\n\nfunction GalleryTab({ getItemByID, item }) {\n const getMediaItems = (filter) => {\n return _.get(item, \"fields['medias']\", [])\n .map((m) => getItemByID(\"medias\", m))\n .filter((m) => typeof m !== \"undefined\")\n .filter((m) => m.fields.type === filter);\n };\n\n const photos = getMediaItems(\"Photo\");\n const videos = getMediaItems(\"Video\");\n const stats = getMediaItems(\"Stats\");\n\n return (\n
\n {photos.length || videos.length || stats.length ? (\n <>\n {photos.length > 0 && }\n {videos.length > 0 && }\n {stats.length > 0 && }\n \n ) : (\n \"No media\"\n )}\n
\n );\n}\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(GalleryTab);\n","import React from \"react\";\nimport classes from \"./Software.module.sass\";\n\nimport iconUnityLogo from \"shared/icons/unity_logo.svg\";\nimport iconTouchDesignerLogo from \"shared/icons/touchdesigner_logo.svg\";\n\nfunction Software({ engine }) {\n return (\n
\n
Software
\n
\n
\n {(engine === \"Unity\" && \"Software) ||\n (engine === \"TouchDesigner\" && \"Software)}\n
\n
{engine}
\n
\n
\n );\n}\n\nexport default Software;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport * as actions from \"../../store/actions/index\";\nimport { connect } from \"react-redux\";\nimport { useLocation } from \"@reach/router\";\nimport _ from \"lodash\";\nimport SidebarPlaylist from \"../../components/SidebarPlaylist/SidebarPlaylist\";\nimport { navigateToPage } from \"../../utils/utils\";\nimport playIcon from \"shared/icons/play.svg\";\nimport stopButtonIcon from \"shared/icons/stop_button.svg\";\nimport placeholderImage from \"shared/icons/placeholder.svg\";\n\nimport iconEnterBlockArrow from \"shared/icons/enter_block_arrow.svg\";\nimport iconTechnology from \"shared/icons/technology.svg\";\nimport iconArrowNotes from \"shared/icons/arrow_notes.svg\";\nimport iconWarningSignPresets from \"shared/icons/warning_sign_presets.svg\";\n\nimport classes from \"./Proto.module.sass\";\nimport PlayablePreview from \"../../components/PlayablePreview/PlayablePreview\";\nimport Media from \"../../components/Media/Media\";\nimport GalleryTab from \"../../components/MediaGallery/GalleryTab\";\nimport Software from \"components/ProtoOrProject/Software\";\nimport { Collapse } from \"antd\";\n\n/**\n * IMPORTANT\n *\n * Presets are loaded dynamically when the tablet send a current proto on MQTT topic demoRoom/common/state/proto\n * The presets are then immediately sent by the ProtoFramework to the tablet on demoRoom/common/state/protoPresets (see mqttActions.js file)\n *\n */\n\nconst Proto = ({\n changeNavigationPage,\n protos,\n presets,\n currentPreset,\n technologies,\n currentDemo,\n getItemByID,\n sendMQTTCurrentMedia,\n sendMQTTCurrentProject,\n sendMQTTCurrentProto,\n sendMQTTCurrentNavigation,\n sendMQTTCurrentDemo,\n currentProto,\n sendMQTTCurrentPreset,\n protoID,\n playlistID,\n demoID,\n playlistItemID,\n}) => {\n const location = useLocation();\n const refLeftContent = useRef();\n\n useEffect(() => {\n changeNavigationPage({ protoID, playlistID, playlistItemID });\n console.log(protoID, playlistID, playlistItemID);\n }, [protoID, playlistID, playlistItemID]);\n\n useEffect(() => {\n if (!refLeftContent.current || !location.pathname) return;\n refLeftContent.current.scrollTo(0, 0);\n }, [location?.pathname]);\n\n //Load proto with protoID found in URL\n const [proto, changeProto] = useState(null);\n useEffect(() => {\n const activeProto = protos.find((p) => p.id === protoID);\n changeProto(activeProto);\n if (currentProto && currentProto.id === activeProto.id) {\n changeProtoLoadedState(true);\n } else {\n changeProtoLoadedState(false);\n }\n return () => {\n changeProto(null);\n };\n }, [currentProto, protos, protoID]);\n\n const [tab, changeTab] = useState(\"infos\");\n const [protoLoaded, changeProtoLoadedState] = useState(false);\n\n const launchTechnology = (technology) => {\n let protoID = _.get(technology, \"fields.showcaseProto[0]\", \"\");\n if (protoID) {\n navigateToPage({ protoID });\n }\n };\n\n const startCurrentProto = (proto) => {\n sendMQTTCurrentProject(null, {});\n sendMQTTCurrentMedia(null, {});\n if (proto === null) {\n sendMQTTCurrentProto(null, {});\n sendMQTTCurrentMedia(null, {});\n changeProtoLoadedState(false);\n sendMQTTCurrentNavigation({});\n } else {\n if (demoID && (!currentDemo || (currentDemo && currentDemo.id !== demoID))) {\n let demo = getItemByID(\"demos\", demoID);\n sendMQTTCurrentDemo(demo);\n }\n //sending also the ids for navigation back to proto\n sendMQTTCurrentProto(proto);\n sendMQTTCurrentNavigation({ playlistID, playlistItemID, protoID, demoID });\n setTimeout(() => {\n changeProtoLoadedState(true);\n }, 2000);\n }\n };\n\n const activatePreset = (preset) => {\n sendMQTTCurrentPreset(preset);\n };\n\n let sidebarPlaylist = null;\n let content =
No proto with this ID found !
;\n if (proto) {\n let fields = proto.fields;\n let currentTab = null;\n let currentPlaylist = playlistID ? getItemByID(\"playlists\", playlistID) : null;\n let presetBlocks = (\n
\n \n
PRESS PLAY TO LOAD PRESETS
\n
\n );\n if (presets && protoLoaded && currentProto && currentProto.id === protoID) {\n presetBlocks = (\n
\n {presets.map((preset, i) => {\n let activeClass = null;\n if (!currentPreset && i === 0) {\n activeClass = classes.Active;\n }\n if (currentPreset && currentPreset === preset) {\n activeClass = classes.Active;\n }\n return (\n activatePreset(preset)}\n >\n {activeClass ? null : (\n
\n {\"Play\n
\n )}\n
\n
{i.toString().padStart(3, \"0\")}
\n
{preset}
\n
\n
\n );\n })}\n \n );\n }\n if (currentPlaylist) {\n sidebarPlaylist = (\n
\n \n
\n );\n } else {\n sidebarPlaylist = null;\n }\n\n let associatedTechnologies = null;\n let protoTechnologies = _.get(fields, \"technologies\", []);\n if (technologies && technologies.length && protoTechnologies && protoTechnologies.length) {\n let technologies = protoTechnologies.map((t) => getItemByID(\"technologies\", t));\n associatedTechnologies = technologies.map((technology, i) => {\n let iconEnterTech = null;\n if (_.get(technology, \"fields.showcaseProto[0]\", \"\")) {\n iconEnterTech = (\n
\n \"Enter\n
\n );\n }\n return (\n
launchTechnology(technology)}>\n
\n \"Enter\n
\n {iconEnterTech}\n {/*
i
*/}\n
{_.get(technology, \"fields.name\", \"no name\")}
\n
\n );\n });\n }\n\n if (tab === \"infos\") {\n const relatedProtosData = _.get(fields, \"relatedPrototypes\", []).map((rp) => getItemByID(\"protos\", rp));\n let relatedProtos = null;\n relatedProtos = (\n
\n
\n {relatedProtosData.map((proto, i) => {\n // If a relatedPrototype refers to a prototype with status \"willNotFix\",\n // it will be absent from the list of protos so we must skip protos them\n if (!proto) return null;\n\n let fields = proto.fields;\n let navigationData;\n if (!demoID && !playlistID) {\n navigationData = { protoID: proto.id };\n } else if (!demoID && playlistID) {\n navigationData = { protoID: proto.id, playlistID };\n } else {\n navigationData = { protoID: proto.id, playlistID, demoID };\n }\n return (\n \n );\n })}\n
\n
\n );\n\n currentTab = (\n
\n
\n
\n \n {_.get(fields, \"howTo\", \"\") && (\n \n
{_.get(fields, \"howTo\", \"\")}
\n
\n )}\n {_.get(fields, \"notes\", \"\") && (\n \n
\n {_.get(fields, \"notes\", \"\")\n .split(\"**\")\n .slice(1)\n .map((line, i) => {\n return (\n
\n \"arrow {line}\n
\n
\n
\n );\n })}\n
\n
\n )}\n {relatedProtosData.length && (\n \n {relatedProtos}\n \n )}\n
\n
\n
\n
\n
\n
Presets
\n {presetBlocks}\n
\n
\n
\n
Technology
\n
{associatedTechnologies}
\n
\n \n
\n
\n
\n );\n } else if (tab === \"gallery\") {\n currentTab = ;\n }\n\n let playButton = (\n
startCurrentProto(proto)}>\n {\"Play\n
\n );\n if (currentProto && currentProto.id === protoID) {\n playButton = (\n
startCurrentProto(null)}>\n {\"Stop\n
\n );\n }\n\n content = (\n <>\n \n
\n {playButton}\n
\n \n
\n
\n
{_.get(fields, \"name\", \"No Name\")}
\n
\n {_.get(fields, \"tagNames\", [])\n .map((t) => \"#\" + t + \" \")\n .join(\"\")}\n
\n
\n {/*
*/}\n
\n
Created by {_.get(fields, \"createdBy\", \"\")}
\n
{new Date(_.get(fields, \"created\", \"\")).toDateString()}
\n
\n
\n
\n
\n
\n
\n changeTab(\"infos\")}\n >\n
Infos
\n
\n changeTab(\"gallery\")}\n >\n
Gallery
\n
\n \n {currentTab}\n \n \n {sidebarPlaylist}\n \n );\n }\n\n return
{content}
;\n};\n\nconst mapStateToProps = (state) => {\n return {\n currentDemo: state.mqttReducer.currentDemo,\n protos: state.airtableReducer.protos,\n presets: state.mqttReducer.presets,\n currentProto: state.mqttReducer.currentProto,\n currentPreset: state.mqttReducer.currentPreset,\n technologies: state.airtableReducer.technologies,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n changeNavigationPage: (ids) => {\n return dispatch(actions.changeNavigationPage(ids));\n },\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id));\n },\n sendMQTTCurrentProto: (proto) => {\n return dispatch(actions.sendMQTTCurrentProto(proto));\n },\n sendMQTTCurrentProject: (project) => {\n return dispatch(actions.sendMQTTCurrentProject(project));\n },\n sendMQTTCurrentNavigation: (navigation) => {\n return dispatch(actions.sendMQTTCurrentNavigation(navigation));\n },\n sendMQTTCurrentPreset: (preset) => {\n return dispatch(actions.sendMQTTCurrentPreset(preset));\n },\n sendMQTTCurrentMedia: (media) => {\n return dispatch(actions.sendMQTTCurrentMedia(media));\n },\n sendMQTTCurrentDemo: (demo) => {\n return dispatch(actions.sendMQTTCurrentDemo(demo));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Proto);\n","import React from \"react\";\n\nimport classes from \"./TagFilter.module.sass\";\n\n// Icons\nimport iconTagAugmentedGames from \"shared/icons/tag_augmented_games.svg\";\nimport iconTagAugmentedPerformance from \"shared/icons/tag_augmented_performance.svg\";\nimport iconTagInteractiveParcours from \"shared/icons/tag_interactive_parcours.svg\";\nimport iconTagInteractivePopup from \"shared/icons/tag_interactive_popup.svg\";\nimport iconTagLaw from \"shared/icons/tag_law.svg\";\nimport iconTagLivingVisual from \"shared/icons/tag_living_visual.svg\";\n\nconst filterIcons = {\n interactiveParcours: iconTagInteractiveParcours,\n augmentedGames: iconTagAugmentedGames,\n augmentedPerformances: iconTagAugmentedPerformance,\n livingVisual: iconTagLivingVisual,\n interactivePopup: iconTagInteractivePopup,\n interactiveParcours: iconTagInteractiveParcours,\n law: iconTagLaw,\n};\n\nfunction TagFilter({ tag, onClick, isActive }) {\n return (\n
\n
\n \n {tag.fields.name}\n
\n
\n );\n}\n\nexport default TagFilter;\n","import React from \"react\";\nimport { Menu, Dropdown } from \"antd\";\n\nimport classes from \"./Dropdown.module.sass\";\n\nimport iconDropdownArrow from \"shared/icons/dropdown_arrow.svg\";\n\nfunction DropdownMenu({ value, options, onChange, placeholder }) {\n const activeOption = options.find((option) => option.value === value);\n return (\n \n onChange(\"\")}>\n
-
\n
\n {options.map((option, optionIndex) => {\n return (\n onChange(option.value)}>\n
{option.text}
\n
\n );\n })}\n \n }\n trigger={[\"click\"]}\n >\n
\n {(activeOption && activeOption.text) || placeholder}\n \"Dropdown\n
\n \n );\n}\n\nexport default DropdownMenu;\n","import React, { useState } from \"react\";\nimport _ from \"lodash\";\nimport { connect } from \"react-redux\";\nimport placeholderImage from \"shared/icons/placeholder.svg\";\n\nimport iconSearch from \"shared/icons/search.svg\";\nimport iconIncompleteHide from \"shared/icons/incomplete_hide.svg\";\nimport iconIncompleteShow from \"shared/icons/incomplete_show.svg\";\n\nimport classes from \"./Protos.module.sass\";\nimport PlayablePreview from \"../../components/PlayablePreview/PlayablePreview\";\nimport TagFilter from \"../../components/TagFilter/TagFilter\";\nimport Dropdown from \"../../components/Dropdown/Dropdown\";\n\nconst Protos = ({ protos, searchbarActivated, isHomepage, technologies, tags }) => {\n const [search, changeSearch] = useState(\"\");\n const [engineFilter, changeEngineFilter] = useState();\n const [technologyFilter, changeTechnologyFilter] = useState();\n const [interactionFilter, changeInteractionFilter] = useState();\n const [tagFilter, changeTagFilter] = useState();\n const [showIncompleteProtos, changeShowIncompleteProtos] = useState(true);\n\n let interactionDropdown = null;\n let engineDropdown = null;\n let technologyDropdown = null;\n\n const engines = protos.reduce((engineList, proto) => {\n const engine = proto.fields.engine;\n if (engine && engineList.indexOf(engine) < 0) {\n engineList = [...engineList, engine];\n }\n return engineList;\n }, []);\n\n const interactions = protos.reduce((interactionList, proto) => {\n if (proto.fields.interaction) {\n proto.fields.interaction.forEach((interaction) => {\n if (interactionList.indexOf(interaction) < 0) {\n interactionList = [...interactionList, interaction];\n }\n });\n }\n return interactionList;\n }, []);\n\n let protoBlocks = null;\n if (protos) {\n // MANDATORY - fields.uuid means the proto is associated with a project (TouchDesigner, Unity, Unreal)\n let filteredProtos = protos.filter((p) => p.fields.uuid);\n\n filteredProtos = protos.filter((p) => p?.fields?.locations?.indexOf(process.env.REACT_APP_OFFICE_LOCATION) >= 0);\n if (search != \"\") {\n filteredProtos = filteredProtos.filter((proto) =>\n _.get(proto.fields, \"name\", \"\").toLowerCase().includes(search)\n );\n }\n if (engineFilter) {\n filteredProtos = filteredProtos.filter((proto) => _.get(proto.fields, \"engine\", \"\") === engineFilter);\n }\n if (technologyFilter) {\n filteredProtos = filteredProtos.filter((proto) =>\n _.get(proto.fields, \"technologies\", \"\").includes(technologyFilter)\n );\n }\n if (interactionFilter) {\n filteredProtos = filteredProtos.filter((proto) =>\n _.get(proto.fields, \"interaction\", \"\").includes(interactionFilter)\n );\n }\n if (tagFilter) {\n filteredProtos = filteredProtos.filter((proto) => _.get(proto.fields, \"tags\", \"\").includes(tagFilter));\n }\n if (!showIncompleteProtos) {\n filteredProtos = filteredProtos.filter((proto) => _.get(proto.fields, \"status\") === \"curated\");\n }\n\n //Homepage showcases 6 most recent protos\n if (isHomepage) {\n filteredProtos = filteredProtos\n .sort((a, b) => new Date(b.fields.created) - new Date(a.fields.created))\n .slice(0, 6);\n } else {\n //Otherwise order them by alphabetical order\n filteredProtos = filteredProtos.sort(\n (a, b) => _.get(a, \"fields.name\", \"-\").charCodeAt(0) - _.get(b, \"fields.name\", \"-\").charCodeAt(0)\n );\n\n engineDropdown = (\n changeEngineFilter(value)}\n options={engines.map((engine) => ({\n text: engine,\n value: engine,\n }))}\n />\n );\n\n interactionDropdown = (\n changeInteractionFilter(value)}\n options={interactions.map((interaction) => ({\n text: interaction,\n value: interaction,\n }))}\n />\n );\n\n technologyDropdown = (\n changeTechnologyFilter(value)}\n options={technologies.map((technology) => ({\n value: technology.id,\n text: _.get(technology, \"fields.name\", \"\"),\n }))}\n />\n );\n }\n protoBlocks = filteredProtos.map((proto, i) => {\n let fields = proto.fields;\n return (\n \n );\n });\n }\n\n let searchbar = null;\n if (searchbarActivated) {\n searchbar = (\n
\n \"Searchbar\n changeSearch(e.target.value.toLowerCase())}\n />\n
\n );\n }\n\n return (\n
\n
\n {searchbar}\n {engineDropdown}\n {technologyDropdown}\n {interactionDropdown}\n
\n {!isHomepage && (\n
\n {tags.filter(tag => tag.fields.uiIconKey).map((tag) => (\n changeTagFilter(tagFilter === tag.id ? \"\" : tag.id)}\n isActive={tagFilter === tag.id}\n />\n ))}\n
\n )}\n
\n
{isHomepage ? \"Latest Protos\" : \"Protos\"}
\n {!isHomepage && (\n changeShowIncompleteProtos(!showIncompleteProtos)}\n >\n \n {showIncompleteProtos ? \"Hide Incomplete protos\" : \"Show Incomplete Protos\"}\n \n )}\n
\n
{protoBlocks}
\n
\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n tags: state.airtableReducer.tags,\n protos: state.airtableReducer.protos,\n technologies: state.airtableReducer.technologies,\n };\n};\n\nexport default connect(mapStateToProps, null)(Protos);\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { useLocation } from \"@reach/router\";\n\nimport * as actions from \"../../store/actions/index\";\nimport SidebarPlaylist from \"../../components/SidebarPlaylist/SidebarPlaylist\";\nimport { navigateToPage } from \"../../utils/utils\";\nimport playIcon from \"shared/icons/play.svg\";\nimport stopButtonIcon from \"shared/icons/stop_button.svg\";\nimport placeholderImage from \"shared/icons/placeholder.svg\";\nimport iconEnterBlockArrow from \"shared/icons/enter_block_arrow.svg\";\nimport iconTechnology from \"shared/icons/technology.svg\";\nimport iconArrowNotes from \"shared/icons/arrow_notes.svg\";\n\nimport iconMediaGradientCircle from \"shared/icons/media_gradient_circle.svg\";\nimport iconMediaBackward from \"shared/icons/media_backward.svg\";\nimport iconMediaForward from \"shared/icons/media_forward.svg\";\n\nimport classes from \"./Project.module.sass\";\nimport PlayablePreview from \"components/PlayablePreview/PlayablePreview\";\nimport GalleryTab from \"components/MediaGallery/GalleryTab\";\nimport Software from \"components/ProtoOrProject/Software\";\nimport { Collapse } from \"antd\";\n\nconst Project = ({\n changeNavigationPage,\n projects,\n technologies,\n currentDemo,\n getItemByID,\n sendMQTTCurrentDemo,\n sendMQTTCurrentProject,\n sendMQTTCurrentProto,\n sendMQTTCurrentMedia,\n currentProject,\n projectID,\n playlistID,\n demoID,\n playlistItemID,\n sendMQTTCurrentNavigation,\n sendMQTTScrubMedia,\n}) => {\n const location = useLocation();\n const refLeftContent = useRef();\n\n useEffect(() => {\n changeNavigationPage({ projectID, playlistID, playlistItemID });\n }, [projectID, playlistID, playlistItemID]);\n\n useEffect(() => {\n if (!refLeftContent.current) return;\n refLeftContent.current.scrollTo(0, 0);\n }, [location.pathname]);\n\n //Load project with projectID found in URL\n const [project, changeProject] = useState(null);\n useEffect(() => {\n const activeProject = projects.find((p) => p.id === projectID);\n changeProject(activeProject);\n return () => {\n changeProject(null);\n };\n }, [currentProject, projects, projectID]);\n\n const [tab, changeTab] = useState(\"infos\");\n\n const launchTechnology = (technology) => {\n let protoID = _.get(technology, \"fields.showcaseProto[0]\", \"\");\n if (protoID) {\n navigateToPage({ protoID });\n }\n };\n\n const startCurrentProject = (project) => {\n sendMQTTCurrentProto(null, {});\n sendMQTTCurrentMedia(null, {});\n if (project === null) {\n sendMQTTCurrentProject(null, {});\n sendMQTTCurrentMedia(null, {});\n } else {\n if (demoID && (!currentDemo || (currentDemo && currentDemo.id !== demoID))) {\n let demo = getItemByID(\"demos\", demoID);\n sendMQTTCurrentDemo(demo);\n }\n //sending also the ids for navigation back to project\n sendMQTTCurrentProject(project);\n sendMQTTCurrentNavigation({ playlistID, playlistItemID, projectID, demoID });\n }\n };\n\n let sidebarPlaylist = null;\n let content =
No project with this ID found !
;\n if (project) {\n let fields = project.fields;\n let currentTab = null;\n let currentPlaylist = playlistID ? getItemByID(\"playlists\", playlistID) : null;\n\n if (currentPlaylist) {\n sidebarPlaylist = (\n
\n \n
\n );\n } else {\n sidebarPlaylist = null;\n }\n\n let associatedTechnologies = null;\n let projectTechnologies = _.get(fields, \"technologies\", []);\n if (technologies && technologies.length && projectTechnologies && projectTechnologies.length) {\n let technologies = projectTechnologies.map((t) => getItemByID(\"technologies\", t));\n associatedTechnologies = technologies.map((technology, i) => {\n let iconEnterTech = null;\n if (_.get(technology, \"fields.showcaseProto[0]\", \"\")) {\n iconEnterTech = (\n
\n \"Enter\n
\n );\n }\n return (\n
launchTechnology(technology)}>\n
\n \"Enter\n
\n {iconEnterTech}\n
{_.get(technology, \"fields.name\", \"no name\")}
\n
\n );\n });\n }\n\n if (tab === \"infos\") {\n const relatedProjectsData = _.get(fields, \"relatedPrototypes\", []).map((rp) => getItemByID(\"projects\", rp));\n let relatedProjects = null;\n relatedProjects = (\n
\n
\n {relatedProjectsData.map((project, i) => {\n let fields = project.fields;\n let navigationData;\n if (!demoID && !playlistID) {\n navigationData = { projectID: project.id };\n } else if (!demoID && playlistID) {\n navigationData = { projectID: project.id, playlistID };\n } else {\n navigationData = { projectID: project.id, playlistID, demoID };\n }\n return (\n \n );\n })}\n
\n
\n );\n\n currentTab = (\n
\n
\n
\n \n {_.get(fields, \"howTo\", \"\") && (\n \n
{_.get(fields, \"howTo\", \"\")}
\n
\n )}\n {_.get(fields, \"notes\", \"\") && (\n \n
\n {_.get(fields, \"notes\", \"\")\n .split(\"**\")\n .slice(1)\n .map((line, i) => {\n return (\n
\n \"arrow {line}\n
\n
\n
\n );\n })}\n
\n
\n )}\n {relatedProjectsData.length && (\n \n {relatedProjects}\n \n )}\n
\n
\n
\n
\n
Technology
\n
{associatedTechnologies}
\n
\n \n
\n
\n
\n );\n } else if (tab === \"gallery\") {\n currentTab = ;\n }\n\n let playButton = (\n
startCurrentProject(project)}>\n {\"Play\n
\n );\n if (currentProject && currentProject.id === projectID) {\n playButton = (\n
startCurrentProject(null)}>\n {\"Stop\n
\n );\n }\n\n content = (\n <>\n \n
\n
\n {playButton}\n {currentProject?.id == projectID && (\n <>\n
\n
sendMQTTScrubMedia(-15)}>\n \n {\"Backward\n
\n
sendMQTTScrubMedia(15)}>\n \n {\"Forward\n
\n
\n \n )}\n
\n
\n \n
\n
\n
{_.get(fields, \"name\", \"No Name\")}
\n
\n {_.get(fields, \"tagNames\", [])\n .map((t) => \"#\" + t + \" \")\n .join(\"\")}\n
\n
\n
\n
\n
\n changeTab(\"infos\")}\n >\n
Infos
\n
\n changeTab(\"gallery\")}\n >\n
Gallery
\n
\n \n {currentTab}\n \n \n {sidebarPlaylist}\n \n );\n }\n\n return
{content}
;\n};\n\nconst mapStateToProps = (state) => {\n return {\n currentDemo: state.mqttReducer.currentDemo,\n projects: state.airtableReducer.projects,\n currentProject: state.mqttReducer.currentProject,\n technologies: state.airtableReducer.technologies,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n changeNavigationPage: (ids) => {\n return dispatch(actions.changeNavigationPage(ids));\n },\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id));\n },\n sendMQTTCurrentProject: (project) => {\n return dispatch(actions.sendMQTTCurrentProject(project));\n },\n sendMQTTCurrentNavigation: (navigation) => {\n return dispatch(actions.sendMQTTCurrentNavigation(navigation));\n },\n sendMQTTCurrentDemo: (demo) => {\n return dispatch(actions.sendMQTTCurrentDemo(demo));\n },\n sendMQTTCurrentProto: (proto) => {\n return dispatch(actions.sendMQTTCurrentProto(proto));\n },\n sendMQTTCurrentMedia: (media) => {\n return dispatch(actions.sendMQTTCurrentMedia(media));\n },\n sendMQTTScrubMedia: (scrubValue) => {\n return dispatch(actions.sendMQTTScrubMedia(scrubValue));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Project);\n","import React, { useState } from \"react\";\nimport _ from \"lodash\";\nimport { connect } from \"react-redux\";\nimport placeholderImage from \"shared/icons/placeholder.svg\";\n\nimport iconSearch from \"shared/icons/search.svg\";\nimport iconIncompleteHide from \"shared/icons/incomplete_hide.svg\";\nimport iconIncompleteShow from \"shared/icons/incomplete_show.svg\";\n\nimport classes from \"./Projects.module.sass\";\nimport PlayablePreview from \"../../components/PlayablePreview/PlayablePreview\";\nimport TagFilter from \"../../components/TagFilter/TagFilter\";\nimport Dropdown from \"../../components/Dropdown/Dropdown\";\n\nconst Projects = ({ projects, searchbarActivated, isHomepage, technologies, tags }) => {\n const [search, changeSearch] = useState(\"\");\n const [engineFilter, changeEngineFilter] = useState();\n const [technologyFilter, changeTechnologyFilter] = useState();\n const [interactionFilter, changeInteractionFilter] = useState();\n const [tagFilter, changeTagFilter] = useState();\n const [showIncompleteProjects, changeShowIncompleteProjects] = useState(true);\n\n let interactionDropdown = null;\n let engineDropdown = null;\n let technologyDropdown = null;\n\n const interactions = projects.reduce((interactionList, project) => {\n if (project.fields.interaction) {\n project.fields.interaction.forEach((interaction) => {\n if (interactionList.indexOf(interaction) < 0) {\n interactionList = [...interactionList, interaction];\n }\n });\n }\n return interactionList;\n }, []);\n\n let projectBlocks = null;\n if (projects) {\n let filteredProjects = [...projects];\n if (search != \"\") {\n filteredProjects = filteredProjects.filter((project) =>\n _.get(project.fields, \"name\", \"\").toLowerCase().includes(search)\n );\n }\n if (engineFilter) {\n filteredProjects = filteredProjects.filter((project) => _.get(project.fields, \"engine\", \"\") === engineFilter);\n }\n if (technologyFilter) {\n filteredProjects = filteredProjects.filter((project) =>\n _.get(project.fields, \"technologies\", \"\").includes(technologyFilter)\n );\n }\n if (interactionFilter) {\n filteredProjects = filteredProjects.filter((project) =>\n _.get(project.fields, \"interaction\", \"\").includes(interactionFilter)\n );\n }\n if (tagFilter) {\n filteredProjects = filteredProjects.filter((project) => _.get(project.fields, \"tags\", \"\").includes(tagFilter));\n }\n if (!showIncompleteProjects) {\n filteredProjects = filteredProjects.filter((project) => _.get(project.fields, \"status\") === \"curated\");\n }\n\n //Homepage showcases 6 most recent projects\n if (isHomepage) {\n filteredProjects = filteredProjects\n .sort((a, b) => new Date(b.fields.created) - new Date(a.fields.created))\n .slice(0, 6);\n } else {\n //Otherwise order them by alphabetical order\n filteredProjects = filteredProjects.sort(\n (a, b) => _.get(a, \"fields.name\", \"-\").charCodeAt(0) - _.get(b, \"fields.name\", \"-\").charCodeAt(0)\n );\n\n engineDropdown = (\n changeEngineFilter(value)}\n options={[\n {\n text: \"Unity\",\n value: \"Unity\",\n },\n {\n text: \"TouchDesigner\",\n value: \"TouchDesigner\",\n },\n ]}\n />\n );\n\n interactionDropdown = (\n changeInteractionFilter(value)}\n options={interactions.map((interaction) => ({\n text: interaction,\n value: interaction,\n }))}\n />\n );\n\n technologyDropdown = (\n changeTechnologyFilter(value)}\n options={technologies.map((technology) => ({\n value: technology.id,\n text: _.get(technology, \"fields.name\", \"\"),\n }))}\n />\n );\n }\n projectBlocks = filteredProjects.map((project, i) => {\n let fields = project.fields;\n return (\n \n );\n });\n }\n\n let searchbar = null;\n if (searchbarActivated) {\n searchbar = (\n
\n \"Searchbar\n changeSearch(e.target.value.toLowerCase())}\n />\n
\n );\n }\n\n return (\n
\n
\n {searchbar}\n {engineDropdown}\n {technologyDropdown}\n {interactionDropdown}\n
\n {!isHomepage && (\n
\n {tags.filter(tag => tag.fields.uiIconKey).map((tag) => (\n changeTagFilter(tagFilter === tag.id ? \"\" : tag.id)}\n isActive={tagFilter === tag.id}\n />\n ))}\n
\n )}\n
\n
{isHomepage ? \"Latest Projects\" : \"Projects\"}
\n {!isHomepage && (\n changeShowIncompleteProjects(!showIncompleteProjects)}\n >\n \n {showIncompleteProjects ? \"Hide Incomplete projects\" : \"Show Incomplete Projects\"}\n \n )}\n
\n
{projectBlocks}
\n
\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n tags: state.airtableReducer.tags,\n projects: state.airtableReducer.projects,\n technologies: state.airtableReducer.technologies,\n };\n};\n\nexport default connect(mapStateToProps, null)(Projects);\n","import React, { useState } from 'react'\nimport * as actions from '../../store/actions/index'\n// import { Modal } from 'antd';\nimport _ from 'lodash'\nimport { connect, useDispatch } from 'react-redux'\n// import { CaretRightOutlined, CaretLeftOutlined } from '@ant-design/icons'\n\nimport iconSearch from 'shared/icons/search.svg'\n\nimport classes from './Medias.module.sass'\nimport Media from '../../components/Media/Media'\n\nconst Medias = ({medias, getItemByID, searchbarActivated}) => {\n const [search, changeSearch] = useState('')\n\n\n let mediaBlocks = null\n if(medias) {\n if(search != '') {\n medias = medias.filter(media => _.get(media.fields, 'name', '').toLowerCase().includes(search))\n }\n mediaBlocks = medias\n .filter((media) => media.fields.type === \"Video\" || media.fields.type === \"Photo\")\n .map((media, i) => );\n }\n\n let searchbar = null\n if(searchbarActivated) {\n searchbar = (\n
\n \"Searchbar\n changeSearch(e.target.value.toLowerCase())} />\n
\n )\n }\n\n return (\n
\n {searchbar}\n {/* {mediaModal} */}\n
Medias
\n
\n {mediaBlocks}\n
\n
\n )\n}\n\nconst mapStateToProps = state => {\n return {\n medias: state.airtableReducer.medias\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n getItemByID: (model, id) => {\n return dispatch(actions.getItemByID(model, id))\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Medias)\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport _ from 'lodash'\nimport Proto from \"../Proto/Proto\";\nimport Project from \"../Project/Project\";\n\nfunction PlaylistItem({ playlistID, playlistItemID, playlistItems }) {\n const playlistItem = playlistItems.find((playlistItem) => playlistItem.id === playlistItemID);\n if (_.get(playlistItem, 'fields.proto')) {\n return ;\n } else if (_.get(playlistItem, 'fields.project')) {\n return ;\n } else {\n return null;\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n playlistItems: state.airtableReducer.playlistItems,\n };\n};\n\nexport default connect(mapStateToProps, null)(PlaylistItem);\n","import React, { useState, useEffect } from 'react'\nimport { Progress } from 'antd'\n\nimport warningSignIcon from 'shared/icons/warning_sign.svg'\n\nimport classes from './WarningNotice.module.sass'\n\nlet count = 0\n\nconst WarningNotice = () => {\n const [visible, changeVisibility] = useState(true)\n const [closeButtonShown, changeCloseButtonVisibility] = useState(true)\n const [progressValue, changeProgressValue] = useState(0)\n\n //uncomment to have loading bar\n // useEffect(() => {\n // let interval = setInterval(() => {\n // if(count < 100) {\n // count = count+1\n // }\n // changeProgressValue(count)\n // }, 60);\n // return () => {\n // clearInterval(interval)\n // }\n // }, [])\n\n const changeVisibilityAction = (event) => {\n if(event.target === event.currentTarget) {\n changeVisibility(false)\n }\n }\n\n useEffect(() => {\n if(progressValue === 100) {\n // clearInterval(interval)\n changeCloseButtonVisibility(true)\n }\n return () => {\n //nothing for now\n }\n }, [progressValue])\n\n let closeButton = null\n if(closeButtonShown) {\n closeButton = (\n
changeVisibility(false)}>IT'S FINE
\n )\n }\n\n return (\n changeVisibilityAction(e)}\n >\n
\n
\n \"Warning\n
BE CAREFUL
\n
\n
\n Someone is in the protoroom and a demo might be happening. Please confirm that you can play with the tablet without disturbing anything.\n
\n Thanks\n
\n
\n \n {closeButton}\n
\n
\n \n )\n}\n\nexport default WarningNotice\n","import React, { useContext, useEffect } from \"react\";\n\nimport classes from \"./Login.module.sass\";\n\nimport { GoogleAuthContext } from \"../../utils/GoogleAuthProvider\";\n\nimport svg_google from \"shared/icons/google.svg\";\n\n\nfunction Login() {\n const { gapi } = useContext(GoogleAuthContext);\n\n useEffect(() => {\n if (!gapi) return;\n const buttonEl = document.getElementById(\"login-button\");\n gapi.auth2.getAuthInstance().attachClickHandler(buttonEl, {});\n }, [gapi]);\n\n return (\n
\n
\n
You must be connected to access the Protocontrol
\n
\n \n Google Sign-In\n
\n
\n
\n );\n}\n\nexport default Login;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport { Router } from \"@reach/router\";\nimport { connect, useDispatch } from \"react-redux\";\nimport { useLocation } from \"@reach/router\";\n\nimport * as actions from \"./store/actions/index\";\n\nimport classes from \"./App.module.sass\";\n\nimport Layout from \"./hoc/Layout/Layout\";\nimport Demo from \"./containers/Demo/Demo\";\nimport Demos from \"./containers/Demos/Demos\";\nimport Playlist from \"./containers/Playlist/Playlist\";\nimport Playlists from \"./containers/Playlists/Playlists\";\nimport Proto from \"./containers/Proto/Proto\";\nimport Protos from \"./containers/Protos/Protos\";\nimport Project from \"./containers/Project/Project\";\nimport Projects from \"./containers/Projects/Projects\";\nimport Medias from \"./containers/Medias/Medias\";\nimport PlaylistItem from \"./containers/PlaylistItem/PlaylistItem\";\nimport WarningNotice from \"./components/WarningNotice/WarningNotice\";\nimport Login from \"./hoc/Layout/Login\";\nimport { GoogleAuthContext } from \"./utils/GoogleAuthProvider\";\n\nfunction ScrollToTop({ children }) {\n const location = useLocation();\n\n useEffect(() => {\n if (!location.pathname) return;\n window.scrollTo(0, 0);\n }, [location?.pathname]);\n\n return children;\n}\n\nconst App = ({ initApp, currentDemo, currentProto }) => {\n const dispatch = useDispatch();\n const { loading: authLoading, error, isSignedIn, gapi } = useContext(GoogleAuthContext);\n\n useEffect(() => {\n dispatch(initApp);\n }, []);\n\n if (process.env.REACT_APP_GOOGLE_AUTH_CLIENT_ID && error) return \"Google Auth Error\";\n\n const hasDemos = process.env.REACT_APP_OFFICE_LOCATION === \"Montreal\";\n\n let Homepage = () => (\n
\n {hasDemos && }\n \n \n
\n );\n\n /**\n *\n * Reach router is really simple to use.\n *\n * Just specify all the possible paths for your app below.\n * All the pages in my react app are called containers and\n * are surrounded by the layout (higher order compenent hoc)\n *\n * The page params are automatically added to the props of the container ! (ex: Demos container will have demoID props)\n *\n */\n let page = (\n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n );\n\n let warningNotice = null;\n //Warning sign only appear if current demo/proto at login\n if (1 == 1) {\n warningNotice = ;\n }\n\n if (authLoading) {\n return (\n
\n
\n Loading...\n
\n
\n );\n }\n\n if (process.env.REACT_APP_GOOGLE_AUTH_CLIENT_ID) {\n if (!isSignedIn) {\n return ;\n }\n }\n\n return (\n <>\n {warningNotice}\n \n
\n
{page}
\n
\n
\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n currentProto: state.mqttReducer.currentProto,\n currentDemo: state.mqttReducer.currentDemo,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n initApp: () => {\n dispatch(actions.initMQTTClient());\n dispatch(actions.sendMQTTRefreshCache());\n dispatch(actions.fetchDemos());\n dispatch(actions.fetchSessions());\n dispatch(actions.fetchProtos());\n dispatch(actions.fetchPlaylists());\n dispatch(actions.fetchPlaylistItems());\n dispatch(actions.fetchMedias());\n dispatch(actions.fetchVisitors());\n dispatch(actions.fetchDemonstrators());\n dispatch(actions.fetchResponsibles());\n dispatch(actions.fetchFeedbacks());\n dispatch(actions.fetchTechnologies());\n dispatch(actions.fetchTags());\n dispatch(actions.fetchProjects());\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"antd/dist/antd.css\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport { Provider } from \"react-redux\";\n\nimport GoogleAuthProvider from \"./utils/GoogleAuthProvider\";\n\n/**\n * IMPORTANT NOTES\n *\n * ----------------------------\n * NEED TO BE ITS OWN COMPONENT\n * ----------------------------\n * Searchbar\n * Media block\n *\n */\n\n/**\n * Redux store is initialized in its own file\n * This way you can also use it outside of React components if you want.\n */\nimport store from \"./store-redux\";\n\nconst GoogleAuthProviderIfEnabled = ({ children }) => {\n if (process.env.REACT_APP_GOOGLE_AUTH_CLIENT_ID) {\n return {children};\n }\n\n return children;\n};\n\nconst app = (\n \n \n \n \n \n);\n\nReactDOM.render(app, document.getElementById(\"root\"));\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FullWidth\":\"Proto_FullWidth__ma37X\",\"ModalTechnology\":\"Proto_ModalTechnology__29UHP\",\"ModalContentTitle\":\"Proto_ModalContentTitle__2b02I\",\"ButtonPlayTechnology\":\"Proto_ButtonPlayTechnology__cjLGc\",\"ProtoContainer\":\"Proto_ProtoContainer__1lVOS\",\"LeftContent\":\"Proto_LeftContent__3mvRQ\",\"ContentHeader\":\"Proto_ContentHeader__yxlZT\",\"PreviewImageContainer\":\"Proto_PreviewImageContainer__q1ikU\",\"PreviewImage\":\"Proto_PreviewImage__Ataut\",\"StopButton\":\"Proto_StopButton__3vcaY\",\"PlayButton\":\"Proto_PlayButton__1l7Ij\",\"HeaderInfos\":\"Proto_HeaderInfos__3WC04\",\"Title\":\"Proto_Title__2iZOf\",\"Tags\":\"Proto_Tags__34cHA\",\"CreatedContainer\":\"Proto_CreatedContainer__1NqW4\",\"CreatedInfo\":\"Proto_CreatedInfo__mqZst\",\"CreatedInfoText\":\"Proto_CreatedInfoText__nJRHg\",\"Content\":\"Proto_Content__3l8s-\",\"Tabs\":\"Proto_Tabs__1-9l5\",\"Tab\":\"Proto_Tab__1pk2Y\",\"Active\":\"Proto_Active__1jjwU\",\"Infos\":\"Proto_Infos__2DUaZ\",\"PresetsContainerWrapper\":\"Proto_PresetsContainerWrapper__1YCms\",\"PresetsContainer\":\"Proto_PresetsContainer__1LKA7\",\"ContainerTitle\":\"Proto_ContainerTitle__GRzaC\",\"NotLoadedMessageBlock\":\"Proto_NotLoadedMessageBlock__2u-Xa\",\"WarningIcon\":\"Proto_WarningIcon__IkzsB\",\"NotLoadedMessage\":\"Proto_NotLoadedMessage__2sgk6\",\"Presets\":\"Proto_Presets__PnUrx\",\"Preset\":\"Proto_Preset__1BqJ2\",\"Image\":\"Proto_Image__2OSzC\",\"PresetInfos\":\"Proto_PresetInfos__2gRuc\",\"Number\":\"Proto_Number__DaonF\",\"Row2\":\"Proto_Row2__Mpc06\",\"NotesContainer\":\"Proto_NotesContainer__etH9K\",\"Notes\":\"Proto_Notes__UzyCL\",\"TechnologiesAndSoftwares\":\"Proto_TechnologiesAndSoftwares__3P0-I\",\"TechnologiesContainer\":\"Proto_TechnologiesContainer__1syNk\",\"Technologies\":\"Proto_Technologies__36KYe\",\"Technology\":\"Proto_Technology__3oF8K\",\"IconTechnology\":\"Proto_IconTechnology__2mYBz\",\"IconEnterBlock\":\"Proto_IconEnterBlock__2i57Q\",\"Row3\":\"Proto_Row3__VUvt4\",\"Statistics\":\"Proto_Statistics__25ZT6\",\"Gallery\":\"Proto_Gallery__2_wlv\",\"PhotosContainer\":\"Proto_PhotosContainer__340MB\",\"VideosContainer\":\"Proto_VideosContainer__3qpBb\",\"StatsContainer\":\"Proto_StatsContainer__JMGwN\",\"Photos\":\"Proto_Photos__3Olms\",\"Videos\":\"Proto_Videos__2XHkQ\",\"Stats\":\"Proto_Stats__2T4T0\",\"RelatedProtos\":\"Proto_RelatedProtos__X-6sK\",\"Proto\":\"Proto_Proto__1oMYu\",\"ImageContainer\":\"Proto_ImageContainer__3l1Hc\",\"StatusNotCurated\":\"Proto_StatusNotCurated__qYlvP\",\"DescriptionContainer\":\"Proto_DescriptionContainer__1w__o\",\"Logo\":\"Proto_Logo__3Xn-N\",\"RightContent\":\"Proto_RightContent__1Ezj-\",\"open-media-info\":\"Proto_open-media-info__16_Cv\",\"close-media-info\":\"Proto_close-media-info__3lbhB\",\"open-media-info-title\":\"Proto_open-media-info-title__2r_oX\",\"close-media-info-title\":\"Proto_close-media-info-title__34dHZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PageTitle\":\"Protos_PageTitle__1tpgB\",\"SearchActions\":\"Protos_SearchActions__3hiK1\",\"Searchbar\":\"Protos_Searchbar__2fhU-\",\"Protos\":\"Protos_Protos__xTubF\",\"ToggleCuratedButton\":\"Protos_ToggleCuratedButton__3UGE0\",\"ToggleCuratedIcon\":\"Protos_ToggleCuratedIcon__3NaJo\",\"PageHeaderBar\":\"Protos_PageHeaderBar__2pdmY\",\"Filters\":\"Protos_Filters__17FGp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PageTitle\":\"Projects_PageTitle__1wWbq\",\"DropdownMenu\":\"Projects_DropdownMenu__28gg-\",\"DropdownMenuItem\":\"Projects_DropdownMenuItem__5jCXI\",\"SearchActions\":\"Projects_SearchActions__IyWiy\",\"Dropdown\":\"Projects_Dropdown__2Bvxd\",\"Searchbar\":\"Projects_Searchbar__2m62W\",\"Projects\":\"Projects_Projects__2LMYx\",\"ToggleCuratedButton\":\"Projects_ToggleCuratedButton__2ZqTW\",\"ToggleCuratedIcon\":\"Projects_ToggleCuratedIcon__1D2MM\",\"PageHeaderBar\":\"Projects_PageHeaderBar__2dqR-\",\"Filters\":\"Projects_Filters__3YYRN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DemoContainer\":\"Demo_DemoContainer___ceG-\",\"LeftContent\":\"Demo_LeftContent__1tsuU\",\"ContentHeader\":\"Demo_ContentHeader__2Q9pR\",\"StopButton\":\"Demo_StopButton__3ZSNb\",\"PlayButton\":\"Demo_PlayButton__14Ywd\",\"Title\":\"Demo_Title__3C1aB\",\"CreatedContainer\":\"Demo_CreatedContainer__3ocpc\",\"CreatedImage\":\"Demo_CreatedImage__1M6UN\",\"CreatedInfo\":\"Demo_CreatedInfo__3sSib\",\"ContentInfo\":\"Demo_ContentInfo__wMGUQ\",\"VisitInfos\":\"Demo_VisitInfos__2WzHo\",\"DateAndLanguage\":\"Demo_DateAndLanguage__1RM5H\",\"VisitGoals\":\"Demo_VisitGoals__3_2qa\",\"VisitGoalsTitle\":\"Demo_VisitGoalsTitle__3QWDG\",\"DemoInfos\":\"Demo_DemoInfos__UHlCL\",\"DemoPresentatorContainer\":\"Demo_DemoPresentatorContainer__4yPV_\",\"DemoPresentatorTitle\":\"Demo_DemoPresentatorTitle__1uWla\",\"DemoPresentator\":\"Demo_DemoPresentator__ybscA\",\"DemoPresentatorPicture\":\"Demo_DemoPresentatorPicture__bF3au\",\"DemoBriefContainer\":\"Demo_DemoBriefContainer__3nkbH\",\"DemoBriefTitle\":\"Demo_DemoBriefTitle__1ENF_\",\"VisitorsTitle\":\"Demo_VisitorsTitle__2Vnxa\",\"Visitors\":\"Demo_Visitors__33lSf\",\"AddVisitorContainer\":\"Demo_AddVisitorContainer__a7R08\",\"ButtonAddVisitor\":\"Demo_ButtonAddVisitor__GtCio\",\"Visitor\":\"Demo_Visitor__2c2OW\",\"StatusConnected\":\"Demo_StatusConnected__39vCu\",\"StatusInvited\":\"Demo_StatusInvited__1-dwa\",\"StatusCheckedIn\":\"Demo_StatusCheckedIn__3Ehmk\",\"StatusContainer\":\"Demo_StatusContainer__1SMhs\",\"Status\":\"Demo_Status__3WeVq\",\"StatusColorCircle\":\"Demo_StatusColorCircle__B9d14\",\"Picture\":\"Demo_Picture__2DIPT\",\"Name\":\"Demo_Name__2X5mg\",\"Company\":\"Demo_Company__2SeaZ\",\"Occupation\":\"Demo_Occupation__1a1q1\",\"RightContent\":\"Demo_RightContent__9Zmg6\",\"PictureTakeaway\":\"Demo_PictureTakeaway__3qdjB\"};","module.exports = __webpack_public_path__ + \"static/media/breadcrumb_separator.2a9ae5ca.svg\";","module.exports = __webpack_public_path__ + \"static/media/media_gradient_circle.8c45699a.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"SideDrawer\":\"SideDrawer_SideDrawer__7DUH_\",\"DrawerHeader\":\"SideDrawer_DrawerHeader__3OWRw\",\"CloseButton\":\"SideDrawer_CloseButton__3tDnM\",\"Open\":\"SideDrawer_Open__3Fq8-\",\"Close\":\"SideDrawer_Close__VU7rb\",\"Logo\":\"SideDrawer_Logo__2QYr6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"WarningNoticeContainer\":\"WarningNotice_WarningNoticeContainer__hBa1A\",\"WarningNotice\":\"WarningNotice_WarningNotice__2Awos\",\"WarningNoticeHeader\":\"WarningNotice_WarningNoticeHeader__1CbDy\",\"WarningNoticeMessage\":\"WarningNotice_WarningNoticeMessage__vbuB-\",\"WarningNoticeAction\":\"WarningNotice_WarningNoticeAction__m-pa7\",\"WarningNoticeButton\":\"WarningNotice_WarningNoticeButton__3qgFv\",\"Loading\":\"WarningNotice_Loading__1h-tE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Actions\":\"Project_Actions__1WbNW\",\"ActionsScrub\":\"Project_ActionsScrub__3_lqO\",\"BackwardButton\":\"Project_BackwardButton__Mo4hu\",\"BorderCircle\":\"Project_BorderCircle__27Dzg\",\"ForwardButton\":\"Project_ForwardButton__2TmSU\",\"FullWidth\":\"Project_FullWidth__1OmSc\",\"ModalTechnology\":\"Project_ModalTechnology__BWYA5\",\"ModalContentTitle\":\"Project_ModalContentTitle__32i0L\",\"ButtonPlayTechnology\":\"Project_ButtonPlayTechnology__2un9m\",\"ProjectContainer\":\"Project_ProjectContainer__OkM70\",\"LeftContent\":\"Project_LeftContent__RLPH6\",\"ContentHeader\":\"Project_ContentHeader__2V0au\",\"PreviewImageContainer\":\"Project_PreviewImageContainer__1KteM\",\"PreviewImage\":\"Project_PreviewImage__2zrwq\",\"StopButton\":\"Project_StopButton__3IlGg\",\"PlayButton\":\"Project_PlayButton__3KKt6\",\"HeaderInfos\":\"Project_HeaderInfos__1N5CW\",\"Title\":\"Project_Title__1XRmb\",\"Tags\":\"Project_Tags__1foCq\",\"CreatedContainer\":\"Project_CreatedContainer__3QE0_\",\"CreatedInfo\":\"Project_CreatedInfo__2vTw1\",\"CreatedInfoText\":\"Project_CreatedInfoText__2f_Wk\",\"Content\":\"Project_Content__26CL0\",\"Tabs\":\"Project_Tabs__2thVq\",\"Tab\":\"Project_Tab__vzv7X\",\"Active\":\"Project_Active__1iQ1Z\",\"Infos\":\"Project_Infos__3d6Zb\",\"PresetsContainerWrapper\":\"Project_PresetsContainerWrapper__3ChBv\",\"PresetsContainer\":\"Project_PresetsContainer__2oEbA\",\"ContainerTitle\":\"Project_ContainerTitle__1LNwR\",\"NotLoadedMessageBlock\":\"Project_NotLoadedMessageBlock__1p8Rb\",\"WarningIcon\":\"Project_WarningIcon__16alA\",\"NotLoadedMessage\":\"Project_NotLoadedMessage__3BxNU\",\"Presets\":\"Project_Presets__22MOv\",\"Preset\":\"Project_Preset__dCXG7\",\"Image\":\"Project_Image__35R-7\",\"PresetInfos\":\"Project_PresetInfos__3k7yk\",\"Number\":\"Project_Number__11inP\",\"Row2\":\"Project_Row2__tz-pL\",\"NotesContainer\":\"Project_NotesContainer__3Z66y\",\"Notes\":\"Project_Notes__3KKU9\",\"TechnologiesAndSoftwares\":\"Project_TechnologiesAndSoftwares__24k3k\",\"TechnologiesContainer\":\"Project_TechnologiesContainer__3egWn\",\"Technologies\":\"Project_Technologies__29VPO\",\"Technology\":\"Project_Technology__1Xq36\",\"IconTechnology\":\"Project_IconTechnology__36lV2\",\"IconEnterBlock\":\"Project_IconEnterBlock__7NJA_\",\"Row3\":\"Project_Row3__1djdM\",\"RelatedProjects\":\"Project_RelatedProjects__1uTXs\",\"Project\":\"Project_Project__2Kcbg\",\"ImageContainer\":\"Project_ImageContainer__1jrJn\",\"StatusNotCurated\":\"Project_StatusNotCurated__2Elf-\",\"DescriptionContainer\":\"Project_DescriptionContainer__2x5Ge\",\"Logo\":\"Project_Logo__qpzQx\",\"RightContent\":\"Project_RightContent__3nYW3\",\"open-media-info\":\"Project_open-media-info__20hxg\",\"close-media-info\":\"Project_close-media-info__4OKlN\",\"open-media-info-title\":\"Project_open-media-info-title__1QYVE\",\"close-media-info-title\":\"Project_close-media-info-title__qIC8S\"};","module.exports = __webpack_public_path__ + \"static/media/stop_button.65416413.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Homepage\":\"App_Homepage__3D9X1\",\"Container\":\"App_Container__1i96T\",\"Content\":\"App_Content__3-TmU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PlaylistHeader\":\"SidebarPlaylist_PlaylistHeader__2-uYz\",\"PlaylistHeaderTitle\":\"SidebarPlaylist_PlaylistHeaderTitle__1HrQO\",\"PlaylistName\":\"SidebarPlaylist_PlaylistName__TN8N0\",\"ButtonStopDemo\":\"SidebarPlaylist_ButtonStopDemo__clCok\",\"ProtosAndTransitions\":\"SidebarPlaylist_ProtosAndTransitions__17OXI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"SoftwareContainer\":\"Software_SoftwareContainer__10_wO\",\"ContainerTitle\":\"Software_ContainerTitle__3OJXY\",\"Software\":\"Software_Software__1hO7b\",\"SoftwareLogo\":\"Software_SoftwareLogo__2dmTb\",\"SoftwareName\":\"Software_SoftwareName__2Jk_2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Login\":\"Login_Login__2TfJr\",\"Icon\":\"Login_Icon__VzilU\",\"Button\":\"Login_Button__1EPLq\",\"Description\":\"Login_Description__2yXny\",\"Content\":\"Login_Content__Cd4s8\"};"],"sourceRoot":""}