{"version":3,"sources":["images/howtofy_logo_black_RGB.png","images/hemsida_intro.mp4","images/play_white.svg","components/Layout.js","PrivateRoute.js","components/Home.js","components/AdminStuff/Navbar.js","components/AdminStuff/InstanceList.js","components/Utils/Utils.js","components/AdminStuff/InstanceEditForm.js","components/AdminStuff/ClientList.js","components/AdminStuff/QRSticker.js","components/AdminStuff/ClientDetails.js","components/AdminStuff/Tabs.js","components/AdminStuff/ImageUpload.js","components/AdminStuff/PropertiesEditor.js","components/AdminStuff/ClientEditForm.js","components/AdminStuff/ClientGroupList.js","components/AdminStuff/ClientGroupEditForm.js","components/AdminStuff/ClipList.js","components/AdminStuff/ClipDetails.js","components/AdminStuff/Modal.js","components/AdminStuff/ProductEditForm.js","components/Toggle.js","components/AdminStuff/ClipEditForm.js","components/AdminStuff/ProductList.js","components/AdminStuff/ProductDetails.js","components/AdminStuff/PlaylistList.js","components/AdminStuff/PlaylistDetails.js","components/AdminStuff/PlaylistEditForm.js","components/Utils/PlayerUtils.js","components/AdminStuff/SysAdmin.js","components/PublicStuff/Drawer.js","components/PublicStuff/Item.js","components/PublicStuff/Search.js","components/PublicStuff/PoweredByBar.js","components/PublicStuff/ContactDetails.js","components/PublicStuff/PageHeader.js","components/PublicStuff/HeroVideoPlayer.js","components/PublicStuff/CookieConsentBar.js","components/PublicStuff/ItemList.js","components/PublicStuff/Playlists.js","components/PublicStuff/ChannelPage.js","components/PublicStuff/Segment.js","components/PublicStuff/SegmentList.js","components/PublicStuff/Product.js","components/PublicStuff/ProductList.js","components/PublicStuff/ClipPlayer.js","components/PublicStuff/PlaylistPage.js","components/PublicStuff/PlayerPage.js","components/PublicStuff/ProductPage.js","AppInsights.js","App.js","index.js","images/howtofy_logo_white_RGB.svg"],"names":["module","exports","Layout","props","isHomepage","window","location","pathname","className","this","children","Component","PrivateRoute","component","rest","auth","undefined","document","cookie","split","find","x","startsWith","render","href","logo","require","video","Home","autoPlay","muted","src","type","alt","icon","displayName","name","aria-label","role","onClick","onItemSelected","size","pages","map","item","index","key","viewBox","preserveAspectRatio","fill","xmlns","aria-hidden","d","length","items","ev","onCreateClicked","stopPropagation","sort","a","b","localeCompare","sensitivity","instance","id","onSelected","selected","comments","onEditClicked","spin","utils","WorkerStatus","Idle","Working","Complete","Cancelled","Failed","getBaseUrl","instanceId","getInstancesUrl","clientId","getClientsUrl","getInstanceUrl","getClientUrl","clientGroupId","getClientGroupsUrl","clipId","getClipsUrl","getClipUrl","playlistId","getPlaylistsUrl","productId","getProductsUrl","getClientGroupUrl","fetch","getClientDataUrl","getNewClientTemplateUrl","getPlaylistUrl","getEncodeClipUrl","getUploadClientHeroVideoUrl","getUploadClipUrl","getClientGroupClipsUrl","getClientGroupPlaylistsUrl","getClientGroupProductsUrl","method","data","request","headers","body","JSON","stringify","classes","filter","Boolean","join","clientData","playlists","playlist","processPlaylist","client","clips","products","product","processProduct","clip","processClip","__playlists","__clips","__products","clientClips","clipIds","__client","productIds","indexOf","clientPlaylists","clientProducts","obj","res","prop","skip","Array","isArray","React","useState","updateState","forceUpdate","useCallback","editingItem","setEditingItem","isBusy","setIsBusy","saveInstance","saveAndExit","trim","url","Utils","createRequest","then","response","json","onSaved","alert","useEffect","_","cloneDeep","console","log","Intl","getCanonicalLocales","view","htmlFor","value","onChange","e","field","fields","lastField","take","updateEditingItem","target","confirm","onDeleted","onDone","disabled","QRCode","qrStickerElement","useRef","s","Snap","current","clear","load","backdrop","sticker_backdrop","append","qrSvg","content","xmlDeclaration","container","padding","width","qrsize","height","color","background","ecl","svg","qrFragment","fragment","qrGroup","g","transform","overlay","sticker_overlay","ref","version","svgEl","setAttribute","markup","outerHTML","b64","btoa","aEl","createElement","filename","appendChild","click","saveSvgFile","stickers","setStickers","getServerUrl","protocol","host","getCustomDomainWithProtocol","customDomain","getQrValue","qrLink","getQrLinkFullUrl","getItemUrl","itemUrl","customUrl","getRelativeUrl","properties","qr_sticker_backdrops","backdrops","overlays","qr_sticker_overlays","colors","qr_sticker_colors","widths","qr_sticker_widths","heights","qr_sticker_heights","sizes","qr_sticker_sizes","transforms","qr_sticker_transforms","stickerArray","i","push","sticker","QRSticker","encodingStatus","streamUrls","links","section","onSectionSelected","tabs","activeTab","onSetActiveTab","tab","classNames","aria-current","image","onSetImage","onSetImageFileRemoved","onDrop","files","onSetImageFile","getRootProps","getInputProps","accept","keyvalues","setKeyvalues","newKey","setNewKey","newValue","setNewValue","onUpdated","scope","colSpan","Object","keys","defaultValue","onBlur","copy","val","setKeyName","setKeyValue","addNewKeyValue","videoRef","createRef","tabGeneral","tabDesign","tabContact","tabSocialMedia","tabLegal","socMediaTypes","logoFile","setLogoFile","setLogo","logoFileRemoved","setLogoFileRemoved","setActiveTab","heroVideoFile","setHeroVideoFile","setHeroVideoFileRemoved","hasExistingHeroVideo","setHasExistingHeroVideo","heroVideoSource","setHeroVideoSource","socMediaChannels","setSocMediaChannels","newSocMediaChannelType","setNewSocMediaChannelType","newSocMediaChannelName","setNewSocMediaChannelName","newSocMediaChannelUrl","setNewSocMediaChannelUrl","loadAsDataUrl","r","blob","Promise","resolve","reader","FileReader","onload","result","readAsDataURL","dataUrl","saveClient","isCreating","model","sanitizeObject","FormData","existTest","setSocMediaChannelDetails","channel","idx","smc","channelsCopy","splice","existingLogoUrl","loadExistingLogo","existingHeroVideoUrl","loadNewClientTemplate","addEventListener","URL","createObjectURL","getClientHeroVideoUploadUrl","uploadedVideoFilename","onUploadVideo","replace","Tabs","onSubmit","preventDefault","maxLength","culture","PropertiesEditor","ImageUpload","img","file","controls","crossOrigin","channelPageHeadline","channelPageSubhead","textColor","secondaryTextColor","backgroundColor","bannerBackgroundColor","rows","contact","address","email","phone","deleteSocMediaChannel","placeholder","addNewSocMediaChannel","legal","termsAndConditions","cookieTerms","privacyTerms","clientGroup","itemIds","clients","availableClients","setAvailableClients","selectedClients","setSelectedClients","group","DraggableAreasGroup","ClientGroupsDraggableAreaFrom","addArea","ClientGroupsDraggableAreaTo","saveClientGroup","clientIds","toLowerCase","isList","tags","tag","existingCustomLandscapeThumbUrl","existingVideoThumbUrl","isPublished","getFullUrl","getQrLinkUrl","encodeClip","catch","err","open","setOpen","isOpen","Root","show","as","Fragment","onClose","onClosed","Child","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Overlay","ClipsDraggableAreaFrom","ClipsDraggableAreaTo","tabClips","tabEcommerce","tabTranslations","imageFile","setImageFile","setImage","imageFileRemoved","setImageFileRemoved","initialClips","setInitialClips","setClientClips","availableClips","setAvailableClips","selectedClips","setSelectedClips","setTabs","clientGroupProducts","setClientGroupProducts","selectedClientGroupClient","setSelectedClientGroupClient","translatedClientProducts","setTranslatedClientProducts","saveProduct","clipDTOs","productGroups","itemId","toggleTranslatedClientProduct","clone","findIndex","clientClone","isClientGroupProductSelected","pl","existingImageUrl","loadExistingImage","hideClips","loadClientGroupProducts","productGroupId","translated","productClone","status","selClip","description","shopUrl","moreInfoUrl","articleNumber","getProductUrl","isOn","setIsOn","aria-pressed","productsGroup","playlistsGroup","minutes","from","seconds","String","padStart","tabVideo","tabPublish","tabProducts","tabPlaylists","videoFile","setVideoFile","videoWidth","setVideoWidth","videoHeight","setVideoHeight","videoDuration","setVideoDuration","videoThumb","setVideoThumb","videoThumbTime","setVideoThumbTime","videoThumbFile","setVideoThumbFile","landscapeThumbFile","setLandscapeThumbFile","portraitThumbFile","setPortraitThumbFile","landscapeThumb","setLandscapeThumb","portraitThumb","setPortraitThumb","setPlaylists","availablePlaylists","setAvailablePlaylists","selectedPlaylists","setSelectedPlaylists","selectedPlaylist","setSelectedPlaylist","selectedPlaylistClips","setSelectedPlaylistClips","newPlaylistName","setNewPlaylistName","availableProducts","setAvailableProducts","selectedProducts","setSelectedProducts","segments","setSegments","newSegmentName","setNewSegmentName","newSegmentMinutes","setNewSegmentMinutes","newSegmentSeconds","setNewSegmentSeconds","videoFileRemoved","setVideoFileRemoved","videoThumbFileRemoved","setVideoThumbFileRemoved","landscapeThumbFileRemoved","setLandscapeThumbFileRemoved","portraitThumbFileRemoved","setPortraitThumbFileRemoved","hasExistingVideo","setHasExistingVideo","useTabs","clientGroupClips","setClientGroupClips","translatedClientClips","setTranslatedClientClips","addProductModalOpen","setAddProductModalOpen","videoSource","setVideoSource","newProductEditingItem","useReducer","state","event","videoElement","duration","currentTime","handleLoadedData","canvas","getContext","drawImage","toDataURL","arr","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","File","dataUrlToFile","handleTimeupdate","saveClip","playlistDTOs","productDTOs","clipGroups","addNewSegment","seg","title","startTime","parseInt","setSegmentDetails","segment","ttl","min","Math","trunc","sec","segmentsCopy","addNewPlaylist","onPlaylistCreated","toggleTagSelected","availProds","selProds","availIdx","togglePlaylistSelected","availPlLists","selPlLists","toggleTranslatedClientClip","isClientGroupClipSelected","clp","loadClientGroupClips","clipGroupId","clipClone","existingCustomPortraitThumbUrl","order","y","existingVideoUrl","videoThumbnailTime","loadThumbs","uploadedClipBlocks","getClipUploadUrl","clipPlaylistIds","selPLs","listCopy","found","clipIndex","cliplistCopy","plIndex","onLoadedData","onTimeUpdate","deleteSegment","onKeyPress","checked","titleOnThumbnailHidden","Toggle","datePublishedFrom","datePublishedTo","Modal","ProductEditForm","prods","newProductAdded","deleteProduct","setPlaylistsOrder","playlistIds","getSetPlaylistsOrderUrl","onOrderChanged","savePlaylistsOrder","clientGroupPlaylists","setClientGroupPlaylists","translatedClientPlaylists","setTranslatedClientPlaylists","savePlaylist","playlistGroups","toggleTranslatedClientPlaylist","isClientGroupPlaylistSelected","loadClientGroupPlaylists","playlistGroupId","playlistClone","playerutils","channelUrl","getChannelsUrl","getChannelUrl","playlistUrl","clipUrl","channelPid","getPublicDataBaseUrl","playlistPid","getPublicDataChannelUrl","query","getSearchUrl","source","style","innerHTML","channels","getSocMediaTypes","clientUrl","sections","round","toString","clipPids","pid","playlistPids","productPids","dashboardSection","instancesSection","clientsSection","clientGroupsSection","clientDetailsSection","clipsSection","playlistsSection","playlistDetailsSection","productsSection","productDetailsSection","clipDetailsSection","navigation","sidebarOpen","setSidebarOpen","setView","activeSection","setActiveSection","pageStack","setPageStack","instances","setInstances","setClients","clientGroups","setClientGroups","setProducts","setClips","setClipDetails","selectedInstance","setSelectedInstance","selectedClientData","setSelectedClientData","selectedClientId","setSelectedClientId","selectedClient","setSelectedClient","setSelectedClientGroupId","selectedClientGroup","setSelectedClientGroup","selectedProduct","setSelectedProduct","setSelectedClipId","selectedClip","setSelectedClip","initialLoadIds","setInitialLoadIds","username","setUsername","errorModalText","setErrorModalText","currentUploads","setCurrentUploads","params","history","useHistory","message","uploadObject","progress","readBytes","uploadUrlObject","blockIds","blockIdsHash","getFinalizeClipUploadUrl","getFinalizeClientHeroVideoUploadUrl","handleWorkerMessage","uploadVideo","worker","postMessage","cancel","uploaderWorker","Worker","onmessage","loadInstances","loadClients","groups","loadClips","isSectionAvailable","selectInstance","selectClient","editClient","editPlaylist","playlistSaved","playlistUpdated","resetViewToBrowse","processed","processClientDataReferences","editProduct","productUpdated","selectClip","editClip","clipUpdated","getActiveUploads","hasActiveUploads","unescape","ids","ClipId","stack","getElementsByTagName","scrollTo","loadClientData","elem","getElementById","parentNode","removeChild","PlayerUtils","getStyleElement","objectType","onNavbarItemSelected","active","sumBy","getTotalUploadProgress","InstanceList","editInstance","ClientList","ClientGroupList","selectClientGroup","editClientGroup","ClientDetails","PlaylistList","selectPlaylist","PlaylistDetails","ProductList","selectProduct","ProductDetails","ClipList","uuidv4","ClipDetails","InstanceEditForm","deleteInstance","ClientEditForm","clientSaved","clientDeleted","ClientGroupEditForm","clientsClone","clientGroupSaved","clientGroupDeleted","PlaylistEditForm","productSaved","ClipEditForm","clipSaved","side","Title","aspect","thumbUrl","formatDuration","showPlayIcon","searchTerms","setSearchTerms","filteredResults","setFilteredResults","selectedCategory","setSelectedCategory","terms","autoFocus","customChannelUrl","Item","portraitThumbUrl","thumbnailUrl","Date","getFullYear","ensureStartsWith","str","contactInfo","socialMediaChannels","legalTerms","PoweredByBar","searchVisible","currentSearchResultsSection","setCurrentSearchResultsSection","searchResults","setSearchResults","isSearching","setIsSearching","leftDrawerVisible","setLeftDrawerVisible","rightDrawerVisible","setRightDrawerVisible","lastScrollTop","setLastScrollTop","headerTop","setHeaderTop","headerRef","scrollTop","scrollY","documentElement","scrollDelta","max","topVal","topStyle","top","getThumbUrl","getUrl","playerUrl","shop","logoUrl","search","results","Drawer","ContactDetails","Search","videoUrl","faded","playsInline","loop","poster","posterUrl","buttonText","cookieName","disableButtonStyles","buttonClasses","expires","direction","hideTitle","selectedItem","linkPrefix","landscapeThumbUrl","Playerutils","ItemList","useAppInsightsContext","setChannel","hideLogo","setHideLogo","hideCookieConsent","setHideCookieConsent","useParams","URLSearchParams","useLocation","windowWidth","setWindowWidth","windowHeight","setWindowHeight","setWindowScrollX","windowScrollY","setWindowScrollY","handleSizeAndScrollUpdate","sizeAndScroll","setSizeAndScroll","useLayoutEffect","updateSizeAndScroll","innerWidth","innerHeight","scrollX","removeEventListener","useWindowSizeAndScroll","getHeight","getIsFaded","install","__gaId","loadPublicDataChannel","processReferences","get","channelId","channelName","qr","qrCode","gtag","codeType","HeroVideoPlayer","heroVideoUrl","left","marginTop","Playlists","CookieConsentBar","playheadWidth","setPlayheadWidth","_playheadPosition","onSegmentSelected","currentSegment","Segment","Product","playbutton","playerRef","videoCoverVisible","setVideoCoverVisible","videoVisible","setVideoVisible","setCurrentSegment","player","setPlayer","canPlay","descClamped","setDescClamped","_endTime","activeSegment","_duration","element","scrollIntoView","behavior","block","inline","handlePlayerTimeUpdate","playVideo","play","videoJsOptions","autoplay","playsinline","responsive","aspectRatio","sources","preload","videojs","on","segmentListElement","productListElement","dispose","hideSegments","hideProducts","segmentsOrProductsVisible","SegmentList","time","setPlaylist","selectedClipPlaylists","setSelectedClipPlaylists","otherPlaylists","setOtherPlaylists","hideHeader","setHideHeader","setHideSegments","setHideProducts","channelRef","cl","selClipPlaylists","cp","playlistName","videoId","videoName","getPlaylistLinkPrefix","func","clipPid","substring","lastIndexOf","setTimeout","PageHeader","ClipPlayer","setSelectedClipAndNavigate","setClip","setProduct","productUrl","pr","productName","browserHistory","createBrowserHistory","basename","reactPlugin","ReactPlugin","ApplicationInsights","config","connectionString","__appInsightsConnection","extensions","extensionConfig","identifier","enableAutoRouteTracking","loadAppInsights","library","add","fab","far","fas","withAITracking","setCustomChannelUrl","__customChannelUrl","__title","constructProps","myProps","AppInsightsContext","Provider","__favIconUrl","Helmet","rel","exact","path","ChannelPage","PlaylistPage","PlayerPage","ProductPage","SysAdmin","baseUrl","getAttribute","createRoot"],"mappings":"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","file":"static/js/main.da2e46a3.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/howtofy_logo_black_RGB.eadb2d36.png\";","module.exports = __webpack_public_path__ + \"static/media/hemsida_intro.ce48d414.mp4\";","module.exports = __webpack_public_path__ + \"static/media/play_white.069ed48a.svg\";","import React, { Component } from 'react';\r\n\r\nexport class Layout extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n //static displayName = Layout.name;\r\n\r\n render () {\r\n const isHomepage = window.location.pathname === \"/\";\r\n return (\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\nimport { Route } from 'react-router-dom';\n//import { useRecoilValue } from 'recoil';\n\n//import { authAtom } from '_state';\n\nexport { PrivateRoute };\n\nfunction PrivateRoute({ component: Component, ...rest }) {\n //const auth = useRecoilValue(authAtom);\n const val = document.cookie.split('; ').find(x => x.startsWith('is_logged_in='));\n const auth = val !== undefined;\n\n return (\n {\n if (!auth) {\n // not logged in so redirect to login page with the return url\n //return \n window.location.href = `/login?returnUrl=${props.location.pathname}`;\n return;\n }\n\n // authorized so return component\n return \n }} />\n );\n}","import React, { Component } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nconst logo = require(\"../images/howtofy_logo_black_RGB.png\");\r\nconst video = require(\"../images/hemsida_intro.mp4\");\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n render () {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n +46 (0)70 726 32 79\r\n \r\n \r\n nicklas@howtofy.se\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default (props) => {\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default (props) => {\r\n return (\r\n <>\r\n {props.items && props.items.length > 3 &&\r\n
\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add instance\r\n \r\n\r\n
\r\n }\r\n\r\n
\r\n
    \r\n {props.items && [...props.items].sort((a, b) => a.name.localeCompare(b.name, undefined, {sensitivity: 'base'})).map((instance) => (\r\n
  • \r\n\r\n\r\n
    { props.onSelected(instance); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === instance.id ? \"bg-blue-50\" : \"\"}`}>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {instance.name?.length > 0 ? instance.name : '(Untitled instance)'}

    \r\n {instance.comments && instance.comments !== '' &&\r\n

    {instance.comments}

    \r\n }\r\n
    \r\n {/*
    \r\n
    \r\n

    \r\n {instance.clients.length} Client{instance.clients.length === 1 ? '' : 's'}\r\n

    \r\n
    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n { props.onEditClicked(instance); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
  • \r\n ))}\r\n\r\n {props.items && props.items.length === 0 &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n No instances created yet. Click Add instance to create one. \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n {!props.items &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n \r\n Loading... \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n
\r\n
\r\n
\r\n {props.items &&\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add instance\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n","export class Utils {\n \n getBaseUrl() { return '/api'; }\n getInstancesUrl() { return `${this.getBaseUrl()}/instances`; }\n getInstanceUrl(instanceId) { return `${this.getInstancesUrl()}/${instanceId}`; }\n \n getClientsUrl(instanceId) { return `${this.getInstancesUrl()}/${instanceId}/clients`; }\n getClientUrl(instanceId, clientId) { return `${this.getClientsUrl(instanceId)}/${clientId}`; }\n getClientDataUrl(instanceId, clientId) { return `${this.getInstanceUrl(instanceId)}/admindata/${clientId}`; }\n getNewClientTemplateUrl(instanceId) { return `${this.getClientsUrl(instanceId)}/get-new-client-template`; }\n getEncodeClientHeroVideoUrl(instanceId, clientId) { return `${this.getClientUrl(instanceId, clientId)}/encode`; }\n getUploadClientHeroVideoUrl(instanceId, clientId) { return `${this.getClientUrl(instanceId, clientId)}/get-upload-url`; }\n getFinalizeClientHeroVideoUploadUrl(instanceId, clientId) { return `${this.getClientUrl(instanceId, clientId)}/finalize-upload`; }\n\n getClientGroupsUrl(instanceId) { return `${this.getInstancesUrl()}/${instanceId}/client-groups`; }\n getClientGroupUrl(instanceId, clientGroupId) { return `${this.getClientGroupsUrl(instanceId)}/${clientGroupId}`; }\n\n getClipsUrl(instanceId, clientId) { return `${this.getClientUrl(instanceId, clientId)}/videos`; }\n getClipUrl(instanceId, clientId, clipId) { return `${this.getClipsUrl(instanceId, clientId)}/${clipId}`; }\n getEncodeClipUrl(instanceId, clientId, clipId) { return `${this.getClipUrl(instanceId, clientId, clipId)}/encode`; }\n getUploadClipUrl(instanceId, clientId, clipId) { return `${this.getClipUrl(instanceId, clientId, clipId)}/get-upload-url`; }\n getFinalizeClipUploadUrl(instanceId, clientId, clipId) { return `${this.getClipUrl(instanceId, clientId, clipId)}/finalize-upload`; }\n\n getPlaylistsUrl(instanceId, clientId) { return `${this.getClientUrl(instanceId, clientId)}/playlists`; }\n getPlaylistUrl(instanceId, clientId, playlistId) { return `${this.getPlaylistsUrl(instanceId, clientId)}/${playlistId}`; }\n getSetPlaylistsOrderUrl(instanceId, clientId) { return `${this.getPlaylistsUrl(instanceId, clientId)}/set-order`; }\n \n getProductsUrl(instanceId, clientId) { return `${this.getClientUrl(instanceId, clientId)}/products`; }\n getProductUrl(instanceId, clientId, productId) { return `${this.getProductsUrl(instanceId, clientId)}/${productId}`; }\n \n getClientGroupClipsUrl(instanceId, clientGroupId, clientId) { return `${this.getClientGroupUrl(instanceId, clientGroupId)}/${clientId}/clips`}\n getClientGroupPlaylistsUrl(instanceId, clientGroupId, clientId) { return `${this.getClientGroupUrl(instanceId, clientGroupId)}/${clientId}/playlists`}\n getClientGroupProductsUrl(instanceId, clientGroupId, clientId) { return `${this.getClientGroupUrl(instanceId, clientGroupId)}/${clientId}/products`}\n\n loadInstances() {\n return fetch(this.getInstancesUrl());\n }\n\n loadClients(instanceId) {\n return fetch(this.getClientsUrl(instanceId));\n }\n\n loadClientData(instanceId, clientId) {\n return fetch(this.getClientDataUrl(instanceId, clientId));\n }\n\n loadNewClientTemplate(instanceId) {\n return fetch(this.getNewClientTemplateUrl(instanceId));\n }\n\n loadPlaylists(instanceId, clientId) {\n return fetch(this.getPlaylistsUrl(instanceId, clientId));\n }\n \n loadPlaylist(instanceId, clientId, playlistId) {\n return fetch(this.getPlaylistUrl(instanceId, clientId, playlistId));\n }\n \n loadProducts(instanceId, clientId) {\n return fetch(this.getProductsUrl(instanceId, clientId));\n }\n \n loadClips(instanceId, clientId) {\n return fetch(this.getClipsUrl(instanceId, clientId));\n }\n\n loadClip(instanceId, clientId, clipId) {\n return fetch(this.getClipUrl(instanceId, clientId, clipId));\n }\n\n encodeClip(instanceId, clientId, clipId) {\n return fetch(this.getEncodeClipUrl(instanceId, clientId, clipId));\n }\n\n getClientHeroVideoUploadUrl(instanceId, clientId) {\n return fetch(this.getUploadClientHeroVideoUrl(instanceId, clientId));\n }\n\n getClipUploadUrl(instanceId, clientId, clipId) {\n return fetch(this.getUploadClipUrl(instanceId, clientId, clipId));\n }\n\n loadClientGroupClips(instanceId, clientGroupId, clientId) {\n return fetch(this.getClientGroupClipsUrl(instanceId, clientGroupId, clientId));\n }\n\n loadClientGroupPlaylists(instanceId, clientGroupId, clientId) {\n return fetch(this.getClientGroupPlaylistsUrl(instanceId, clientGroupId, clientId));\n }\n\n loadClientGroupProducts(instanceId, clientGroupId, clientId) {\n return fetch(this.getClientGroupProductsUrl(instanceId, clientGroupId, clientId));\n }\n\n createRequest(method, data) {\n let request = {\n method: method\n }\n if (data) {\n request.headers = {\n 'Content-Type': 'application/json'\n };\n request.body = JSON.stringify(data);\n }\n return request;\n }\n\n\n classNames(...classes) {\n return classes.filter(Boolean).join(' ');\n }\n\n WorkerStatus = {\n Idle: 0,\n Working: 1,\n Complete: 2,\n Cancelled: 3,\n Failed: 4\n } \n\n // updateObj(item, field, value) {\n // let obj = item;\n // if (field.indexOf('.') === -1) {\n // editingItem[field] = value;\n // } else {\n // let fields = field.split('.');\n // let existTest = obj;\n // fields.map(x => {\n // if (existTest[x] === undefined) existTest[x] = {};\n // existTest = existTest[x];\n // });\n // const lastField = fields[fields.length - 1];\n // fields = _.take(fields, fields.length - 1);\n // fields.map(x => obj = obj[x]);\n // obj[lastField] = value;\n // }\n // forceUpdate();\n // }\n\n processClientDataReferences(clientData) {\n clientData.playlists.map(playlist => {\n playlist = this.processPlaylist(playlist, clientData.client, clientData.clips);\n // playlist.__clips = playlist.clipIds.map(id => clientData.clips.find(x => x.id === id));\n // playlist.__client = clientData.client;\n });\n\n clientData.products.map(product => {\n product = this.processProduct(product, clientData.client, clientData.clips);\n // product.__clips = clientData.clips.filter(x => x.productIds.indexOf(product.id) !== -1);\n // product.__client = clientData.client;\n });\n\n clientData.clips.map(clip => {\n clip = this.processClip(clip, clientData.client, clientData.playlists, clientData.products);\n // clip.__playlists = clientData.playlists.filter(x => x.clipIds.indexOf(clip.id) !== -1);\n // clip.__products = clip.productIds.map(id => clientData.products.find(x => x.id === id));\n // clip.__client = clientData.client;\n });\n\n clientData.client.__playlists = clientData.playlists;\n clientData.client.__clips = clientData.clips;\n clientData.client.__products = clientData.products;\n\n return clientData;\n }\n\n processPlaylist(playlist, client, clientClips) {\n playlist.clipIds = playlist.clipIds ?? [];\n playlist.__clips = playlist.clipIds.map(id => clientClips.find(x => x.id === id));\n playlist.__client = client;\n return playlist;\n }\n\n processProduct(product, client, clientClips) {\n product.__clips = clientClips.filter(x => x.productIds.indexOf(product.id) !== -1);\n product.__client = client;\n return product;\n }\n\n processClip(clip, client, clientPlaylists, clientProducts) {\n clip.__playlists = clientPlaylists.filter(x => x.clipIds.indexOf(clip.id) !== -1);\n clip.__products = clip.productIds.map(id => clientProducts.find(x => x.id === id));\n clip.__client = client;\n return clip;\n }\n\n sanitizeObject(obj) {\n let res = {};\n for (const prop in obj) {\n let skip = false;\n if (prop.indexOf('__') === 0) skip = true;\n if (Array.isArray(obj[prop]) && prop !== 'socMediaChannels') skip = true;\n\n if (!skip)\n res[prop] = obj[prop];\n }\n return res;\n }\n\n \n}\n\nconst utils = new Utils();\n\nexport default utils;\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport _ from \"lodash\";\r\n\r\nimport Utils from '../Utils/Utils';\r\n\r\nexport default (props) => {\r\n const [, updateState] = React.useState();\r\n const forceUpdate = useCallback(() => updateState({}), []);\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n useEffect(() => {\r\n if (props?.item) setEditingItem(_.cloneDeep(props.item));\r\n console.log(Intl.getCanonicalLocales());\r\n debugger;\r\n }, [props]);\r\n\r\n\r\n function saveInstance(instance, saveAndExit = false) {\r\n if (instance.name.trim() == '') {\r\n alert(\"Please provide a name for the instance.\");\r\n return;\r\n }\r\n\r\n const url = instance.id ? Utils.getInstanceUrl(instance.id) : Utils.getInstancesUrl();\r\n const request = Utils.createRequest(instance.id ? 'PUT' : 'POST', instance);\r\n setIsBusy(true);\r\n fetch(url, request).then(response => response.json().then(data => {\r\n setIsBusy(false);\r\n props.onSaved(data, saveAndExit);\r\n }));\r\n }\r\n\r\n function deleteInstance(instance) {\r\n if (window.confirm(\"Are you sure?\")) {\r\n fetch(Utils.getInstanceUrl(instance.id), Utils.createRequest('DELETE')).then(() => {\r\n props.onDeleted(instance);\r\n });\r\n }\r\n }\r\n\r\n function resetViewToBrowse() {\r\n props.onDone();\r\n }\r\n\r\n function updateEditingItem(field, value) {\r\n let obj = editingItem;\r\n if (field.indexOf('.') === -1) {\r\n editingItem[field] = value;\r\n } else {\r\n let fields = field.split('.');\r\n const lastField = fields[fields.length - 1];\r\n fields = _.take(fields, fields.length - 1);\r\n fields.map(x => obj = obj[x]);\r\n obj[lastField] = value;\r\n }\r\n forceUpdate();\r\n }\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.view === 'createInstanceView' ? \"Create instance\" : \"Edit instance\"}

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('name', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {props.view === 'editInstanceView' &&\r\n deleteInstance(editingItem)}\r\n className=\"bg-red-600 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Delete\r\n \r\n }\r\n
\r\n resetViewToBrowse()}\r\n className=\"bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none\"\r\n >\r\n Cancel\r\n \r\n !isBusy && saveInstance(editingItem)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save\r\n \r\n !isBusy && saveInstance(editingItem, true)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save and exit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default (props) => {\r\n\r\n return (\r\n <>\r\n {props.items && props.items.length > 3 &&\r\n
\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add client\r\n \r\n
\r\n }\r\n\r\n
\r\n
    \r\n {props.items && [...props.items].sort((a, b) => a.name.localeCompare(b.name, undefined, {sensitivity: 'base'})).map((client) => (\r\n
  • \r\n \r\n\r\n\r\n
    { props.onSelected(client); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === client.id ? \"bg-blue-50\" : \"\"}`}>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {client.name?.length > 0 ? client.name : '(Untitled client)'}

    \r\n {client.comments && client.comments !== '' &&\r\n

    {client.comments}

    \r\n }\r\n
    \r\n {/*
    \r\n
    \r\n

    \r\n {client.clips.length} Clip{client.clips.length === 1 ? '' : 's'}\r\n

    \r\n
    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n { props.onEditClicked(client); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
  • \r\n ))}\r\n\r\n {props.items && props.items.length === 0 &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n No clients created yet. Click Add client to create one. \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n {!props.items &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n \r\n Loading... \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n {props.items &&\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add client\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Snap from \"snapsvg-cjs\";\n\nconst QRCode = require(\"qrcode-svg\");\n\nexport default (props) => {\n //const [serverAddrTemp, setServerAddrTemp] = useState('');\n // const [serverAddr, setServerAddr] = useState(props.serverurl ?? getServerUrl());\n const qrStickerElement = useRef(null);\n\n // function getServerUrl() {\n // return window.location.protocol + '//' + window.location.host;\n // }\n\n // function getQrLinkFullUrl(qrLink) {\n // return `${getServerUrl()}/qr/r/${qrLink}`;\n // }\n\n // function getQrLinkFullUrl(serverUrl, qrLink) {\n // return `${serverUrl}/qr/r/${qrLink}`;\n // }\n\n // useEffect(() => {\n // //setServerAddrTemp(getServerUrl());\n // setServerAddr(getServerUrl());\n // }, []);\n\n useEffect(() => {\n const s = Snap(qrStickerElement.current);\n s.clear();\n\n Snap.load(props.backdrop, function(sticker_backdrop) {\n s.append(sticker_backdrop);\n\n //QR code\n const qrSvg = new QRCode({\n //content: getQrLinkFullUrl(serverAddr, props.value),\n content: props.value,\n join: false,\n xmlDeclaration: false,\n container: 'none',\n padding: 0,\n width: props.qrsize,\n height: props.qrsize,\n color: props.color,\n background: \"transparent\",\n ecl: \"H\",\n }).svg();\n\n const qrFragment = Snap.fragment(qrSvg);\n var qrGroup = s.g();\n qrGroup.append(qrFragment);\n qrGroup.transform(props.transform);\n s.append(qrGroup);\n\n //Play button overlay\n Snap.load(props.overlay, function(sticker_overlay) {\n s.append(sticker_overlay);\n // playbutton.select(\"path\").attr({fill: props.color});\n // var pbGroup = s.g();\n // pbGroup.append(playbutton);\n // pbGroup.transform(\"t315 95\");\n // s.append(pbGroup);\n });\n });\n }, [props.value]);\n\n function saveSvgFile() {\n var svgEl = qrStickerElement.current;\n svgEl.setAttribute('version', '1.1');\n svgEl.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n var markup = svgEl.outerHTML;\n var b64 = btoa(markup);\n var aEl = document.createElement('a');\n aEl.setAttribute('download', props.filename);\n aEl.href = 'data:image/svg+xml;base64,\\n' + b64;\n document.body.appendChild(aEl);\n aEl.click();\n } \n\n return (\n
\n {/* setServerAddrTemp(e.target.value) }\n onBlur={(e) => setServerAddr(e.target.value)}\n />\n */}\n \n\n saveSvgFile()}\n className={`flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\n >\n Save as SVG file\n \n\n
\n )\n}\n","import React, { useState, useEffect } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport QRSticker from \"./QRSticker\";\r\n\r\nimport _ from \"lodash\";\r\nexport default (props) => {\r\n const [stickers, setStickers] = useState([]);\r\n \r\n useEffect(() => {\r\n if (props.item.properties?.qr_sticker_backdrops) {\r\n const backdrops = props.item.properties.qr_sticker_backdrops?.split(',');\r\n const overlays = props.item.properties.qr_sticker_overlays?.split(',');\r\n const colors = props.item.properties.qr_sticker_colors?.split(',');\r\n const widths = props.item.properties.qr_sticker_widths?.split(',');\r\n const heights = props.item.properties.qr_sticker_heights?.split(',');\r\n const sizes = props.item.properties.qr_sticker_sizes?.split(',');\r\n const transforms = props.item.properties.qr_sticker_transforms?.split(',');\r\n let stickerArray = [];\r\n for(let i = 0; i < backdrops.length; i++) {\r\n stickerArray.push({ \r\n backdrop: backdrops[i], \r\n overlay: overlays[i], \r\n color: colors[i],\r\n width: widths[i],\r\n height: heights[i],\r\n size: sizes[i],\r\n transform: transforms[i]\r\n });\r\n }\r\n setStickers(stickerArray);\r\n } else {\r\n setStickers([\r\n { \r\n backdrop: '/qrlogos/generic_qrsticker_bg.svg', \r\n overlay: '/qrlogos/generic_qrsticker_overlay.svg', \r\n color: '#000000',\r\n width: 475,\r\n height: 259,\r\n size: 173,\r\n transform: 't255 43'\r\n }\r\n ]);\r\n }\r\n }, []);\r\n\r\n function getServerUrl() {\r\n return window.location.protocol + '//' + window.location.host;\r\n }\r\n\r\n function getFullUrl(itemUrl) {\r\n return `${getServerUrl()}/${getRelativeUrl(itemUrl)}`;\r\n }\r\n\r\n function getRelativeUrl(itemUrl) {\r\n return `c/${itemUrl}`;\r\n }\r\n\r\n function getQrLinkUrl(qrLink) {\r\n return `qr/r/${qrLink}`;\r\n }\r\n\r\n function getQrLinkFullUrl(qrLink) {\r\n return `${getServerUrl()}/qr/r/${qrLink}`;\r\n }\r\n\r\n function getCustomDomainWithProtocol() {\r\n if (!props.item.customDomain) return null;\r\n return `https://${props.item.customDomain}`;\r\n }\r\n\r\n function getQrValue(client) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/${getQrLinkUrl(client.qrLink)}`;\r\n }\r\n return getQrLinkFullUrl(client.qrLink);\r\n }\r\n\r\n function getItemUrl(client) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}`;\r\n }\r\n return getFullUrl(client.customUrl);\r\n }\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.item?.name}

\r\n { props.onEditClicked(props.item); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Channel URL
\r\n
{getItemUrl(props.item)}
\r\n
\r\n\r\n
\r\n
Custom domain
\r\n {props.item.customDomain ?\r\n
{getCustomDomainWithProtocol()}
\r\n : \r\n (None)\r\n }\r\n
\r\n\r\n
\r\n
Channel QR Link
\r\n
{getQrValue(props.item)}
\r\n
\r\n\r\n {stickers && stickers.map((sticker, index) => {\r\n return (\r\n
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n })}\r\n\r\n {/*
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
*/}\r\n\r\n
\r\n
Hero video encoding status
\r\n
\r\n

{props.item.encodingStatus}

\r\n
\r\n
\r\n
\r\n
Hero video Stream URLs
\r\n
\r\n {!props.item.streamUrls || props.item.streamUrls.length === 0 &&\r\n

Not yet encoded.

\r\n }\r\n {props.item.streamUrls && props.item.streamUrls.length > 0 &&\r\n
    \r\n {props.item.streamUrls.map(url => {\r\n return(\r\n
  • \r\n {url}\r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {props.links.map((section) => (\r\n { props.onSectionSelected(section); ev.stopPropagation(); }}\r\n className='text-indigo-700 hover:text-indigo-900 group flex items-center py-2 text-base font-medium mr-5 cursor-pointer'\r\n >\r\n \r\n {section.name}\r\n \r\n ))}\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Utils from '../Utils/Utils';\r\n\r\nexport default (props) => {\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {/* Use an \"onChange\" listener to redirect the user to the selected tab URL. */}\r\n x.name === props.activeTab.name).name}\r\n onChange={(ev) => props.onSetActiveTab(props.tabs.find(x => x.name === ev.target.value))}\r\n >\r\n {props.tabs.map((tab) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Dropzone from 'react-dropzone'; //https://github.com/react-dropzone/react-dropzone\r\nexport default (props) => {\r\n return (\r\n\r\n
\r\n
\r\n \"\"\r\n {props.image &&\r\n { props.onSetImage(null); props.onSetImageFileRemoved(true); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove file\r\n \r\n }\r\n\r\n
\r\n\r\n props.onSetImageFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload an image\r\n or drag and drop\r\n \r\n \r\n
\r\n

PNG, JPG, GIF or SVG

\r\n
\r\n \r\n
\r\n )} \r\n
\r\n
\r\n )\r\n}\r\n","import React, { useState, useEffect, Fragment } from 'react';\r\nimport { Dialog, Transition } from '@headlessui/react'\r\n\r\nexport default (props) => {\r\n const [keyvalues, setKeyvalues] = useState(null);\r\n const [newKey, setNewKey] = useState('');\r\n const [newValue, setNewValue] = useState('');\r\n \r\n useEffect(() => {\r\n if (!keyvalues) {\r\n setKeyvalues(props.keyvalues);\r\n // setKeyvalues({\r\n // kalle: 'olle',\r\n // pelle: 'tjena'\r\n // });\r\n }\r\n }, [props.keyvalues]);\r\n\r\n useEffect(() => {\r\n props.onUpdated && props.onUpdated(keyvalues);\r\n }, [keyvalues]);\r\n\r\n function setKeyName(key, name) {\r\n let copy = {...keyvalues};\r\n let val = copy[key];\r\n delete copy[key];\r\n if (name || val) {\r\n copy[name] = val;\r\n }\r\n setKeyvalues(copy);\r\n }\r\n\r\n function setKeyValue(key, value) {\r\n let copy = {...keyvalues};\r\n if (key || value) {\r\n copy[key] = value;\r\n } else {\r\n delete copy[key];\r\n }\r\n setKeyvalues(copy);\r\n }\r\n\r\n function addNewKeyValue() {\r\n if (newKey && newValue && !keyvalues[newKey]) {\r\n let copy = {...keyvalues};\r\n copy[newKey] = newValue;\r\n setKeyvalues(copy);\r\n setNewKey('');\r\n setNewValue('');\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {keyvalues && Object.keys(keyvalues).sort(function(a, b) { return a < b ? -1 : 1}).map(key => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Key\r\n \r\n Value\r\n
\r\n setKeyName(key, e.target.value)}\r\n />\r\n \r\n setKeyValue(key, e.target.value)}\r\n />\r\n
\r\n setNewKey(e.target.value)}\r\n />\r\n \r\n setNewValue(e.target.value)}\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Dropzone from 'react-dropzone'; //https://github.com/react-dropzone/react-dropzone\r\nimport _ from \"lodash\";\r\nimport Utils from '../Utils/Utils';\r\nimport Tabs from './Tabs';\r\nimport ImageUpload from './ImageUpload';\r\nimport PropertiesEditor from \"./PropertiesEditor\";\r\n\r\nconst videoRef = React.createRef();\r\n\r\nconst tabGeneral = { name: 'General' };\r\nconst tabDesign = { name: 'Design' };\r\nconst tabContact = { name: 'Contact Information' };\r\nconst tabSocialMedia = { name: 'Social Media' };\r\nconst tabLegal = { name: 'Legal' };\r\nconst tabs = [tabGeneral, tabDesign, tabContact, tabSocialMedia, tabLegal];\r\nconst socMediaTypes = ['Instagram', 'LinkedIn', 'Facebook', 'Twitter', 'Pinterest'];\r\n\r\nexport default (props) => {\r\n const [, updateState] = React.useState();\r\n const forceUpdate = useCallback(() => updateState({}), []);\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [logoFile, setLogoFile] = useState(null);\r\n const [logo, setLogo] = useState(null);\r\n //const [hasExistingLogo, setHasExistingLogo] = useState(null);\r\n const [logoFileRemoved, setLogoFileRemoved] = useState(null);\r\n const [activeTab, setActiveTab] = useState(tabGeneral);\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [heroVideoFile, setHeroVideoFile] = useState(null);\r\n const [heroVideoFileRemoved, setHeroVideoFileRemoved] = useState(false);\r\n const [hasExistingHeroVideo, setHasExistingHeroVideo] = useState(false);\r\n const [heroVideoSource, setHeroVideoSource] = useState(''); \r\n \r\n const [socMediaChannels, setSocMediaChannels] = useState([]);\r\n const [newSocMediaChannelType, setNewSocMediaChannelType] = useState('');\r\n const [newSocMediaChannelName, setNewSocMediaChannelName] = useState('');\r\n const [newSocMediaChannelUrl, setNewSocMediaChannelUrl] = useState('');\r\n\r\n \r\n \r\n useEffect(() => {\r\n if (props?.item) {\r\n if (props.item.id) {\r\n setEditingItem(props.item);\r\n setSocMediaChannels(props.item.socMediaChannels ?? []);\r\n\r\n async function loadExistingLogo() {\r\n setLogo(await loadAsDataUrl(props.item.existingLogoUrl));\r\n }\r\n if (props.item.existingLogoUrl) {\r\n loadExistingLogo();\r\n }\r\n\r\n if (props.item.existingHeroVideoUrl) {\r\n setHeroVideoSource(props.item.existingHeroVideoUrl);\r\n setHasExistingHeroVideo(true);\r\n }\r\n } else {\r\n loadNewClientTemplate();\r\n }\r\n }\r\n }, []);\r\n\r\n function loadNewClientTemplate() {\r\n Utils.loadNewClientTemplate(props.instance.id).then(response => response.json().then(async data => {\r\n setEditingItem(data);\r\n }));\r\n }\r\n\r\n\r\n async function loadAsDataUrl(url) {\r\n let blob = await fetch(url).then(r => r.blob());\r\n let dataUrl = await new Promise(resolve => {\r\n let reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n return dataUrl;\r\n }\r\n\r\n useEffect(() => {\r\n if(logoFile) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", function() {\r\n setLogo(reader.result);\r\n });\r\n reader.readAsDataURL(logoFile);\r\n } else {\r\n setLogo(null);\r\n }\r\n }, [logoFile]);\r\n\r\n useEffect(() => {\r\n if(heroVideoFile) {\r\n setHeroVideoSource(URL.createObjectURL(heroVideoFile));\r\n Utils.getClientHeroVideoUploadUrl(props.instance.id, editingItem.id).then(response => response.json().then(async data => {\r\n editingItem.uploadedVideoFilename = data.filename;\r\n props.onUploadVideo(editingItem.id.replace(/_new_/, ''), heroVideoFile, data);\r\n }));\r\n\r\n } \r\n // else {\r\n // setHeroVideoSource('');\r\n // }\r\n }, [heroVideoFile]);\r\n\r\n\r\n\r\n useEffect(() => {\r\n if(editingItem) {\r\n editingItem.logoFileRemoved = logoFileRemoved;\r\n }\r\n }, [logoFileRemoved]);\r\n\r\n useEffect(() => {\r\n if(editingItem) {\r\n editingItem.socMediaChannels = socMediaChannels;\r\n }\r\n }, [socMediaChannels]);\r\n\r\n\r\n\r\n function saveClient(client, saveAndExit = false) {\r\n if (client.name.trim() == '') {\r\n alert(\"Please provide a name for the client.\");\r\n return;\r\n }\r\n\r\n if (client.customUrl.trim() == '') {\r\n alert(\"Please provide a url for the client.\");\r\n return;\r\n }\r\n\r\n const isCreating = !client?.id || client?.id.indexOf(\"_new_\") === 0;\r\n const url = !isCreating ? Utils.getClientUrl(props.instance.id, client.id) : Utils.getClientsUrl(props.instance.id);\r\n\r\n debugger;\r\n let model = Utils.sanitizeObject(client);\r\n\r\n let data = new FormData();\r\n data.append(\"json\", JSON.stringify(model));\r\n if (logoFile) data.append(\"logo\", logoFile); \r\n //if (heroVideoFile) data.append(\"herovideo\", heroVideoFile); \r\n\r\n setIsBusy(true);\r\n fetch(url, {\r\n method: !isCreating ? 'PUT' : 'POST',\r\n body: data\r\n }).then(response => response.json()).then(response => {\r\n setIsBusy(false);\r\n props.onSaved(response, saveAndExit);\r\n });\r\n\r\n // const request = {\r\n // method: client.id ? 'PUT' : 'POST',\r\n // headers: {\r\n // 'Content-Type': 'application/json'\r\n // },\r\n // body: JSON.stringify(client)\r\n // }\r\n // fetch(url, request).then(response => response.json().then(data => {\r\n // props.onSaved(data);\r\n // }));\r\n }\r\n\r\n function deleteClient(client) {\r\n if (window.confirm(\"Are you sure?\")) {\r\n fetch(Utils.getClientUrl(props.instance.id, client.id), Utils.createRequest('DELETE')).then(() => {\r\n props.onDeleted(client);\r\n });\r\n }\r\n }\r\n\r\n function resetViewToBrowse() {\r\n props.onDone();\r\n }\r\n\r\n function updateEditingItem(field, value) {\r\n let obj = editingItem;\r\n if (field.indexOf('.') === -1) {\r\n editingItem[field] = value;\r\n } else {\r\n let fields = field.split('.');\r\n let existTest = obj;\r\n fields.map(x => {\r\n if (existTest[x] === undefined) existTest[x] = {};\r\n existTest = existTest[x];\r\n });\r\n const lastField = fields[fields.length - 1];\r\n fields = _.take(fields, fields.length - 1);\r\n fields.map(x => obj = obj[x]);\r\n obj[lastField] = value;\r\n }\r\n forceUpdate();\r\n }\r\n\r\n function addNewSocMediaChannel() {\r\n if (!newSocMediaChannelName) { alert(\"Name is required.\"); return; }\r\n if (!newSocMediaChannelUrl) { alert(\"Url is required.\"); return; }\r\n\r\n let smc = [...socMediaChannels];\r\n smc.push({ type: newSocMediaChannelType, name: newSocMediaChannelName, url: newSocMediaChannelUrl });\r\n setSocMediaChannels(smc);\r\n\r\n setNewSocMediaChannelType('');\r\n setNewSocMediaChannelName('');\r\n setNewSocMediaChannelUrl('');\r\n }\r\n\r\n function setSocMediaChannelDetails(channel, type, name, url) {\r\n const idx = socMediaChannels.indexOf(channel);\r\n if (idx !== -1) {\r\n let smc = _.cloneDeep(socMediaChannels[idx]);\r\n\r\n smc.type = type ?? smc.type;\r\n smc.name = name ?? smc.name;\r\n smc.url = url ?? smc.url;\r\n\r\n let channelsCopy = [...socMediaChannels];\r\n channelsCopy.splice(idx, 1, smc);\r\n setSocMediaChannels(channelsCopy);\r\n }\r\n }\r\n\r\n function deleteSocMediaChannel(channel) {\r\n const idx = socMediaChannels.indexOf(channel);\r\n if (idx !== -1) {\r\n let channelsCopy = [...socMediaChannels];\r\n channelsCopy.splice(idx, 1);\r\n setSocMediaChannels(channelsCopy);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.view === 'createClientView' ? \"Create client\" : \"Edit client\"}

\r\n
\r\n
\r\n\r\n setActiveTab(tab)} />\r\n\r\n
{ ev.preventDefault(); return false; }}>\r\n {activeTab === tabGeneral &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('name', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('culture', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('customDomain', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('customUrl', e.target.value) }\r\n />\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n editingItem && updateEditingItem('properties', keyvalues)} />\r\n
\r\n
\r\n \r\n
\r\n }\r\n\r\n {activeTab === tabDesign &&\r\n
\r\n
\r\n \r\n
\r\n setLogo(img)} \r\n onSetImageFileRemoved={() => setLogoFileRemoved()} \r\n onSetImageFile={(file) => setLogoFile(file)}\r\n />\r\n \r\n {/*
\r\n
\r\n \"\"\r\n
\r\n\r\n {logo &&\r\n { setLogo(null); setLogoFileRemoved(true); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove uploaded file\r\n \r\n }\r\n\r\n setLogoFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload an image file\r\n or drag and drop\r\n \r\n \r\n
\r\n

PNG, JPG, GIF or SVG

\r\n
\r\n \r\n
\r\n )} \r\n
\r\n
*/}\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n Upload video\r\n
\r\n\r\n setHeroVideoFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload a video file\r\n \r\n \r\n

or drag and drop

\r\n
\r\n

MP4 or WEBM

\r\n
\r\n
\r\n )} \r\n
\r\n\r\n {(heroVideoFile || hasExistingHeroVideo) &&\r\n { setHasExistingHeroVideo(false); setHeroVideoFile(null); setHeroVideoFileRemoved(true); setHeroVideoSource(''); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove uploaded file\r\n \r\n }\r\n
\r\n
\r\n
\r\n Video preview\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('channelPageHeadline', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('channelPageSubhead', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('textColor', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('secondaryTextColor', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('backgroundColor', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('bannerBackgroundColor', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n }\r\n\r\n {activeTab === tabContact &&\r\n
\r\n
\r\n \r\n
\r\n updateEditingItem('contact.address', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('contact.url', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('contact.email', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('contact.phone', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n }\r\n\r\n {activeTab === tabSocialMedia &&\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {socMediaChannels.map((channel, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n Social media\r\n \r\n Name\r\n \r\n Url\r\n \r\n
\r\n
\r\n setSocMediaChannelDetails(channel, e.target.value) }\r\n >\r\n {socMediaTypes.map(x => \r\n \r\n )}\r\n \r\n
\r\n
\r\n setSocMediaChannelDetails(channel, null, e.target.value) }\r\n />\r\n \r\n setSocMediaChannelDetails(channel, null, null, e.target.value) }\r\n />\r\n \r\n deleteSocMediaChannel(channel)} className=\"text-red-600 cursor-pointer\" />\r\n
\r\n\r\n
\r\n
\r\n
\r\n { setNewSocMediaChannelType(ev.target.value); setNewSocMediaChannelName(ev.target.value); } }\r\n >\r\n \r\n {socMediaTypes.map(x => \r\n \r\n )}\r\n \r\n
\r\n\r\n setNewSocMediaChannelName(e.target.value) }\r\n />\r\n setNewSocMediaChannelUrl(e.target.value) }\r\n />\r\n
\r\n\r\n \r\n addNewSocMediaChannel()} className=\"\" />\r\n \r\n
\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n {/*
\r\n \r\n
\r\n
\r\n updateEditingItem('socialMedia.instagram', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('socialMedia.linkedIn', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('socialMedia.facebook', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('socialMedia.twitter', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('socialMedia.pinterest', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n */}\r\n
\r\n }\r\n\r\n {activeTab === tabLegal &&\r\n
\r\n
\r\n \r\n
\r\n updateEditingItem('legal.termsAndConditions', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('legal.cookieTerms', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('legal.privacyTerms', e.target.value) }\r\n />\r\n
\r\n
\r\n \r\n
\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n
\r\n
\r\n {props.view === 'editClientView' &&\r\n deleteClient(editingItem)}\r\n className=\"bg-red-600 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Delete\r\n \r\n }\r\n
\r\n !isBusy && resetViewToBrowse()}\r\n className={`${isBusy ? 'opacity-50' : ''} bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n Cancel\r\n \r\n !isBusy && saveClient(editingItem)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save\r\n \r\n !isBusy && saveClient(editingItem, true)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save and exit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default (props) => {\r\n return (\r\n <>\r\n {props.items && props.items.length > 3 &&\r\n
\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add client group\r\n \r\n
\r\n }\r\n\r\n
\r\n
    \r\n {props.items && [...props.items].map((clientGroup) => (\r\n
  • \r\n \r\n\r\n\r\n
    { props.onEditClicked(clientGroup); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === clientGroup.id ? \"bg-blue-50\" : \"\"}`}>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
      \r\n {clientGroup.itemIds.map(clientId => {\r\n return (\r\n
    • {props.clients.find(x => x.id == clientId).name}
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n

    \r\n {client.clips.length} Clip{client.clips.length === 1 ? '' : 's'}\r\n

    \r\n
    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n { props.onEditClicked(clientGroup); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
  • \r\n ))}\r\n\r\n {props.items && props.items.length === 0 &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n No clients groups created yet. Click Add client group to create one. \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n {!props.items &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n \r\n Loading... \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n {props.items &&\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add client group\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Dropzone from 'react-dropzone'; //https://github.com/react-dropzone/react-dropzone\r\nimport _ from \"lodash\";\r\nimport Utils from '../Utils/Utils';\r\nimport Tabs from './Tabs';\r\nimport ImageUpload from './ImageUpload';\r\nimport PropertiesEditor from \"./PropertiesEditor\";\r\nimport {DraggableAreasGroup} from 'react-draggable-tags'; //https://ygyooo.github.io/react-draggable-tags/\r\n\r\nexport default (props) => {\r\n const [, updateState] = React.useState();\r\n const forceUpdate = useCallback(() => updateState({}), []);\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [availableClients, setAvailableClients] = useState([]);\r\n const [selectedClients, setSelectedClients] = useState([]);\r\n \r\n const group = new DraggableAreasGroup();\r\n const ClientGroupsDraggableAreaFrom = group.addArea(); \r\n const ClientGroupsDraggableAreaTo = group.addArea(); \r\n \r\n \r\n useEffect(() => {\r\n if (props?.item) {\r\n if (props.item.id) {\r\n setEditingItem(props.item);\r\n }\r\n }\r\n //Available clients are any clients that are not already members of any group\r\n setAvailableClients([...props.clients.filter(x => !x.clientGroupId)].sort(function(a, b) { return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1}));\r\n if (props.item?.id)\r\n setSelectedClients([...props.clients.filter(x => x.clientGroupId == props.item.id)].sort(function(a, b) { return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1}));\r\n }, []);\r\n\r\n\r\n function saveClientGroup(clientGroup, saveAndExit = false) {\r\n const isCreating = !clientGroup?.id || clientGroup?.id.indexOf(\"_new_\") === 0;\r\n const url = !isCreating ? Utils.getClientGroupUrl(props.instance.id, clientGroup.id) : Utils.getClientGroupsUrl(props.instance.id);\r\n\r\n let model = Utils.sanitizeObject(clientGroup);\r\n\r\n if (!model) {\r\n model = {}\r\n }\r\n model.itemIds = selectedClients.map(x => x.id);\r\n\r\n let data = new FormData();\r\n data.append(\"json\", JSON.stringify(model));\r\n\r\n setIsBusy(true);\r\n fetch(url, {\r\n method: !isCreating ? 'PUT' : 'POST',\r\n body: data\r\n }).then(response => response.json()).then(response => {\r\n setIsBusy(false);\r\n if (response.clientIds)\r\n props.onSaved(response, saveAndExit);\r\n else\r\n props.onDeleted(response);\r\n });\r\n }\r\n\r\n function deleteClientGroup(clientGroup) {\r\n if (window.confirm(\"Are you sure?\")) {\r\n fetch(Utils.getClientGroupUrl(props.instance.id, clientGroup.id), Utils.createRequest('DELETE')).then(() => {\r\n props.onDeleted(clientGroup);\r\n });\r\n }\r\n }\r\n\r\n function resetViewToBrowse() {\r\n props.onDone();\r\n }\r\n\r\n function updateEditingItem(field, value) {\r\n let obj = editingItem;\r\n if (field.indexOf('.') === -1) {\r\n editingItem[field] = value;\r\n } else {\r\n let fields = field.split('.');\r\n let existTest = obj;\r\n fields.map(x => {\r\n if (existTest[x] === undefined) existTest[x] = {};\r\n existTest = existTest[x];\r\n });\r\n const lastField = fields[fields.length - 1];\r\n fields = _.take(fields, fields.length - 1);\r\n fields.map(x => obj = obj[x]);\r\n obj[lastField] = value;\r\n }\r\n forceUpdate();\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.view === 'createClientGroupView' ? \"Create client group\" : \"Edit client group\"}

\r\n
\r\n
\r\n\r\n
{ ev.preventDefault(); return false; }}>\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n Available clients\r\n
\r\n (\r\n
\r\n {tag.name}\r\n
\r\n )}\r\n onChange={clients => setAvailableClients(clients)}\r\n />\r\n
\r\n
\r\n
\r\n Clients in group\r\n
\r\n (\r\n
\r\n {tag.name}\r\n
\r\n )}\r\n onChange={clients => setSelectedClients(clients)}\r\n />\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n
\r\n {props.view === 'editClientGroupView' &&\r\n deleteClientGroup(editingItem)}\r\n className=\"bg-red-600 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Delete\r\n \r\n }\r\n
\r\n !isBusy && resetViewToBrowse()}\r\n className={`${isBusy ? 'opacity-50' : ''} bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n Cancel\r\n \r\n !isBusy && saveClientGroup(editingItem)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save\r\n \r\n !isBusy && saveClientGroup(editingItem, true)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save and exit\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default (props) => {\r\n\r\n return (\r\n <>\r\n {props.items && props.items.length > 3 &&\r\n
\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add video\r\n \r\n
\r\n }\r\n
\r\n
    \r\n {props.items && [...props.items].sort((a, b) => a.name.localeCompare(b.name, undefined, {sensitivity: 'base'})).map((clip) => (\r\n
  • \r\n\r\n\r\n
    { props.onSelected(clip); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === clip.id ? \"bg-blue-50\" : \"\"}`}>\r\n
    \r\n
    \r\n {(clip.existingCustomLandscapeThumbUrl || clip.existingVideoThumbUrl) && \r\n \"\"\r\n }\r\n {(!clip.existingCustomLandscapeThumbUrl && !clip.existingVideoThumbUrl) && \r\n
    \r\n \r\n
    \r\n }\r\n \r\n
    \r\n
    \r\n

    {clip.name?.length > 0 ? clip.name : '(Untitled video)'}

    \r\n {/*

    {clip.id}

    */}\r\n {clip.encodingStatus && clip.encodingStatus !== '' &&\r\n

    Encoding status: {clip.encodingStatus}

    \r\n }\r\n
    \r\n {!clip.isPublished &&\r\n
    \r\n
    \r\n

    \r\n \r\n Not published\r\n \r\n

    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n
    \r\n
    \r\n { props.onEditClicked(clip); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n\r\n
  • \r\n ))}\r\n\r\n {props.items && props.items.length === 0 &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n No videos created yet. Click Add video to create one. \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n {!props.items &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n \r\n Loading... \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n {props.items &&\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add video\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport QRSticker from \"./QRSticker\";\r\nimport _ from \"lodash\";\r\nimport Utils from '../Utils/Utils';\r\n\r\nexport default (props) => {\r\n const [stickers, setStickers] = useState([]);\r\n\r\n useEffect(() => {\r\n if (props.client.properties?.qr_sticker_backdrops) {\r\n const backdrops = props.client.properties.qr_sticker_backdrops?.split(',');\r\n const overlays = props.client.properties.qr_sticker_overlays?.split(',');\r\n const colors = props.client.properties.qr_sticker_colors?.split(',');\r\n const widths = props.client.properties.qr_sticker_widths?.split(',');\r\n const heights = props.client.properties.qr_sticker_heights?.split(',');\r\n const sizes = props.client.properties.qr_sticker_sizes?.split(',');\r\n const transforms = props.client.properties.qr_sticker_transforms?.split(',');\r\n let stickerArray = [];\r\n for(let i = 0; i < backdrops.length; i++) {\r\n stickerArray.push({ \r\n backdrop: backdrops[i], \r\n overlay: overlays[i], \r\n color: colors[i],\r\n width: widths[i],\r\n height: heights[i],\r\n size: sizes[i],\r\n transform: transforms[i]\r\n });\r\n }\r\n setStickers(stickerArray);\r\n } else {\r\n setStickers([\r\n { \r\n backdrop: '/qrlogos/generic_qrsticker_bg.svg', \r\n overlay: '/qrlogos/generic_qrsticker_overlay.svg', \r\n color: '#000000',\r\n width: 475,\r\n height: 259,\r\n size: 173,\r\n transform: 't255 43'\r\n }\r\n ]);\r\n }\r\n }, []);\r\n\r\n function encodeNow() {\r\n Utils.encodeClip(props.instance.id, props.client.id, props.item.id).then(response => response.json().then(data => {\r\n console.log(\"encode...\");\r\n }).catch((err) => {\r\n }));\r\n\r\n }\r\n\r\n function getServerUrl() {\r\n return window.location.protocol + '//' + window.location.host;\r\n }\r\n\r\n function getFullUrl(itemUrl) {\r\n const url = window.location.protocol + '//' + window.location.host;\r\n return `${url}/${getRelativeUrl(itemUrl)}`;\r\n }\r\n\r\n function getRelativeUrl(itemUrl) {\r\n return `v/${props.client.customUrl}/${itemUrl}`;\r\n }\r\n\r\n function getQrLinkUrl(qrLink) {\r\n return `qr/r/${qrLink}`;\r\n }\r\n\r\n function getQrLinkFullUrl(qrLink) {\r\n return `${getServerUrl()}/qr/r/${qrLink}`;\r\n }\r\n\r\n function getQrValue(client, qrLink) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/${getQrLinkUrl(qrLink)}`;\r\n }\r\n return getQrLinkFullUrl(qrLink);\r\n }\r\n\r\n function getItemUrl(client, item) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/v/${item.url}`;\r\n }\r\n \r\n return getFullUrl(item.url);\r\n }\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.item?.name}

\r\n { props.onEditClicked(props.item); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n {stickers && stickers.map((sticker, index) => {\r\n return (\r\n
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n })}\r\n {/*
\r\n
QR Code
\r\n
\r\n \r\n\r\n
\r\n
*/}\r\n
\r\n
Stream URLs
\r\n
\r\n {!props.item.streamUrls || props.item.streamUrls.length === 0 &&\r\n

Not yet encoded.

\r\n }\r\n {props.item.streamUrls && props.item.streamUrls.length > 0 &&\r\n
    \r\n {props.item.streamUrls.map(url => {\r\n return(\r\n
  • \r\n {url}\r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {/* {props.links.map((section) => (\r\n { props.onSectionSelected(section); ev.stopPropagation(); }}\r\n className='text-indigo-700 hover:text-indigo-900 group flex items-center py-2 text-base font-medium mr-5 cursor-pointer'\r\n >\r\n \r\n {section.name}\r\n \r\n ))} */}\r\n
\r\n
\r\n )\r\n}\r\n","/* This example requires Tailwind CSS v2.0+ */\r\nimport React, { useState, useEffect, Fragment } from 'react';\r\nimport { Dialog, Transition } from '@headlessui/react'\r\n\r\nexport default (props) => {\r\n const [open, setOpen] = useState(false);\r\n useEffect(() => {\r\n setOpen(props && props.isOpen && props.isOpen === true);\r\n }, [props.isOpen]);\r\n\r\n return (\r\n \r\n props.onClosed()}>\r\n
\r\n \r\n \r\n \r\n\r\n {/* This element is to trick the browser into centering the modal contents. */}\r\n \r\n ​\r\n \r\n \r\n
\r\n {/*
\r\n setOpen(false)}\r\n >\r\n Close\r\n \r\n \r\n
*/}\r\n {props.children}\r\n {/*
\r\n
\r\n \r\n
\r\n
\r\n \r\n Deactivate account\r\n \r\n
\r\n

\r\n Are you sure you want to deactivate your account? All of your data will be permanently removed\r\n from our servers forever. This action cannot be undone.\r\n

\r\n
\r\n
\r\n
*/}\r\n {/*
\r\n setOpen(false)}\r\n >\r\n Deactivate\r\n \r\n setOpen(false)}\r\n >\r\n Cancel\r\n \r\n
*/}\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n}","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Dropzone from 'react-dropzone'; //https://github.com/react-dropzone/react-dropzone\r\nimport {DraggableAreasGroup} from 'react-draggable-tags'; //https://ygyooo.github.io/react-draggable-tags/\r\nimport _ from \"lodash\";\r\nimport Utils from '../Utils/Utils';\r\nimport Tabs from './Tabs';\r\nimport ImageUpload from './ImageUpload';\r\n\r\nconst group = new DraggableAreasGroup();\r\nconst ClipsDraggableAreaFrom = group.addArea(); \r\nconst ClipsDraggableAreaTo = group.addArea(); \r\n\r\nconst tabGeneral = { name: 'General' };\r\nconst tabClips = { name: 'Clips' };\r\nconst tabEcommerce = { name: 'Ecommerce' };\r\nconst tabTranslations = { name: 'Translations' };\r\n//const tabs = [tabGeneral, tabClips, tabEcommerce, tabTranslations];\r\n\r\nexport default (props) => {\r\n const [, updateState] = React.useState();\r\n const forceUpdate = useCallback(() => updateState({}), []);\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [imageFile, setImageFile] = useState(null);\r\n const [image, setImage] = useState(null);\r\n const [imageFileRemoved, setImageFileRemoved] = useState(null);\r\n const [activeTab, setActiveTab] = useState(tabGeneral);\r\n const [initialClips, setInitialClips] = useState([]);\r\n const [clientClips, setClientClips] = useState([]);\r\n const [availableClips, setAvailableClips] = useState([]);\r\n const [selectedClips, setSelectedClips] = useState([]);\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [tabs, setTabs] = useState([tabGeneral, tabClips, tabEcommerce, tabTranslations]);\r\n\r\n const [clientGroupProducts, setClientGroupProducts] = useState([]);\r\n const [selectedClientGroupClient, setSelectedClientGroupClient] = useState();\r\n const [translatedClientProducts, setTranslatedClientProducts] = useState([]);\r\n\r\n\r\n useEffect(() => {\r\n if (props?.item) {\r\n setEditingItem(props.item);\r\n setInitialClips(props.item.__clips);\r\n //loadClientClips(props.instanceId, props.clientId);\r\n setClientClips(props.client.__clips);\r\n\r\n async function loadExistingImage() {\r\n setImage(await loadAsDataUrl(props.item.existingImageUrl));\r\n }\r\n if (props.item.existingImageUrl) {\r\n loadExistingImage();\r\n }\r\n }\r\n if (props.hideClips) {\r\n setTabs([tabGeneral, tabEcommerce]);\r\n }\r\n\r\n if (props.instance?.id && props.client?.clientGroupId) {\r\n Utils.loadClientGroupProducts(props.instance.id, props.client.clientGroupId, props.client.id).then(response => response.json().then(data => {\r\n //setInstances(data);\r\n data.clients.map(client => {\r\n client.__products = data.products.filter(product => product.clientId == client.id && !product.productGroupId);\r\n });\r\n setClientGroupProducts(data.clients);\r\n console.log(data.clients);\r\n if (props.item.productGroupId) {\r\n let translated = [];\r\n data.products.filter(x => x.productGroupId == props.item.productGroupId && x.id != props.item.id).map(x => {\r\n let clientClone = {...data.clients.find(client => client.id == x.clientId)};\r\n let productClone = {...x};\r\n clientClone.product = productClone;\r\n translated.push(clientClone);\r\n });\r\n setTranslatedClientProducts(translated);\r\n }\r\n }).catch((err) => {\r\n if (response.status === 403) {\r\n //setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n } else {\r\n //setErrorModalText(`Could not load data: ${err}`);\r\n }\r\n }));\r\n }\r\n\r\n\r\n }, []);\r\n\r\n async function loadAsDataUrl(url) {\r\n let blob = await fetch(url).then(r => r.blob());\r\n let dataUrl = await new Promise(resolve => {\r\n let reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n return dataUrl;\r\n }\r\n\r\n useEffect(() => {\r\n if(clientClips) {\r\n if (initialClips && initialClips.length > 0) {\r\n setAvailableClips(clientClips.filter(x => !initialClips.find(selClip => selClip.id === x.id)));\r\n setSelectedClips(clientClips.filter(x => initialClips.find(selClip => selClip.id === x.id)));\r\n } else {\r\n setAvailableClips(clientClips);\r\n setSelectedClips([]);\r\n }\r\n }\r\n }, [clientClips]);\r\n\r\n useEffect(() => {\r\n if(editingItem && selectedClips) {\r\n let item = _.cloneDeep(editingItem);\r\n item.clips = selectedClips;\r\n selectedClips.map(x => { console.log(x.name)});\r\n setEditingItem(item);\r\n }\r\n }, [selectedClips]);\r\n\r\n useEffect(() => {\r\n if(imageFile) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", function() {\r\n setImage(reader.result);\r\n });\r\n reader.readAsDataURL(imageFile);\r\n } else {\r\n setImage(null);\r\n }\r\n }, [imageFile]);\r\n\r\n useEffect(() => {\r\n if(editingItem) {\r\n editingItem.imageFileRemoved = imageFileRemoved;\r\n }\r\n }, [imageFileRemoved]);\r\n\r\n\r\n // function loadClientClips(instanceId, clientId) {\r\n // Utils.loadClips(instanceId, clientId).then(response => response.json().then(data => {\r\n // setClientClips(data);\r\n // }));\r\n // }\r\n\r\n function saveProduct(product, saveAndExit = false) {\r\n if (product.name.trim() == '') {\r\n alert(\"Please provide a name for the product.\");\r\n return;\r\n }\r\n\r\n const isCreating = product?.id == null;\r\n const url = Utils.getProductsUrl(props.instance.id, props.client.id) + (!isCreating ? `/${product.id}` : '');\r\n\r\n let model = Utils.sanitizeObject(product);\r\n model.clipDTOs = selectedClips.map(clip => { \r\n return {\r\n id: clip.id\r\n }\r\n });\r\n\r\n if (translatedClientProducts.length > 0) {\r\n model.productGroups = translatedClientProducts.map(x => {\r\n return { \r\n clientId: x.id, \r\n itemId: x.product.id \r\n };\r\n });\r\n model.productGroups.push({ \r\n clientId: props.client.id, \r\n itemId: props.item.id \r\n });\r\n }\r\n\r\n // const request = {\r\n // method: isCreating ? 'POST' : 'PUT',\r\n // headers: {\r\n // 'Content-Type': 'application/json'\r\n // },\r\n // body: JSON.stringify(product)\r\n // }\r\n // fetch(url, request).then(response => response.json().then(data => {\r\n // props.onSaved(data);\r\n // }));\r\n let data = new FormData();\r\n data.append(\"json\", JSON.stringify(model));\r\n if (imageFile) data.append(\"image\", imageFile); \r\n\r\n setIsBusy(true);\r\n fetch(url, {\r\n method: product.id ? 'PUT' : 'POST',\r\n body: data\r\n }).then(response => response.json()).then(response => {\r\n setIsBusy(false);\r\n props.onSaved(response, saveAndExit);\r\n });\r\n\r\n }\r\n\r\n function deleteProduct(product) {\r\n if (window.confirm(\"Are you sure?\")) {\r\n fetch(Utils.getProductUrl(props.instanceId, props.clientId, product.id), Utils.createRequest('DELETE')).then(() => {\r\n props.onDeleted(product);\r\n });\r\n }\r\n }\r\n\r\n function resetViewToBrowse() {\r\n props.onDone();\r\n }\r\n\r\n function updateEditingItem(field, value) {\r\n let obj = editingItem;\r\n if (field.indexOf('.') === -1) {\r\n editingItem[field] = value;\r\n } else {\r\n let fields = field.split('.');\r\n const lastField = fields[fields.length - 1];\r\n fields = _.take(fields, fields.length - 1);\r\n fields.map(x => obj = obj[x]);\r\n obj[lastField] = value;\r\n }\r\n forceUpdate();\r\n }\r\n\r\n function toggleTranslatedClientProduct(client, product) {\r\n let clone = _.cloneDeep(translatedClientProducts);\r\n const idx = clone.findIndex(x => x.id == client.id);\r\n\r\n if (idx != -1) {\r\n clone.splice(idx, 1);\r\n }\r\n if (product) {\r\n let clientClone = {...client};\r\n clientClone.product = {...product};\r\n clone.push(clientClone);\r\n }\r\n\r\n setTranslatedClientProducts(clone);\r\n }\r\n\r\n function isClientGroupProductSelected(client, product) {\r\n const pl = translatedClientProducts.find(x => x.id == client.id);\r\n return pl?.product?.id == product.id;\r\n }\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.view === 'createProductView' ? \"Create product\" : \"Edit product\"}

\r\n
\r\n
\r\n\r\n setActiveTab(tab)} /> \r\n\r\n\r\n
{ ev.preventDefault(); return false; }}>\r\n \r\n \r\n \r\n {activeTab === tabGeneral &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('name', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('description', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n {/*
\r\n \r\n
\r\n
\r\n updateEditingItem('title', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
\r\n */}\r\n
\r\n \r\n
\r\n setImage(img)} \r\n onSetImageFileRemoved={() => setImageFileRemoved()} \r\n onSetImageFile={(file) => setImageFile(file)}\r\n />\r\n {/*
\r\n
\r\n \"\"\r\n {image &&\r\n { setImage(null); setImageFileRemoved(true); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove file\r\n \r\n }\r\n\r\n
\r\n\r\n setImageFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload an image file\r\n or drag and drop\r\n \r\n \r\n
\r\n

PNG, JPG, GIF or SVG

\r\n
\r\n \r\n
\r\n )} \r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n }\r\n\r\n \r\n \r\n \r\n {activeTab === tabClips && \r\n
\r\n
\r\n
\r\n Available\r\n
\r\n (\r\n
\r\n {tag.name}\r\n
\r\n )}\r\n onChange={clips => setAvailableClips(clips)}\r\n />\r\n
\r\n
\r\n
\r\n Selected\r\n
\r\n (\r\n
\r\n {tag.name}\r\n
\r\n )}\r\n onChange={clips => setSelectedClips(clips)}\r\n />\r\n
\r\n\r\n
\r\n }\r\n\r\n\r\n\r\n\r\n {activeTab === tabEcommerce && \r\n <>\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('shopUrl', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('moreInfoUrl', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('articleNumber', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
\r\n \r\n\r\n }\r\n\r\n\r\n {(activeTab === tabTranslations) && props.client.clientGroupId && clientGroupProducts.length > 0 &&\r\n
\r\n

{tabTranslations.name}

\r\n
\r\n\r\n
\r\n
\r\n Other clients in group\r\n
\r\n
    \r\n {clientGroupProducts.map(client => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {client.name} ({client.culture})\r\n
    \r\n
    setSelectedClientGroupClient(client)} className={`${client.id === selectedClientGroupClient?.id ? 'text-blue-400' : 'text-gray-400'} px-3 py-1`}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Products in client\r\n
\r\n
    \r\n {selectedClientGroupClient && [...selectedClientGroupClient.__products].sort((a, b) => a.name < b.name ? -1 : 1).map(product => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {product.name}\r\n
    \r\n
    toggleTranslatedClientProduct(selectedClientGroupClient, product)} className={`${isClientGroupProductSelected(selectedClientGroupClient, product) ? 'text-blue-400' : 'text-gray-400'} px-3 py-1`}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n \r\n
\r\n
\r\n Selected translations\r\n
\r\n
    \r\n {translatedClientProducts.map(client => {\r\n return (\r\n
  • \r\n
    toggleTranslatedClientProduct(client, null)} className=\"bg-gray-100 px-3 py-1\">\r\n \r\n
    \r\n
    \r\n \r\n ({client.culture}) {client.product.name}\r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n {props.view === 'editProductView' &&\r\n deleteProduct(editingItem)}\r\n className=\"bg-red-600 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Delete\r\n \r\n }\r\n
\r\n !isBusy && resetViewToBrowse()}\r\n className={`${isBusy ? 'opacity-50' : ''} bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n Cancel\r\n \r\n !isBusy && saveProduct(editingItem)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save\r\n \r\n !isBusy && saveProduct(editingItem, true)}\r\n className={`${isBusy ? 'opacity-50' : ''} ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save and exit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\n\nexport default(props) => {\n const [isOn, setIsOn] = useState();\n\n useEffect(() => {\n if (props?.value) setIsOn(props.value);\n }, [props]);\n\n const toggle = () => {\n props.onChange && props.onChange(!isOn);\n setIsOn(!isOn);\n }\n\n return (\n \n )\n}","//https://usefulangle.com/post/46/javascript-get-video-thumbnail-image-jpeg-png\r\n\r\n\r\nimport React, { useState, useEffect, useReducer, useCallback } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {DraggableArea, DraggableAreasGroup} from 'react-draggable-tags'; //https://ygyooo.github.io/react-draggable-tags/\r\nimport Dropzone from 'react-dropzone'; //https://github.com/react-dropzone/react-dropzone\r\nimport Tabs from './Tabs';\r\nimport Modal from './Modal';\r\nimport ProductEditForm from './ProductEditForm';\r\nimport Toggle from '../Toggle';\r\n// import _DragDropList from './_DragDropList';\r\n// import SortableDragList from './_SortableDragList';\r\n\r\nimport _, { map } from \"lodash\";\r\nimport Utils from '../Utils/Utils';\r\n\r\nconst productsGroup = new DraggableAreasGroup();\r\nconst ProductsDraggableAreaFrom = productsGroup.addArea(); \r\nconst ProductsDraggableAreaTo = productsGroup.addArea(); \r\n\r\nconst playlistsGroup = new DraggableAreasGroup();\r\nconst PlaylistsDraggableAreaFrom = playlistsGroup.addArea(); \r\nconst PlaylistsDraggableAreaTo = playlistsGroup.addArea(); \r\n\r\nconst minutes = Array.from(Array(60), (_, x) => x);\r\nconst seconds = Array.from(Array(60), (_, x) => String(x).padStart(2, '0'));\r\n\r\nconst videoRef = React.createRef();\r\n\r\nconst tabGeneral = { name: 'General' };\r\nconst tabVideo = { name: 'Video' };\r\nconst tabPublish = { name: 'Publishing' };\r\nconst tabProducts = { name: 'Products' };\r\nconst tabPlaylists = { name: 'Playlists' };\r\nconst tabTranslations = { name: 'Translations' };\r\nconst tabs = [tabVideo, tabGeneral, tabPublish, tabProducts, tabPlaylists, tabTranslations];\r\n\r\nexport default (props) => {\r\n const [, updateState] = React.useState();\r\n const forceUpdate = useCallback(() => updateState({}), []);\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [videoFile, setVideoFile] = useState(null);\r\n //const [videoUploadUrl, setVideoUploadUrl] = useState(null);\r\n const [videoWidth, setVideoWidth] = useState(null);\r\n const [videoHeight, setVideoHeight] = useState(null);\r\n const [videoDuration, setVideoDuration] = useState(null);\r\n const [videoThumb, setVideoThumb] = useState(null);\r\n const [videoThumbTime, setVideoThumbTime] = useState(null);\r\n const [videoThumbFile, setVideoThumbFile] = useState(null);\r\n const [landscapeThumbFile, setLandscapeThumbFile] = useState(null);\r\n const [portraitThumbFile, setPortraitThumbFile] = useState(null);\r\n const [landscapeThumb, setLandscapeThumb] = useState(null);\r\n const [portraitThumb, setPortraitThumb] = useState(null);\r\n const [playlists, setPlaylists] = useState();\r\n const [availablePlaylists, setAvailablePlaylists] = useState();\r\n const [selectedPlaylists, setSelectedPlaylists] = useState();\r\n const [selectedPlaylist, setSelectedPlaylist] = useState(null);\r\n const [selectedPlaylistClips, setSelectedPlaylistClips] = useState([]);\r\n //const [memberOfPlaylists, setMemberOfPlaylists] = useState([]);\r\n const [newPlaylistName, setNewPlaylistName] = useState('');\r\n const [availableProducts, setAvailableProducts] = useState([]);\r\n const [selectedProducts, setSelectedProducts] = useState([]);\r\n const [newProductName, setNewProductName] = useState('');\r\n const [segments, setSegments] = useState([]);\r\n const [newSegmentName, setNewSegmentName] = useState('');\r\n const [newSegmentMinutes, setNewSegmentMinutes] = useState('');\r\n const [newSegmentSeconds, setNewSegmentSeconds] = useState('');\r\n\r\n const [videoFileRemoved, setVideoFileRemoved] = useState(false);\r\n const [videoThumbFileRemoved, setVideoThumbFileRemoved] = useState(false);\r\n const [landscapeThumbFileRemoved, setLandscapeThumbFileRemoved] = useState(false);\r\n const [portraitThumbFileRemoved, setPortraitThumbFileRemoved] = useState(false);\r\n const [hasExistingVideo, setHasExistingVideo] = useState(false);\r\n const [activeTab, setActiveTab] = useState(tabVideo);\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [useTabs, setUseTabs] = useState(false);\r\n\r\n const [clientGroupClips, setClientGroupClips] = useState([]);\r\n const [selectedClientGroupClient, setSelectedClientGroupClient] = useState();\r\n const [translatedClientClips, setTranslatedClientClips] = useState([]);\r\n\r\n const [addProductModalOpen, setAddProductModalOpen] = useState(false);\r\n\r\n const [videoSource, setVideoSource] = useState('');\r\n const [newProductEditingItem, setNewProductEditingItem] = useState(null);\r\n\r\n const [, handleLoadedData] = useReducer((state, event) => {\r\n const videoElement = videoRef.current;\r\n setVideoWidth(videoElement.videoWidth);\r\n setVideoHeight(videoElement.videoHeight);\r\n setVideoDuration(videoElement.duration);\r\n videoElement.currentTime = videoThumbTime ?? videoElement.duration / 2;\r\n }, \"\");\r\n \r\n const [, handleTimeupdate] = useReducer((state, event) => {\r\n const videoElement = videoRef.current;\r\n if (videoElement.videoWidth > 0 && videoElement.videoHeight > 0 && (!hasExistingVideo || (hasExistingVideo && videoElement.currentTime !== 0 && videoElement.currentTime !== videoThumbTime))) {\r\n let canvas = document.createElement(\"canvas\");\r\n canvas.width = videoElement.videoWidth;\r\n canvas.height = videoElement.videoHeight;\r\n let context = canvas.getContext('2d');\r\n context.drawImage(videoElement, 0, 0, videoElement.videoWidth, videoElement.videoHeight);\r\n const dataUrl = canvas.toDataURL();\r\n setVideoThumb(dataUrl);\r\n setVideoThumbFile(dataUrlToFile(dataUrl, \"videoThumbnail.png\"));\r\n setVideoThumbTime(videoElement.currentTime);\r\n }\r\n }, \"\");\r\n\r\n \r\n useEffect(() => {\r\n console.log(props.item);\r\n\r\n if (props.instance?.id && props.client?.clientGroupId) {\r\n Utils.loadClientGroupClips(props.instance.id, props.client.clientGroupId, props.client.id).then(response => response.json().then(data => {\r\n //setInstances(data);\r\n data.clients.map(client => {\r\n client.__clips = data.clips.filter(clip => clip.clientId == client.id && !clip.clipGroupId);\r\n });\r\n setClientGroupClips(data.clients);\r\n console.log(data.clients);\r\n if (props.item.clipGroupId) {\r\n let translated = [];\r\n data.clips.filter(x => x.clipGroupId == props.item.clipGroupId && x.id != props.item.id).map(x => {\r\n let clientClone = {...data.clients.find(client => client.id == x.clientId)};\r\n let clipClone = {...x};\r\n clientClone.clip = clipClone;\r\n translated.push(clientClone);\r\n });\r\n setTranslatedClientClips(translated);\r\n }\r\n }).catch((err) => {\r\n if (response.status === 403) {\r\n //setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n } else {\r\n //setErrorModalText(`Could not load data: ${err}`);\r\n }\r\n }));\r\n }\r\n\r\n // videoRef.current.addEventListener('loadeddata', handleLoadedData);\r\n // videoRef.current.addEventListener('timeupdate', handleTimeupdate);\r\n // return () => {\r\n // videoRef.current.removeEventListener('loadeddata', handleLoadedData);\r\n // videoRef.current.removeEventListener('timeupdate', handleTimeupdate);\r\n // };\r\n }, []);\r\n \r\n\r\n\r\n useEffect(() => {\r\n setSelectedPlaylistClips(selectedPlaylist?.__clips ?? []);\r\n }, [selectedPlaylist]);\r\n\r\n useEffect(() => {\r\n if (props?.item) { \r\n //loadClip(props.item.id);\r\n setEditingItem(props.item);\r\n setSegments(props.item.segments);\r\n setSelectedProducts([...props.item.__products].sort((a, b) => a.order < b.order ? -1 : 1));\r\n setAvailableProducts([...props.client.__products]\r\n .sort((a, b) => a.name.localeCompare(b.name, undefined, {sensitivity: 'base'}))\r\n .filter(x => !props.item.__products.find(y => y.id === x.id))\r\n );\r\n\r\n if (props.item.existingVideoUrl) {\r\n // if (videoRef.current)\r\n // videoRef.current.src = data.existingVideoUrl;\r\n setVideoSource(props.item.existingVideoUrl);\r\n setVideoThumbTime(props.item.videoThumbnailTime);\r\n setHasExistingVideo(true);\r\n }\r\n\r\n async function loadThumbs() {\r\n if (props.item.existingVideoThumbUrl) {\r\n setVideoThumb(await loadAsDataUrl(`/render/image?url=${props.item.existingVideoThumbUrl}&width=1280`));\r\n }\r\n \r\n if (props.item.existingCustomLandscapeThumbUrl) {\r\n setLandscapeThumb(await loadAsDataUrl(`/render/image?url=${props.item.existingCustomLandscapeThumbUrl}&width=1280`));\r\n }\r\n \r\n if (props.item.existingCustomPortraitThumbUrl) {\r\n setPortraitThumb(await loadAsDataUrl(`/render/image?url=${props.item.existingCustomPortraitThumbUrl}&width=1280`));\r\n }\r\n }\r\n loadThumbs();\r\n \r\n\r\n \r\n\r\n //loadClientPlaylists();\r\n setPlaylists(props.client.__playlists); \r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (editingItem)\r\n editingItem.uploadedClipBlocks = props.uploadedClipBlocks;\r\n }, [props.uploadedClipBlocks]);\r\n\r\n\r\n useEffect(() => {\r\n if(editingItem)\r\n editingItem.products = selectedProducts;\r\n }, [selectedProducts]);\r\n\r\n useEffect(() => {\r\n if(editingItem)\r\n editingItem.segments = segments;\r\n }, [segments]);\r\n\r\n // useEffect(() => {\r\n // if (editingItem && playlists) {\r\n // let copy = _.cloneDeep(editingItem);\r\n // copy.playlists = playlists.filter(x => memberOfPlaylists.indexOf(x.id) !== -1);\r\n // setEditingItem(copy);\r\n // }\r\n // }, [memberOfPlaylists, playlists]);\r\n\r\n useEffect(() => {\r\n if(videoFile) {\r\n setVideoSource(URL.createObjectURL(videoFile));\r\n //videoRef.current.src = URL.createObjectURL(videoFile);\r\n //if (!videoUploadUrl) {\r\n Utils.getClipUploadUrl(props.instance.id, props.client.id, editingItem.id).then(response => response.json().then(async data => {\r\n editingItem.uploadedVideoFilename = data.filename;\r\n props.onUploadVideo(editingItem.id.replace(/_new_/, ''), videoFile, data);\r\n }));\r\n //}\r\n } else {\r\n setVideoThumb(null);\r\n //videoRef.current.src = \"\";\r\n setVideoSource('');\r\n }\r\n }, [videoFile]);\r\n\r\n useEffect(() => {\r\n if (videoThumbTime && editingItem) {\r\n editingItem.videoThumbnailTime = videoThumbTime;\r\n }\r\n }, [videoThumbTime]);\r\n\r\n useEffect(() => {\r\n if (videoWidth && editingItem) {\r\n editingItem.videoWidth = videoWidth;\r\n }\r\n }, [videoWidth]);\r\n\r\n useEffect(() => {\r\n if (videoHeight && editingItem) {\r\n editingItem.videoHeight = videoHeight;\r\n }\r\n }, [videoHeight]);\r\n\r\n useEffect(() => {\r\n if (videoDuration && editingItem) {\r\n editingItem.videoDuration = videoDuration;\r\n }\r\n }, [videoDuration]);\r\n\r\n useEffect(() => {\r\n if(landscapeThumbFile) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", function() {\r\n setLandscapeThumb(reader.result);\r\n });\r\n reader.readAsDataURL(landscapeThumbFile);\r\n } else {\r\n setLandscapeThumb(null);\r\n }\r\n }, [landscapeThumbFile]);\r\n\r\n useEffect(() => {\r\n if(portraitThumbFile) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", function() {\r\n setPortraitThumb(reader.result);\r\n });\r\n reader.readAsDataURL(portraitThumbFile);\r\n } else {\r\n setPortraitThumb(null);\r\n }\r\n }, [portraitThumbFile]);\r\n\r\n useEffect(() => {\r\n if(editingItem) {\r\n editingItem.videoFileRemoved = videoFileRemoved;\r\n editingItem.videoThumbFileRemoved = videoThumbFileRemoved;\r\n editingItem.landscapeThumbFileRemoved = landscapeThumbFileRemoved;\r\n editingItem.portraitThumbFileRemoved = portraitThumbFileRemoved;\r\n }\r\n }, [videoFileRemoved, videoThumbFileRemoved, landscapeThumbFileRemoved, portraitThumbFileRemoved]);\r\n\r\n // useEffect(() => {\r\n // if(playlists && selectedPlaylists) {\r\n // setAvailablePlaylists(playlists.filter(x => !selectedPlaylists.find(y => x)));\r\n // }\r\n // }, [playlists, selectedPlaylists]);\r\n\r\n useEffect(() => {\r\n if(playlists && editingItem && (!selectedPlaylists && !availablePlaylists)) {\r\n const clipPlaylistIds = editingItem.__playlists.map(x => x.id);\r\n const selPLs = playlists.filter(x => clipPlaylistIds.indexOf(x.id) !== -1);\r\n setSelectedPlaylists(selPLs);\r\n if (selPLs.length > 0) setSelectedPlaylist(selPLs[0]);\r\n\r\n setAvailablePlaylists(playlists.filter(x => clipPlaylistIds.indexOf(x.id) === -1));\r\n }\r\n }, [playlists, editingItem]);\r\n\r\n useEffect(() => {\r\n if (availablePlaylists && editingItem) {\r\n let listCopy = [...availablePlaylists];\r\n let found = false;\r\n listCopy.map(pl => {\r\n const clipIndex = pl.__clips.findIndex(x => x.id === editingItem.id);\r\n if (clipIndex !== -1) {\r\n let cliplistCopy = [...pl.__clips];\r\n cliplistCopy.splice(clipIndex, 1);\r\n pl.__clips = cliplistCopy;\r\n found = true;\r\n setSelectedPlaylist(null);\r\n }\r\n });\r\n if (found) {\r\n setAvailablePlaylists(listCopy);\r\n }\r\n }\r\n }, [availablePlaylists]);\r\n\r\n useEffect(() => {\r\n if (selectedPlaylists && editingItem) {\r\n let listCopy = [...selectedPlaylists];\r\n let found = false;\r\n listCopy.map(pl => {\r\n const clipIndex = pl.__clips.findIndex(x => x.id === editingItem.id);\r\n if (clipIndex === -1) {\r\n let cliplistCopy = [...pl.__clips];\r\n cliplistCopy.push(editingItem);\r\n pl.__clips = cliplistCopy;\r\n found = true;\r\n setSelectedPlaylist(selectedPlaylists.find(x => x.id === pl.id));\r\n }\r\n });\r\n if (found) {\r\n setSelectedPlaylists(listCopy);\r\n editingItem.__playlists = listCopy;\r\n } else {\r\n editingItem.__playlists = selectedPlaylists;\r\n }\r\n }\r\n }, [selectedPlaylists]);\r\n\r\n useEffect(() => {\r\n if (editingItem && selectedPlaylist) {\r\n let copy = _.cloneDeep(selectedPlaylist);\r\n copy.clips = selectedPlaylistClips;\r\n let listCopy = [...selectedPlaylists];\r\n const plIndex = listCopy.findIndex(x => x.id === selectedPlaylist.id);\r\n listCopy.splice(plIndex, 1, copy);\r\n setSelectedPlaylists(listCopy);\r\n }\r\n }, [selectedPlaylistClips]);\r\n\r\n\r\n \r\n async function loadAsDataUrl(url) {\r\n let blob = await fetch(url).then(r => r.blob());\r\n let dataUrl = await new Promise(resolve => {\r\n let reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n return dataUrl;\r\n }\r\n\r\n function dataUrlToFile(dataUrl, filename) {\r\n var arr = dataUrl.split(',');\r\n const mime = arr[0].match(/:(.*?);/)[1];\r\n const bstr = atob(arr[1]); \r\n let n = bstr.length;\r\n let u8arr = new Uint8Array(n);\r\n while(n--) {\r\n u8arr[n] = bstr.charCodeAt(n);\r\n }\r\n return new File([u8arr], filename, { type: mime });\r\n }\r\n\r\n // function loadClip(clipId) {\r\n // if(!props.instance || !props.client) return;\r\n\r\n // Utils.loadClip(props.instance.id, props.client.id, clipId ?? \"_new_\").then(response => response.json().then(async data => {\r\n // setEditingItem(_.cloneDeep(data));\r\n // setSegments(data.segments);\r\n // setSelectedProducts([...data.products].sort((a, b) => a.order < b.order ? -1 : 1));\r\n // setAvailableProducts([...data.clientProducts].sort((a, b) => a.name.localeCompare(b.name, undefined, {sensitivity: 'base'})).filter(x => !data.products.find(y => y.id === x.id)));\r\n\r\n // if (data.existingVideoUrl) {\r\n // // if (videoRef.current)\r\n // // videoRef.current.src = data.existingVideoUrl;\r\n // setVideoSource(data.existingVideoUrl);\r\n // setVideoThumbTime(data.videoThumbnailTime);\r\n // setHasExistingVideo(true);\r\n // }\r\n \r\n // if (data.existingVideoThumbUrl) {\r\n // setVideoThumb(await loadAsDataUrl(`/render/image?url=${data.existingVideoThumbUrl}&width=1280`));\r\n // }\r\n\r\n // if (data.existingCustomLandscapeThumbUrl) {\r\n // setLandscapeThumb(await loadAsDataUrl(`/render/image?url=${data.existingCustomLandscapeThumbUrl}&width=1280`));\r\n // }\r\n\r\n // if (data.existingCustomPortraitThumbUrl) {\r\n // setPortraitThumb(await loadAsDataUrl(`/render/image?url=${data.existingCustomPortraitThumbUrl}&width=1280`));\r\n // }\r\n\r\n // //const playlistIds = data.playlists.map(x => x.id);\r\n // //setSelectedPlaylists(data.playlists);\r\n // //setMemberOfPlaylists(playlistIds);\r\n // }));\r\n // }\r\n\r\n // function loadClientPlaylists() {\r\n // if(!props.instance || !props.client) return;\r\n // Utils.loadPlaylists(props.instance.id, props.client.id).then(response => response.json().then(data => {\r\n // setPlaylists(data);\r\n // }));\r\n // }\r\n\r\n function saveClip(clip, saveAndExit = false) {\r\n if (clip.name.trim() == '') {\r\n alert(\"Please provide a name for the video.\");\r\n return;\r\n }\r\n\r\n //const isCreating = !clip?.id;\r\n const isCreating = clip?.id.indexOf(\"_new_\") === 0;\r\n const url = isCreating ? Utils.getClipsUrl(props.instance.id, props.client.id) : Utils.getClipUrl(props.instance.id, props.client.id, clip.id);\r\n\r\n let model = Utils.sanitizeObject(clip);\r\n model.segments = clip.segments;\r\n model.playlistDTOs = selectedPlaylists.map(playlist => { \r\n return {\r\n id: playlist.id,\r\n clipIds: playlist.__clips.map(x => x.id)\r\n }\r\n });\r\n model.productDTOs = selectedProducts.map(product => {\r\n return {\r\n id: product.id\r\n }\r\n });\r\n\r\n if (translatedClientClips.length > 0) {\r\n model.clipGroups = translatedClientClips.map(x => {\r\n return { \r\n clientId: x.id, \r\n itemId: x.clip.id \r\n };\r\n });\r\n model.clipGroups.push({ \r\n clientId: props.client.id, \r\n itemId: props.item.id \r\n });\r\n }\r\n\r\n // let model = {\r\n // id: clip.id,\r\n // name: clip.name,\r\n // titleOnThumbnailHidden: clip.titleOnThumbnailHidden,\r\n // description: clip.description,\r\n // videoDuration: clip.videoDuration,\r\n // videoWidth: clip.videoWidth,\r\n // videoHeight: clip.videoHeight,\r\n // videoThumbnailTime: clip.videoThumbnailTime,\r\n // existingVideoThumbUrl: clip.existingVideoThumbUrl,\r\n // existingCustomLandscapeThumbUrl: clip.existingCustomLandscapeThumbUrl,\r\n // existingCustomPortraitThumbUrl: clip.existingCustomPortraitThumbUrl,\r\n // segments: clip.segments,\r\n // uploadedVideoFilename: clip.uploadedVideoFilename,\r\n // playlists: selectedPlaylists.map(playlist => { \r\n // return {\r\n // id: playlist.id,\r\n // clips: playlist.clips.map(clip => clip.id)\r\n // }\r\n // })\r\n // }\r\n\r\n // let clipCopy = _.cloneDeep(clip);\r\n // debugger;\r\n\r\n // for(let pl = 0; pl < clipCopy.__playlists.length; pl++) {\r\n // let playlist = clipCopy.__playlists[pl];\r\n // delete playlist.__client;\r\n\r\n // for(let cl = 0; cl < playlist.__clips.length; cl++) {\r\n // let clip = playlist.__clips[cl];\r\n // delete clip.__client;\r\n // delete clip.__playlists;\r\n // delete clip.__products;\r\n // debugger;\r\n // }\r\n // }\r\n\r\n // for(let pl = 0; pl < clipCopy.__playlists.length; pl++) {\r\n // let playlist = clipCopy.__playlists[pl];\r\n\r\n // for(let cl = 0; cl < playlist.__clips.length; cl++) {\r\n // let clip = _.clone(playlist.__clips[cl]);\r\n // debugger; \r\n // //clip.__playlists = [];\r\n // playlist.__clips.splice(cl, 1, clip);\r\n // clip.playlists = clip.__playlists;\r\n // delete clip.__playlists;\r\n // delete clip.__client;\r\n // delete clip.__products;\r\n // }\r\n // playlist.clips = playlist.__clips;\r\n // delete playlist.__clips;\r\n // delete playlist.__client;\r\n // }\r\n // clipCopy.playlists = clipCopy.__playlists;\r\n // delete clipCopy.__playlists;\r\n // delete clipCopy.__products;\r\n // delete clipCopy.__client;\r\n\r\n\r\n let data = new FormData();\r\n data.append(\"json\", JSON.stringify(model));\r\n if (videoThumbFile) data.append(\"videoThumb\", videoThumbFile); \r\n if (landscapeThumbFile) data.append(\"landscapeThumb\", landscapeThumbFile); \r\n if (portraitThumbFile) data.append(\"portraitThumb\", portraitThumbFile); \r\n //if (videoFile) data.append(\"video\", videoFile); \r\n\r\n setIsBusy(true);\r\n fetch(url, {\r\n method: isCreating ? 'POST' : 'PUT',\r\n body: data\r\n }).then(response => response.json()).then((response) => {\r\n setIsBusy(false);\r\n props.onSaved(response, saveAndExit);\r\n });\r\n }\r\n//.then(response => response.json()\r\n function deleteClip(clip) {\r\n if (window.confirm(\"Are you sure?\")) {\r\n setIsBusy(true);\r\n fetch(Utils.getClipUrl(props.instance.id, props.client.id, clip.id), Utils.createRequest('DELETE')).then(() => {\r\n setIsBusy(false);\r\n props.onDeleted(clip);\r\n });\r\n }\r\n }\r\n\r\n function resetViewToBrowse() {\r\n props.onDone();\r\n }\r\n\r\n function addNewSegment() {\r\n if (!newSegmentName) { alert(\"Segment name is required.\"); return; }\r\n if (!newSegmentMinutes || !newSegmentSeconds) { alert(\"Segment start time (minutes and seconds) is required.\"); return; }\r\n\r\n let seg = [...segments];\r\n seg.push({ title: newSegmentName ?? 'segment', startTime: parseInt(newSegmentMinutes) * 60 + parseInt(newSegmentSeconds) });\r\n setSegments(seg);\r\n\r\n setNewSegmentName('');\r\n setNewSegmentMinutes('');\r\n setNewSegmentSeconds('');\r\n }\r\n\r\n function setSegmentDetails(segment, title, minutes, seconds) {\r\n const idx = segments.indexOf(segment);\r\n if (idx !== -1) {\r\n let seg = _.cloneDeep(segments[idx]);\r\n const ttl = seg.title;\r\n const min = Math.trunc(seg.startTime / 60);\r\n const sec = seg.startTime % 60;\r\n\r\n seg.title = title ?? ttl;\r\n seg.startTime = parseInt(minutes ?? min) * 60 + parseInt(seconds ?? sec);\r\n\r\n let segmentsCopy = [...segments];\r\n segmentsCopy.splice(idx, 1, seg);\r\n setSegments(segmentsCopy);\r\n }\r\n }\r\n\r\n function deleteSegment(segment) {\r\n const idx = segments.indexOf(segment);\r\n if (idx !== -1) {\r\n let segmentsCopy = [...segments];\r\n segmentsCopy.splice(idx, 1);\r\n setSegments(segmentsCopy);\r\n }\r\n }\r\n\r\n function addNewProduct() {\r\n if (newProductName && newProductName != '' && !availableProducts.find(x => x.content === newProductName) && !selectedProducts.find(x => x.content === newProductName)) {\r\n let data = new FormData();\r\n data.append(\"json\", JSON.stringify({ name: newProductName }));\r\n \r\n fetch(Utils.getProductsUrl(props.instance.id, props.client.id), {\r\n method: 'POST',\r\n body: data\r\n }).then(response => response.json()).then((response) => {\r\n let products = [...selectedProducts];\r\n products.push(response);\r\n setSelectedProducts(products);\r\n });\r\n }\r\n setNewProductName('');\r\n }\r\n\r\n function addNewPlaylist() {\r\n if (newPlaylistName && newPlaylistName != '' && !playlists.find(x => x.name === newPlaylistName)) {\r\n setIsBusy(true);\r\n fetch(Utils.getPlaylistsUrl(props.instance.id, props.client.id), Utils.createRequest('POST', { name: newPlaylistName })).then(response => response.json().then(data => {\r\n setIsBusy(false);\r\n let pl = [...selectedPlaylists];\r\n let playlist = data.playlists.find(x => x.name === newPlaylistName);\r\n playlist = Utils.processPlaylist(playlist, props.client, props.client.__clips);\r\n pl.push(playlist);\r\n setSelectedPlaylists(pl);\r\n setNewPlaylistName('');\r\n props.onPlaylistCreated(data);\r\n }));\r\n }\r\n }\r\n\r\n function moveClipInPlaylist(clipId, direction) {\r\n let lists = _.cloneDeep(playlists);\r\n const plIndex = lists.findIndex(x => x.id == selectedPlaylist.id);\r\n\r\n let clips = [...lists[plIndex].clips];\r\n let idx = clips.findIndex(x => x.id === clipId);\r\n if (direction === -1)\r\n [clips[idx - 1], clips[idx]] = [clips[idx], clips[idx - 1]];\r\n else\r\n [clips[idx + 1], clips[idx]] = [clips[idx], clips[idx + 1]];\r\n lists[plIndex].clips = clips;\r\n let selPlaylistCopy = _.cloneDeep(selectedPlaylist);\r\n selPlaylistCopy.clips = clips;\r\n setSelectedPlaylist(selPlaylistCopy);\r\n setPlaylists(lists);\r\n }\r\n\r\n function updateEditingItem(field, value) {\r\n let obj = editingItem;\r\n if (field.indexOf('.') === -1) {\r\n editingItem[field] = value;\r\n } else {\r\n let fields = field.split('.');\r\n let existTest = obj;\r\n fields.map(x => {\r\n if (existTest[x] === undefined) existTest[x] = {};\r\n existTest = existTest[x];\r\n });\r\n const lastField = fields[fields.length - 1];\r\n fields = _.take(fields, fields.length - 1);\r\n fields.map(x => obj = obj[x]);\r\n obj[lastField] = value;\r\n }\r\n forceUpdate();\r\n }\r\n\r\n function showAddProductModal() {\r\n setNewProductEditingItem({ name: '', comments: ''});\r\n setAddProductModalOpen(true);\r\n }\r\n\r\n function newProductAdded(product) {\r\n let prods = [...selectedProducts];\r\n prods.push(product);\r\n setSelectedProducts(prods);\r\n setAddProductModalOpen(false);\r\n }\r\n\r\n function toggleTagSelected(tag)\r\n {\r\n let availProds = [...availableProducts];\r\n let selProds = [...selectedProducts];\r\n let availIdx = availableProducts.indexOf(tag);\r\n if (availIdx !== -1) {\r\n availProds.splice(availIdx, 1);\r\n selProds.push(tag);\r\n } else {\r\n selProds.splice(selProds.indexOf(tag), 1);\r\n availProds.push(tag);\r\n }\r\n setAvailableProducts(availProds);\r\n setSelectedProducts(selProds);\r\n }\r\n\r\n function togglePlaylistSelected(playlist)\r\n {\r\n let availPlLists = [...availablePlaylists];\r\n let selPlLists = [...selectedPlaylists];\r\n let availIdx = availablePlaylists.indexOf(playlist);\r\n\r\n if (availIdx !== -1) {\r\n availPlLists.splice(availIdx, 1);\r\n selPlLists.push(playlist);\r\n } else {\r\n selPlLists.splice(selPlLists.indexOf(playlist), 1);\r\n availPlLists.push(playlist);\r\n }\r\n setAvailablePlaylists(availPlLists);\r\n setSelectedPlaylists(selPlLists);\r\n }\r\n\r\n function toggleTranslatedClientClip(client, clip) {\r\n let clone = _.cloneDeep(translatedClientClips);\r\n const idx = clone.findIndex(x => x.id == client.id);\r\n\r\n if (idx != -1) {\r\n clone.splice(idx, 1);\r\n }\r\n if (clip) {\r\n let clientClone = {...client};\r\n clientClone.clip = {...clip};\r\n clone.push(clientClone);\r\n }\r\n\r\n setTranslatedClientClips(clone);\r\n }\r\n\r\n function isClientGroupClipSelected(client, clip) {\r\n const clp = translatedClientClips.find(x => x.id == client.id);\r\n return clp?.clip?.id == clip.id;\r\n }\r\n\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n

{props.view === 'createClipView' ? \"Create video\" : \"Edit video\"}

\r\n
\r\n
\r\n\r\n {useTabs &&\r\n setActiveTab(tab)} />\r\n }\r\n \r\n\r\n\r\n
{ ev.preventDefault(); return false; }}>\r\n \r\n \r\n \r\n {(!useTabs || activeTab === tabVideo) &&\r\n
\r\n {!useTabs &&\r\n

{tabVideo.name}

\r\n }\r\n\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n Upload video\r\n
\r\n\r\n setVideoFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload a video\r\n \r\n \r\n

or drag and drop

\r\n
\r\n

MP4

\r\n
\r\n
\r\n )} \r\n
\r\n\r\n {(videoFile || hasExistingVideo) &&\r\n { setHasExistingVideo(false); setVideoFile(null); setVideoFileRemoved(true); setVideoThumbFileRemoved(true); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove file\r\n \r\n }\r\n
\r\n
\r\n
\r\n Video preview\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {[...segments].sort((a, b) => a.startTime < b.startTime ? -1 : 1).map((seg) => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n Start time\r\n \r\n Segment name\r\n \r\n
\r\n
\r\n setSegmentDetails(seg, null, e.target.value) }\r\n >\r\n {minutes.map(x => \r\n \r\n )}\r\n \r\n
\r\n :\r\n
\r\n setSegmentDetails(seg, null, null, e.target.value) }\r\n >\r\n {seconds.map(x => \r\n \r\n )}\r\n \r\n
\r\n
\r\n setSegmentDetails(seg, e.target.value) }\r\n />\r\n \r\n deleteSegment(seg)} className=\"text-red-600 cursor-pointer\" />\r\n
\r\n\r\n
\r\n
\r\n
\r\n setNewSegmentMinutes(ev.target.value) }\r\n >\r\n \r\n {minutes.map(x => \r\n \r\n )}\r\n \r\n
\r\n :\r\n
\r\n setNewSegmentSeconds(ev.target.value) }\r\n >\r\n \r\n {seconds.map(x => \r\n \r\n )}\r\n \r\n
\r\n\r\n setNewSegmentName(e.target.value) }\r\n onKeyPress={(ev) => { if(ev.key === 'Enter') addNewSegment() }}\r\n />\r\n
\r\n\r\n \r\n addNewSegment()} className=\"\" />\r\n \r\n
\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Landscape\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n\r\n {landscapeThumb &&\r\n { setLandscapeThumb(null); setLandscapeThumbFile(null); setLandscapeThumbFileRemoved(true); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove file\r\n \r\n }\r\n\r\n setLandscapeThumbFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload an image\r\n or drag and drop\r\n \r\n \r\n
\r\n

PNG, JPG or GIF

\r\n
\r\n \r\n
\r\n )} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Portrait / small screens\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n\r\n {portraitThumb &&\r\n { setPortraitThumb(null); setPortraitThumbFile(null); setPortraitThumbFileRemoved(true); }}\r\n className=\"block mt-2 mx-auto bg-white py-2 px-4 border border-red-600 rounded-md shadow-sm text-sm font-medium text-red-600 hover:text-white hover:bg-red-700 focus:outline-none\"\r\n >\r\n \r\n Remove file\r\n \r\n }\r\n\r\n setPortraitThumbFile(files[0])}>\r\n {({getRootProps, getInputProps}) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n Upload an image\r\n or drag and drop\r\n \r\n
\r\n

PNG, JPG or GIF

\r\n
\r\n \r\n
\r\n )} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n \r\n {(!useTabs || activeTab === tabGeneral) &&\r\n
\r\n {!useTabs &&\r\n

{tabGeneral.name}

\r\n }\r\n
\r\n \r\n
\r\n
\r\n

\r\n {editingItem?.url}\r\n

\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('name', e.target.value) }\r\n />\r\n
\r\n\r\n
\r\n
\r\n updateEditingItem('titleOnThumbnailHidden', e.target.checked) }\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n {/*
\r\n \r\n\r\n\r\n
\r\n
\r\n updateEditingItem('title', e.target.value) }\r\n />\r\n
\r\n\r\n
\r\n
\r\n updateEditingItem('titleOnThumbnailHidden', e.target.checked) }\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
*/}\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('description', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n }\r\n\r\n {(!useTabs || activeTab === tabPublish) &&\r\n
\r\n {!useTabs &&\r\n

{tabPublish.name}

\r\n }\r\n
\r\n \r\n
\r\n updateEditingItem('isPublished', isOn)} />\r\n {/*
\r\n updateEditingItem('isPublished', e.target.checked) }\r\n />\r\n
*/}\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n updateEditingItem('datePublishedFrom', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n updateEditingItem('datePublishedTo', e.target.value) }\r\n />\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n
\r\n }\r\n {(!useTabs || activeTab === tabProducts) &&\r\n
\r\n {!useTabs &&\r\n

{tabProducts.name}

\r\n }\r\n
\r\n {/* */}\r\n
\r\n
\r\n
\r\n
\r\n Available\r\n
\r\n
    \r\n {availableProducts.map(x => {\r\n return (\r\n
  • \r\n
    \r\n {x.name}\r\n
    \r\n
    toggleTagSelected(x)}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n {/*
\r\n (\r\n
toggleTagSelected(tag)} className=\"m-1 rounded-md text-sm py-0 px-2 text-gray-600 bg-gray-200 border border-gray-300 text-center cursor-drag\">\r\n {tag.name}\r\n
\r\n )}\r\n onChange={products => setAvailableProducts(products)}\r\n />\r\n
*/}\r\n
\r\n
\r\n
\r\n Selected\r\n
\r\n
    \r\n {selectedProducts.map(x => {\r\n return (\r\n
  • \r\n
    toggleTagSelected(x)}>\r\n \r\n
    \r\n
    \r\n {x.name}\r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n\r\n {/*
\r\n (\r\n
toggleTagSelected(tag)} className=\"m-1 rounded-md text-sm py-0 px-2 text-gray-600 bg-gray-200 border border-gray-300 text-center cursor-drag\">\r\n {tag.name}\r\n
\r\n )}\r\n onChange={products => setSelectedProducts(products)}\r\n />\r\n
*/}\r\n
\r\n {/*
\r\n
\r\n setNewProductName(e.target.value) }\r\n onKeyPress={(ev) => { if(ev.key === 'Enter') addNewProduct(); }}\r\n />\r\n
*/}\r\n\r\n { showAddProductModal(); addNewProduct();}} \r\n className=\"w-full flex items-center justify-center space-x-2 px-4 py-2 border-t border-l border-gray-300 text-sm font-medium rounded-br-md text-gray-700 bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500\"\r\n >\r\n \r\n

Create new product (disabled)

\r\n \r\n {/*
*/}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n }\r\n {(!useTabs || activeTab === tabPlaylists) &&\r\n
\r\n {!useTabs &&\r\n

{tabPlaylists.name}

\r\n }\r\n
\r\n
\r\n
\r\n Not included in\r\n
\r\n
    \r\n {(availablePlaylists || []).map(x => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {x.name}\r\n
    \r\n
    togglePlaylistSelected(x)} className=\"bg-gray-100 px-3 py-1\">\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n\r\n {/*
\r\n (\r\n
\r\n {tag.name}\r\n
\r\n )}\r\n onChange={playlists => setAvailablePlaylists(playlists)}\r\n />\r\n
*/}\r\n\r\n\r\n
\r\n
\r\n
\r\n setNewPlaylistName(e.target.value) }\r\n onKeyPress={(ev) => { if(ev.key === 'Enter') addNewPlaylist() }}\r\n />\r\n
\r\n\r\n \r\n addNewPlaylist()} className=\"\" />\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n Included in\r\n
\r\n\r\n
    \r\n {(selectedPlaylists || []).map(x => {\r\n return (\r\n
  • \r\n
    togglePlaylistSelected(x)} className={`${x.id === selectedPlaylist?.id ? 'bg-blue-200' : 'bg-gray-100'} px-3 py-1`}>\r\n \r\n
    \r\n
    setSelectedPlaylist(x)} className={`${x.id === selectedPlaylist?.id ? 'bg-blue-100' : 'bg-gray-50'} flex-1 px-3 py-1 space-x-3`}>\r\n \r\n {x.name}\r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n {/*
\r\n (\r\n
{ setSelectedPlaylist(tag);}} \r\n className={`${tag === selectedPlaylist ? 'bg-blue-200 ' : 'bg-gray-200 '} m-1 rounded-md text-sm py-0 px-2 text-gray-600 border border-gray-300 text-center cursor-drag`}>\r\n {tag.name}\r\n
\r\n )}\r\n onChange={(playlists) => setSelectedPlaylists(playlists)}\r\n />\r\n
*/}\r\n
\r\n\r\n
\r\n
\r\n Videos in selected playlist\r\n
\r\n\r\n {/*
\r\n setSelectedPlaylistClips(updatedList) } \r\n />\r\n
*/}\r\n\r\n
\r\n (\r\n
\r\n
\r\n
\r\n {index + 1}\r\n
\r\n
\r\n
\r\n \r\n {tag.name}\r\n
\r\n
\r\n )}\r\n onChange={clips => setSelectedPlaylistClips(clips)}\r\n />\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n }\r\n\r\n {(!useTabs || activeTab === tabPlaylists) && props.client.clientGroupId && clientGroupClips.length > 0 &&\r\n
\r\n {!useTabs &&\r\n

{tabTranslations.name}

\r\n }\r\n
\r\n\r\n
\r\n
\r\n Other clients in group\r\n
\r\n
    \r\n {clientGroupClips.map(client => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {client.name} ({client.culture})\r\n
    \r\n
    setSelectedClientGroupClient(client)} className={`${client.id === selectedClientGroupClient?.id ? 'text-blue-400' : 'text-gray-400'} px-3 py-1`}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Videos in client\r\n
\r\n
    \r\n {selectedClientGroupClient && [...selectedClientGroupClient.__clips].sort((a, b) => a.name < b.name ? -1 : 1).map(clip => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {clip.name}\r\n
    \r\n
    toggleTranslatedClientClip(selectedClientGroupClient, clip)} className={`${isClientGroupClipSelected(selectedClientGroupClient, clip) ? 'text-blue-400' : 'text-gray-400'} px-3 py-1`}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n \r\n
\r\n
\r\n Selected translations\r\n
\r\n
    \r\n {translatedClientClips.map(client => {\r\n return (\r\n
  • \r\n
    toggleTranslatedClientClip(client, null)} className=\"bg-gray-100 px-3 py-1\">\r\n \r\n
    \r\n
    \r\n \r\n ({client.culture}) {client.clip.name}\r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n
\r\n
\r\n {props.view === 'editClipView' &&\r\n !isBusy && deleteClip(editingItem)}\r\n className={`bg-red-600 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-white hover:bg-red-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Delete\r\n \r\n }\r\n
\r\n !isBusy && resetViewToBrowse()}\r\n className={`bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n Cancel\r\n \r\n !isBusy && saveClip(editingItem)}\r\n className={`ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save\r\n \r\n !isBusy && saveClip(editingItem, true)}\r\n className={`ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save and exit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n alert('onClosed')}>\r\n newProductAdded(item)} onDeleted={(item) => props.deleteProduct(item)} onDone={() => setAddProductModalOpen(false)} />\r\n {/*
\r\n setAddProductModalOpen(false)}\r\n >\r\n \r\n Add product\r\n \r\n setAddProductModalOpen(false)}\r\n >\r\n Cancel\r\n \r\n
*/}\r\n\r\n
\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default (props) => {\r\n\r\n return (\r\n <>\r\n {props.items && props.items.length > 3 &&\r\n
\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add product\r\n \r\n
\r\n }\r\n
\r\n
    \r\n {props.items && [...props.items].sort((a, b) => a.name.localeCompare(b.name, undefined, {sensitivity: 'base'})).map((product) => (\r\n
  • \r\n\r\n\r\n\r\n
    { props.onSelected(product); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === product.id ? \"bg-blue-50\" : \"\"}`}>\r\n
    \r\n
    \r\n {product.existingImageUrl && \r\n \"\"\r\n }\r\n {!product.existingImageUrl && \r\n
    \r\n \r\n
    \r\n }\r\n
    \r\n
    \r\n

    {product.name?.length > 0 ? product.name : '(Untitled product)'}

    \r\n {product.comments && product.comments !== '' &&\r\n

    {product.comments}

    \r\n }\r\n
    \r\n {/*
    \r\n
    \r\n

    \r\n {instance.clients.length} Client{instance.clients.length === 1 ? '' : 's'}\r\n

    \r\n
    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n { props.onEditClicked(product); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
  • \r\n ))}\r\n\r\n {props.items && props.items.length === 0 &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n No products created yet. Click Add product to create one. \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n {!props.items &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n \r\n Loading... \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n {props.items &&\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add product\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport QRSticker from \"./QRSticker\";\r\nimport _ from \"lodash\";\r\n\r\nexport default (props) => {\r\n const [stickers, setStickers] = useState([]);\r\n\r\n useEffect(() => {\r\n if (props.client.properties?.qr_sticker_backdrops) {\r\n const backdrops = props.client.properties.qr_sticker_backdrops?.split(',');\r\n const overlays = props.client.properties.qr_sticker_overlays?.split(',');\r\n const colors = props.client.properties.qr_sticker_colors?.split(',');\r\n const widths = props.client.properties.qr_sticker_widths?.split(',');\r\n const heights = props.client.properties.qr_sticker_heights?.split(',');\r\n const sizes = props.client.properties.qr_sticker_sizes?.split(',');\r\n const transforms = props.client.properties.qr_sticker_transforms?.split(',');\r\n let stickerArray = [];\r\n for(let i = 0; i < backdrops.length; i++) {\r\n stickerArray.push({ \r\n backdrop: backdrops[i], \r\n overlay: overlays[i], \r\n color: colors[i],\r\n width: widths[i],\r\n height: heights[i],\r\n size: sizes[i],\r\n transform: transforms[i]\r\n });\r\n }\r\n setStickers(stickerArray);\r\n } else {\r\n setStickers([\r\n { \r\n backdrop: '/qrlogos/generic_qrsticker_bg.svg', \r\n overlay: '/qrlogos/generic_qrsticker_overlay.svg', \r\n color: '#000000',\r\n width: 475,\r\n height: 259,\r\n size: 173,\r\n transform: 't255 43'\r\n }\r\n ]);\r\n }\r\n }, []);\r\n\r\n function getServerUrl() {\r\n return window.location.protocol + '//' + window.location.host;\r\n }\r\n\r\n function getFullUrl(itemUrl) {\r\n const url = window.location.protocol + '//' + window.location.host;\r\n return `${url}/${getRelativeUrl(itemUrl)}`;\r\n }\r\n \r\n function getRelativeUrl(itemUrl) {\r\n return `prod/${props.client.customUrl}/${itemUrl}`;\r\n }\r\n\r\n function getQrLinkUrl(qrLink) {\r\n return `qr/r/${qrLink}`;\r\n }\r\n \r\n function getQrLinkFullUrl(qrLink) {\r\n return `${getServerUrl()}/qr/r/${qrLink}`;\r\n }\r\n\r\n function getQrValue(client, qrLink) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/${getQrLinkUrl(qrLink)}`;\r\n }\r\n return getQrLinkFullUrl(qrLink);\r\n }\r\n\r\n function getItemUrl(client, item) {\r\n if (item.moreInfoUrl) return item.moreInfoUrl;\r\n if (item.shopUrl) return item.shopUrl;\r\n\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/prod/${item.url}`;\r\n }\r\n \r\n return getFullUrl(item.url);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{props.item?.name}

\r\n { props.onEditClicked(props.item); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
Product URL
\r\n
{getItemUrl(props.client, props.item)}
\r\n
\r\n\r\n
\r\n
Product QR Link
\r\n
{getQrValue(props.client, props.item.qrLink)}
\r\n
\r\n\r\n {stickers && stickers.map((sticker, index) => {\r\n return (\r\n
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n })}\r\n\r\n\r\n {/* \r\n
\r\n
QR Code
\r\n
\r\n \r\n\r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {/* {props.links.map((section) => (\r\n { props.onSectionSelected(section); ev.stopPropagation(); }}\r\n className='text-indigo-700 hover:text-indigo-900 group flex items-center py-2 text-base font-medium mr-5 cursor-pointer'\r\n >\r\n \r\n {section.name}\r\n \r\n ))} */}\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport {DraggableArea} from 'react-draggable-tags'; //https://ygyooo.github.io/react-draggable-tags/\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Utils from '../Utils/Utils';\r\n\r\nexport default (props) => {\r\n const[playlists, setPlaylists] = useState([]);\r\n\r\n useEffect(() => {\r\n if (props?.items) {\r\n setPlaylists(props.items);\r\n }\r\n }, [props]);\r\n\r\n function setPlaylistsOrder(playlists) {\r\n console.log(playlists);\r\n setPlaylists(playlists);\r\n savePlaylistsOrder(playlists);\r\n }\r\n\r\n function savePlaylistsOrder(playlists) {\r\n const data = {\r\n playlistIds: playlists.map(x => x.id)\r\n };\r\n\r\n const request = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n }\r\n fetch(Utils.getSetPlaylistsOrderUrl(props.instance.id, props.client.id), request)\r\n .then(response => response.json().then(data => {\r\n props.onOrderChanged(data);\r\n }\r\n )); \r\n // fetch(Utils.getSetPlaylistsOrderUrl(props.instance.id, props.client.id), {\r\n // method: 'POST',\r\n // body: JSON.stringify({ playlists: playlists } )\r\n // }).then(response => response.json()).then(response => {\r\n // console.log(\"klart\");\r\n // });\r\n }\r\n\r\n\r\n\r\n return (\r\n <>\r\n {playlists.length > 3 &&\r\n
\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add playlist\r\n \r\n
\r\n }\r\n
\r\n\r\n (\r\n
{ props.onSelected(tag); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === tag.id ? \"bg-blue-50\" : \"\"}`}>\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{tag.name?.length > 0 ? tag.name : '(Untitled playlist)'}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n { props.onEditClicked(tag); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n onChange={(tags) => setPlaylistsOrder(tags)}\r\n /> \r\n\r\n {/*
    \r\n {playlists.map((playlist) => (\r\n
  • \r\n \r\n \r\n \r\n
    { props.onSelected(playlist); ev.stopPropagation(); }} className={`cursor-pointer block hover:bg-gray-50 px-4 py-4 flex items-center sm:px-6 ${props.selected?.id === playlist.id ? \"bg-blue-50\" : \"\"}`}>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {playlist.name?.length > 0 ? playlist.name : '(Untitled playlist)'}

    \r\n {playlist.comments && playlist.comments !== '' &&\r\n

    {playlist.comments}

    \r\n }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n { props.onEditClicked(playlist); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-indigo-600 shadow-sm text-sm font-medium rounded-md text-indigo-600 hover:text-white hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
  • \r\n ))}\r\n\r\n {playlists.length === 0 &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n No playlists created yet. Click Add playlist to create one. \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n {!props.items &&\r\n
  • \r\n
    \r\n
    \r\n

    \r\n \r\n Loading... \r\n

    \r\n
    \r\n
    \r\n
  • \r\n }\r\n\r\n\r\n
*/}\r\n
\r\n \r\n
\r\n {props.items &&\r\n { props.onCreateClicked(); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Add playlist\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport QRSticker from \"./QRSticker\";\r\nimport _ from \"lodash\";\r\n\r\nexport default (props) => {\r\n const [stickers, setStickers] = useState([]);\r\n\r\n useEffect(() => {\r\n if (props.client.properties?.qr_sticker_backdrops) {\r\n const backdrops = props.client.properties.qr_sticker_backdrops?.split(',');\r\n const overlays = props.client.properties.qr_sticker_overlays?.split(',');\r\n const colors = props.client.properties.qr_sticker_colors?.split(',');\r\n const widths = props.client.properties.qr_sticker_widths?.split(',');\r\n const heights = props.client.properties.qr_sticker_heights?.split(',');\r\n const sizes = props.client.properties.qr_sticker_sizes?.split(',');\r\n const transforms = props.client.properties.qr_sticker_transforms?.split(',');\r\n let stickerArray = [];\r\n for(let i = 0; i < backdrops.length; i++) {\r\n stickerArray.push({ \r\n backdrop: backdrops[i], \r\n overlay: overlays[i], \r\n color: colors[i],\r\n width: widths[i],\r\n height: heights[i],\r\n size: sizes[i],\r\n transform: transforms[i]\r\n });\r\n }\r\n setStickers(stickerArray);\r\n } else {\r\n setStickers([\r\n { \r\n backdrop: '/qrlogos/generic_qrsticker_bg.svg', \r\n overlay: '/qrlogos/generic_qrsticker_overlay.svg', \r\n color: '#000000',\r\n width: 475,\r\n height: 259,\r\n size: 173,\r\n transform: 't255 43'\r\n }\r\n ]);\r\n }\r\n }, []);\r\n\r\n function getServerUrl() {\r\n return window.location.protocol + '//' + window.location.host;\r\n }\r\n\r\n function getFullUrl(itemUrl) {\r\n const url = window.location.protocol + '//' + window.location.host;\r\n return `${url}/${getRelativeUrl(itemUrl)}`;\r\n }\r\n \r\n function getRelativeUrl(itemUrl) {\r\n return `p/${props.client.customUrl}/${itemUrl}`;\r\n }\r\n\r\n function getQrLinkUrl(qrLink) {\r\n return `qr/r/${qrLink}`;\r\n }\r\n \r\n function getQrLinkFullUrl(qrLink) {\r\n return `${getServerUrl()}/qr/r/${qrLink}`;\r\n }\r\n\r\n function getCustomDomainWithProtocol() {\r\n if (!props.client.customDomain) return null;\r\n return `https://${props.client.customDomain}`;\r\n }\r\n\r\n function getQrValue(client, qrLink) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/${getQrLinkUrl(qrLink)}`;\r\n }\r\n return getQrLinkFullUrl(qrLink);\r\n }\r\n\r\n function getItemUrl(client, item) {\r\n if (client.customDomain) {\r\n return `https://${client.customDomain}/p/${item.url}`;\r\n }\r\n \r\n return getFullUrl(item.url);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{props.item?.name}

\r\n { props.onEditClicked(props.item); ev.stopPropagation(); }}\r\n className=\"inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none\"\r\n >\r\n \r\n Edit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
Playlist URL
\r\n
{getItemUrl(props.client, props.item)}
\r\n
\r\n\r\n
\r\n
Playlist QR Link
\r\n
{getQrValue(props.client, props.item.qrLink)}
\r\n
\r\n\r\n {stickers && stickers.map((sticker, index) => {\r\n return (\r\n
\r\n
QR Code
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n })}\r\n\r\n {/*
\r\n
QR Code
\r\n
\r\n \r\n\r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {/* {props.links.map((section) => (\r\n { props.onSectionSelected(section); ev.stopPropagation(); }}\r\n className='text-indigo-700 hover:text-indigo-900 group flex items-center py-2 text-base font-medium mr-5 cursor-pointer'\r\n >\r\n \r\n {section.name}\r\n \r\n ))} */}\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {DraggableAreasGroup} from 'react-draggable-tags'; //https://ygyooo.github.io/react-draggable-tags/\r\nimport _ from \"lodash\";\r\nimport Tabs from './Tabs';\r\nimport Utils from '../Utils/Utils';\r\n\r\nconst group = new DraggableAreasGroup();\r\nconst ClipsDraggableAreaFrom = group.addArea(); \r\nconst ClipsDraggableAreaTo = group.addArea(); \r\n\r\nconst tabGeneral = { name: 'General' };\r\nconst tabClips = { name: 'Videos' };\r\nconst tabTranslations = { name: 'Translations' };\r\nconst tabs = [tabGeneral, tabClips, tabTranslations];\r\n\r\nexport default (props) => {\r\n const [, updateState] = React.useState();\r\n const forceUpdate = useCallback(() => updateState({}), []);\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [activeTab, setActiveTab] = useState(tabGeneral);\r\n const [initialClips, setInitialClips] = useState([]);\r\n const [clientClips, setClientClips] = useState([]);\r\n const [availableClips, setAvailableClips] = useState([]);\r\n const [selectedClips, setSelectedClips] = useState([]);\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n const [clientGroupPlaylists, setClientGroupPlaylists] = useState([]);\r\n const [selectedClientGroupClient, setSelectedClientGroupClient] = useState();\r\n const [translatedClientPlaylists, setTranslatedClientPlaylists] = useState([]);\r\n\r\n\r\n useEffect(() => {\r\n if (props?.item) {\r\n setEditingItem(props.item);\r\n // setInitialClips(props.item.clips);\r\n //loadPlaylist(props.instanceId, props.clientId, props.item.id);\r\n setInitialClips(props.item.__clips);\r\n setClientClips(props.client.__clips);\r\n //loadClientClips(props.instanceId, props.clientId);\r\n }\r\n\r\n if (props.instance?.id && props.client?.clientGroupId) {\r\n Utils.loadClientGroupPlaylists(props.instance.id, props.client.clientGroupId, props.client.id).then(response => response.json().then(data => {\r\n //setInstances(data);\r\n data.clients.map(client => {\r\n client.__playlists = data.playlists.filter(playlist => playlist.clientId == client.id && !playlist.playlistGroupId);\r\n });\r\n setClientGroupPlaylists(data.clients);\r\n console.log(data.clients);\r\n if (props.item.playlistGroupId) {\r\n let translated = [];\r\n data.playlists.filter(x => x.playlistGroupId == props.item.playlistGroupId && x.id != props.item.id).map(x => {\r\n let clientClone = {...data.clients.find(client => client.id == x.clientId)};\r\n let playlistClone = {...x};\r\n clientClone.playlist = playlistClone;\r\n translated.push(clientClone);\r\n });\r\n setTranslatedClientPlaylists(translated);\r\n }\r\n }).catch((err) => {\r\n if (response.status === 403) {\r\n //setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n } else {\r\n //setErrorModalText(`Could not load data: ${err}`);\r\n }\r\n }));\r\n }\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n if(clientClips) {\r\n if (initialClips && initialClips.length > 0) {\r\n setAvailableClips(clientClips.filter(x => !initialClips.find(selClip => selClip.id === x.id)));\r\n // let selClips = clientClips.filter(x => initialClips.find(selClip => selClip.id === x.id));\r\n // _.forEach(selClips, function(o) { \r\n // o.order = initialClips.find(x => x.id === o.id).order;\r\n // });\r\n // selClips.sort(function(a, b) { return a.order < b.order ? -1 : 1})\r\n setSelectedClips(initialClips);\r\n } else {\r\n setAvailableClips(clientClips);\r\n setSelectedClips([]);\r\n }\r\n }\r\n }, [clientClips, initialClips]);\r\n\r\n useEffect(() => {\r\n if(editingItem && selectedClips) {\r\n let item = _.cloneDeep(editingItem);\r\n item.clips = selectedClips;\r\n selectedClips.map(x => { console.log(x.name)});\r\n setEditingItem(item);\r\n }\r\n }, [selectedClips]);\r\n\r\n // function loadClientClips(instanceId, clientId) {\r\n // Utils.loadClips(instanceId, clientId).then(response => response.json().then(data => {\r\n // setClientClips(data);\r\n // }));\r\n // }\r\n\r\n // function loadPlaylist(instanceId, clientId, playlistId) {\r\n // Utils.loadPlaylist(instanceId, clientId, playlistId).then(response => response.json().then(data => {\r\n // setEditingItem(data);\r\n // setInitialClips(data.clips);\r\n // }));\r\n // }\r\n\r\n function savePlaylist(playlist, saveAndExit = false) {\r\n if (playlist.name.trim() == '') {\r\n alert(\"Please provide a name for the playlist.\");\r\n return;\r\n }\r\n\r\n const isCreating = playlist?.id == null;\r\n const url = Utils.getPlaylistsUrl(props.instance.id, props.client.id) + (!isCreating ? `/${playlist.id}` : '');\r\n\r\n let model = Utils.sanitizeObject(playlist);\r\n model.clipDTOs = selectedClips.map(clip => { \r\n return {\r\n id: clip.id\r\n }\r\n });\r\n model.clipIds = selectedClips.map(x => x.id);\r\n\r\n if (translatedClientPlaylists.length > 0) {\r\n model.playlistGroups = translatedClientPlaylists.map(x => {\r\n return { \r\n clientId: x.id, \r\n itemId: x.playlist.id \r\n };\r\n });\r\n model.playlistGroups.push({ \r\n clientId: props.client.id, \r\n itemId: props.item.id \r\n });\r\n }\r\n\r\n\r\n const request = {\r\n method: isCreating ? 'POST' : 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(model)\r\n }\r\n setIsBusy(true);\r\n fetch(url, request).then(response => response.json().then(data => {\r\n setIsBusy(false);\r\n props.onSaved(data, saveAndExit);\r\n }));\r\n\r\n }\r\n\r\n function deletePlaylist(playlist) {\r\n if (window.confirm(\"Are you sure?\")) {\r\n setIsBusy(true);\r\n fetch(Utils.getPlaylistUrl(props.instance.id, props.client.id, playlist.id), Utils.createRequest('DELETE')).then(response => response.json().then((data) => {\r\n setIsBusy(false);\r\n props.onDeleted(data);\r\n }));\r\n }\r\n }\r\n\r\n function resetViewToBrowse() {\r\n props.onDone();\r\n }\r\n\r\n function updateEditingItem(field, value) {\r\n let obj = editingItem;\r\n if (field.indexOf('.') === -1) {\r\n editingItem[field] = value;\r\n } else {\r\n let fields = field.split('.');\r\n const lastField = fields[fields.length - 1];\r\n fields = _.take(fields, fields.length - 1);\r\n fields.map(x => obj = obj[x]);\r\n obj[lastField] = value;\r\n }\r\n forceUpdate();\r\n }\r\n\r\n function toggleTranslatedClientPlaylist(client, playlist) {\r\n let clone = _.cloneDeep(translatedClientPlaylists);\r\n const idx = clone.findIndex(x => x.id == client.id);\r\n\r\n if (idx != -1) {\r\n clone.splice(idx, 1);\r\n }\r\n if (playlist) {\r\n let clientClone = {...client};\r\n clientClone.playlist = {...playlist};\r\n clone.push(clientClone);\r\n }\r\n\r\n setTranslatedClientPlaylists(clone);\r\n }\r\n\r\n function isClientGroupPlaylistSelected(client, playlist) {\r\n const pl = translatedClientPlaylists.find(x => x.id == client.id);\r\n return pl?.playlist?.id == playlist.id;\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n

{props.view === 'createPlaylistView' ? \"Create playlist\" : \"Edit playlist\"}

\r\n
\r\n
\r\n\r\n setActiveTab(tab)} /> \r\n\r\n\r\n
{ ev.preventDefault(); return false; }}>\r\n {activeTab === tabGeneral &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n updateEditingItem('name', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n updateEditingItem('description', e.target.value) }\r\n />\r\n
\r\n
\r\n\r\n {/*
\r\n \r\n
\r\n
\r\n updateEditingItem('title', e.target.value) }\r\n\r\n />\r\n
\r\n
\r\n
*/}\r\n\r\n
\r\n }\r\n\r\n {activeTab === tabClips && \r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n Available\r\n
\r\n (\r\n
\r\n {tag.name}\r\n
\r\n )}\r\n onChange={clips => setAvailableClips(clips)}\r\n />\r\n
\r\n
\r\n
\r\n Selected\r\n
\r\n (\r\n
\r\n {index + 1}. {tag.name}\r\n
\r\n )}\r\n onChange={clips => setSelectedClips(clips)}\r\n />\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n // \r\n\r\n\r\n\r\n }\r\n\r\n\r\n\r\n\r\n {(activeTab === tabTranslations) && props.client.clientGroupId && clientGroupPlaylists.length > 0 &&\r\n
\r\n

{tabTranslations.name}

\r\n
\r\n\r\n
\r\n
\r\n Other clients in group\r\n
\r\n
    \r\n {clientGroupPlaylists.map(client => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {client.name} ({client.culture})\r\n
    \r\n
    setSelectedClientGroupClient(client)} className={`${client.id === selectedClientGroupClient?.id ? 'text-blue-400' : 'text-gray-400'} px-3 py-1`}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Playlists in client\r\n
\r\n
    \r\n {selectedClientGroupClient && [...selectedClientGroupClient.__playlists].sort((a, b) => a.name < b.name ? -1 : 1).map(playlist => {\r\n return (\r\n
  • \r\n
    \r\n \r\n {playlist.name}\r\n
    \r\n
    toggleTranslatedClientPlaylist(selectedClientGroupClient, playlist)} className={`${isClientGroupPlaylistSelected(selectedClientGroupClient, playlist) ? 'text-blue-400' : 'text-gray-400'} px-3 py-1`}>\r\n \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n \r\n
\r\n
\r\n Selected translations\r\n
\r\n
    \r\n {translatedClientPlaylists.map(client => {\r\n return (\r\n
  • \r\n
    toggleTranslatedClientPlaylist(client, null)} className=\"bg-gray-100 px-3 py-1\">\r\n \r\n
    \r\n
    \r\n \r\n ({client.culture}) {client.playlist.name}\r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n {props.view === 'editPlaylistView' &&\r\n !isBusy && deletePlaylist(editingItem)}\r\n className=\"bg-red-600 py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-white hover:bg-red-700 focus:outline-none\"\r\n disabled={isBusy} \r\n >\r\n \r\n Delete\r\n \r\n }\r\n
\r\n !isBusy && resetViewToBrowse()}\r\n className=\"bg-white py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none\"\r\n disabled={isBusy}\r\n >\r\n Cancel\r\n \r\n savePlaylist(editingItem)}\r\n className={`ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save\r\n \r\n !isBusy && savePlaylist(editingItem, true)}\r\n className={`ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none`}\r\n disabled={isBusy}\r\n >\r\n \r\n Save and exit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","export class PlayerUtils {\n \n getBaseUrl() { return '/api'; }\n\n getChannelsUrl() { return `${this.getBaseUrl()}/channels`; }\n getPlaylistsUrl() { return `${this.getBaseUrl()}/playlists`; }\n getClipsUrl() { return `${this.getBaseUrl()}/videos`; }\n \n getChannelUrl(channelUrl) { return `${this.getChannelsUrl()}/${channelUrl}`; }\n getSearchUrl(channelUrl) { return `${this.getChannelUrl(channelUrl)}/search`; }\n getPlaylistUrl(playlistUrl) { return `${this.getPlaylistsUrl()}/${playlistUrl}`; }\n getClipUrl(clipUrl) { return `${this.getClipsUrl()}/${clipUrl}`; }\n\n getPublicDataBaseUrl() { return '/api/public-data'; }\n getPublicDataChannelUrl(channelPid) { return `${this.getPublicDataBaseUrl()}/${channelPid}/channel`; }\n getPublicDataPlaylistUrl(channelPid, playlistPid) { return `${this.getPublicDataBaseUrl()}/${channelPid}/playlist/${playlistPid}`; }\n\n loadPublicDataChannel(channelPid) {\n return fetch(this.getPublicDataChannelUrl(channelPid));\n }\n\n\n\n\n loadChannel(channelUrl) {\n return fetch(this.getChannelUrl(channelUrl));\n }\n \n search(channelUrl, query) {\n return fetch(`${this.getSearchUrl(channelUrl)}?q=${query}`);\n }\n \n loadPlaylist(playlistUrl) {\n return fetch(this.getPlaylistUrl(playlistUrl));\n }\n \n loadClip(clipUrl) {\n return fetch(this.getClipUrl(clipUrl));\n }\n \n classNames(...classes) {\n return classes.filter(Boolean).join(' ');\n }\n\n getStyleElement(source) {\n var style = document.createElement('style');\n style.id = 'howtofystyles';\n style.innerHTML = \n `.howtofy-text-color { color: ${source.textColor} } `\n + `.howtofy-secondary-text-color { color: ${source.secondaryTextColor} } `\n + `.howtofy-border-color { border-color: ${source.textColor} } `\n + `.howtofy-secondary-border-color { border-color: ${source.secondaryTextColor} } `\n + `.howtofy-background-color { background-color: ${source.backgroundColor} } `\n + `.howtofy-banner-background-color { background-color: ${source.bannerBackgroundColor ?? source.backgroundColor} } `\n \n + `.howtofy-text-color-inverse { color: ${source.backgroundColor} } `\n + `.howtofy-border-color-inverse { border-color: ${source.backgroundColor} } `\n + `.howtofy-background-color-inverse { background-color: ${source.textColor} } `\n + '.opacity-fade { transition: opacity .5s ease-in-out; }'\n + '.opacity-fade-1500 { transition: opacity 1.5s ease-in-out; }'\n + '.animate-width { transition: width .25s linear; }'\n //+ '.animate-top { transition: top .5s linear; }'\n + '.dark-text-shadow { text-shadow: 1px 1px 1px rgb(0 0 0 / 50%) }'\n + '.aspect-16-9 { aspect-ratio: 16 / 9 }'\n + '.aspect-3-4 { aspect-ratio: 3 / 4 }'\n + '.aspect-square { aspect-ratio: 1 / 1 }'\n + '.vjs-big-play-button { display:none !important; }'\n //+ '.amp-flush-skin.amp-size-s .vjs-play-control { display:block !important; }'\n ;\n return style;\n }\n\n getFixedHeaderMenuItems() {\n return [\n [\n //{ title: \"About Howtofy\", href: \"https://www.howtofy.com/about\", target: \"_blank\" }\n ]\n ];\n }\n\n getSocMediaTypes() {\n return [\n { name: 'Instagram', icon: ['fab', 'instagram'] },\n { name: 'LinkedIn', icon: ['fab', 'linkedin-in'] },\n { name: 'Facebook', icon: ['fab', 'facebook'] },\n { name: 'Twitter', icon: ['fab', 'twitter'] },\n { name: 'Pinterest', icon: ['fab', 'pinterest'] }\n ];\n }\n\n getSocialMediaHeaderMenuItems(channels) {\n return [channels.map(channel => {\n return ({ \n title: channel.name, \n href: channel.url, \n icon: this.getSocMediaTypes().find(x => x.name === channel.type).icon,\n target: '_blank'\n });\n })];\n }\n \n getLegalHeaderMenuItems(clientUrl, sections) {\n let res = [];\n if (sections.termsAndConditions) {\n res.push({ \n title: \"Terms and Conditions\", \n href: `/legal/terms-and-conditions/${clientUrl}`, \n target: '_blank'\n });\n }\n if (sections.cookieTerms) {\n res.push({ \n title: \"Cookie Policy\", \n href: `/legal/cookie-policy/${clientUrl}`, \n target: '_blank'\n });\n }\n if (sections.privacyTerms) {\n res.push({ \n title: \"Privacy Policy\", \n href: `/legal/privacy-policy/${clientUrl}`, \n target: '_blank'\n });\n }\n return [res];\n }\n\n formatDuration(duration) {\n const min = Math.trunc(duration / 60);\n const sec = duration % 60;\n return `${min}:${Math.round(sec).toString().padStart(2, '0')}`;\n }\n\n processReferences(clientData) {\n clientData.playlists.map(playlist => {\n playlist.clips = playlist.clipPids.map(pid => clientData.clips.find(x => x.pid === pid));\n });\n\n clientData.products.map(product => {\n product.clips = product.clipPids.map(pid => clientData.clips.find(x => x.pid === pid));\n });\n\n clientData.clips.map(clip => {\n clip.playlists = clip.playlistPids.map(pid => clientData.playlists.find(x => x.pid === pid));\n clip.products = clip.productPids.map(pid => clientData.products.find(x => x.pid === pid));\n });\n\n return clientData;\n }\n\n}\n\nconst playerutils = new PlayerUtils();\n\nexport default playerutils;\n","/*\r\n This example requires Tailwind CSS v2.0+ \r\n \r\n This example requires some changes to your config:\r\n \r\n ```\r\n // tailwind.config.js\r\n module.exports = {\r\n // ...\r\n plugins: [\r\n // ...\r\n require('@tailwindcss/forms'),\r\n ],\r\n }\r\n ```\r\n*/\r\nimport React, { useState, useEffect, useReducer, Fragment } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport NavBar from './Navbar';\r\n\r\nimport InstanceList from './InstanceList';\r\nimport InstanceEditForm from './InstanceEditForm';\r\n\r\nimport ClientList from './ClientList';\r\nimport ClientDetails from './ClientDetails';\r\nimport ClientEditForm from './ClientEditForm';\r\n\r\nimport ClientGroupList from './ClientGroupList';\r\nimport ClientGroupEditForm from './ClientGroupEditForm';\r\n\r\nimport ClipList from './ClipList';\r\nimport ClipDetails from './ClipDetails';\r\nimport ClipEditForm from './ClipEditForm';\r\n\r\nimport ProductList from './ProductList';\r\nimport ProductDetails from './ProductDetails';\r\nimport ProductEditForm from './ProductEditForm';\r\n\r\nimport PlaylistList from './PlaylistList';\r\nimport PlaylistDetails from './PlaylistDetails';\r\nimport PlaylistEditForm from './PlaylistEditForm';\r\n\r\nimport Modal from './Modal';\r\n\r\nimport { Dialog, Menu, Transition } from '@headlessui/react'\r\nimport {\r\n BellIcon,\r\n CalendarIcon,\r\n ChartBarIcon,\r\n FolderIcon,\r\n HomeIcon,\r\n InboxIcon,\r\n MenuAlt2Icon,\r\n UsersIcon,\r\n XIcon,\r\n} from '@heroicons/react/outline'\r\nimport { SearchIcon } from '@heroicons/react/solid'\r\nimport _ from \"lodash\";\r\n\r\nimport Utils from '../Utils/Utils';\r\nimport PlayerUtils from '../Utils/PlayerUtils';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst dashboardSection = { name: 'Dashboard', icon: ['fas', 'home'] };\r\nconst instancesSection = { name: 'Instances', icon: ['fas', 'clone'] };\r\nconst clientsSection = { name: 'Clients', icon: ['fas', 'users'] };\r\nconst clientGroupsSection = { name: 'Client Groups', icon: ['fas', 'users'] };\r\nconst clientDetailsSection = { name: 'Client details', icon: ['fas', 'user'] };\r\nconst clipsSection = { name: 'Videos', icon: ['fas', 'video'] };\r\nconst playlistsSection = { name: 'Playlists', icon: ['fas', 'list'] };\r\nconst playlistDetailsSection = { name: 'Playlist details', icon: ['fas', 'list'] };\r\nconst productsSection = { name: 'Products', icon: ['fas', 'box-open'] };\r\nconst productDetailsSection = { name: 'Product details', icon: ['fas', 'box-open'] };\r\nconst clipDetailsSection = { name: 'Video details', icon: ['fas', 'video'] };\r\n\r\nconst navigation = [\r\n dashboardSection,\r\n instancesSection,\r\n clientsSection,\r\n clientGroupsSection,\r\n clipsSection,\r\n playlistsSection,\r\n productsSection\r\n]\r\n\r\nconst browseView = \"browseView\";\r\nconst createInstanceView = \"createInstanceView\";\r\nconst editInstanceView = \"editInstanceView\";\r\nconst createClientView = \"createClientView\";\r\nconst editClientView = \"editClientView\";\r\nconst createClientGroupView = \"createClientGroupView\";\r\nconst editClientGroupView = \"editClientGroupView\";\r\nconst createPlaylistView = \"createPlaylistView\";\r\nconst editPlaylistView = \"editPlaylistView\";\r\nconst createProductView = \"createProductView\";\r\nconst editProductView = \"editProductView\";\r\nconst createClipView = \"createClipView\";\r\nconst editClipView = \"editClipView\";\r\n\r\n// const userNavigation = [\r\n// { name: 'Your Profile', href: '#' },\r\n// { name: 'Settings', href: '#' },\r\n// { name: 'Sign out', href: '#' },\r\n// ]\r\n\r\nconst logo = require(\"../../images/howtofy_logo_white_RGB.svg\");\r\n\r\nexport default (props) => {\r\n const [sidebarOpen, setSidebarOpen] = useState(false);\r\n const [view, setView] = useState(browseView);\r\n const [activeSection, setActiveSection] = useState(navigation[0]);\r\n const [pageStack, setPageStack] = useState([]);\r\n\r\n const [instances, setInstances] = useState(null);\r\n const [clients, setClients] = useState(null);\r\n const [clientGroups, setClientGroups] = useState(null);\r\n const [playlists, setPlaylists] = useState(null);\r\n const [products, setProducts] = useState(null);\r\n const [clips, setClips] = useState(null);\r\n const [clipDetails, setClipDetails] = useState(null);\r\n \r\n const [selectedInstance, setSelectedInstance] = useState(null);\r\n const [selectedClientData, setSelectedClientData] = useState(null);\r\n const [selectedClientId, setSelectedClientId] = useState(null);\r\n const [selectedClient, setSelectedClient] = useState(null);\r\n const [selectedClientGroupId, setSelectedClientGroupId] = useState(null);\r\n const [selectedClientGroup, setSelectedClientGroup] = useState(null);\r\n const [selectedPlaylistId, setSelectedPlaylistId] = useState(null);\r\n const [selectedPlaylist, setSelectedPlaylist] = useState(null);\r\n const [selectedProductId, setSelectedProductId] = useState(null);\r\n const [selectedProduct, setSelectedProduct] = useState(null);\r\n const [selectedClipId, setSelectedClipId] = useState(null);\r\n const [selectedClip, setSelectedClip] = useState(null);\r\n\r\n const [editingItem, setEditingItem] = useState(null);\r\n const [initialLoadIds, setInitialLoadIds] = useState(null);\r\n const [username, setUsername] = useState(\"\");\r\n\r\n const[errorModalText, setErrorModalText] = useState(null);\r\n\r\n //const [uploader, setUploader] = useState(null);\r\n const [currentUploads, setCurrentUploads] = useState([]);\r\n\r\n const params = props.match.params;\r\n const history = useHistory();\r\n\r\n const [, handleWorkerMessage] = useReducer((state, message) => {\r\n const index = currentUploads.findIndex(x => x.id === message.id);\r\n if (index !== -1) {\r\n let copy = [...currentUploads];\r\n let uploadObject = _.cloneDeep(copy[index]);\r\n \r\n uploadObject.progress = message.readBytes;\r\n uploadObject.status = message.status;\r\n //console.log(uploadObject);\r\n\r\n copy.splice(index, 1, uploadObject);\r\n setCurrentUploads(copy);\r\n\r\n if (message.status === Utils.WorkerStatus.Complete) {\r\n let uploadUrlObject = uploadObject.uploadUrlObject;\r\n uploadUrlObject.blockIds = message.blockIds;\r\n uploadUrlObject.blockIdsHash = message.blockIdsHash;\r\n\r\n if (uploadObject.type === 'clip') {\r\n fetch(Utils.getFinalizeClipUploadUrl(params.instanceId, params.clientId, message.id), Utils.createRequest('POST', uploadUrlObject)).then(() => {\r\n });\r\n }\r\n if (uploadObject.type === 'client') {\r\n fetch(Utils.getFinalizeClientHeroVideoUploadUrl(params.instanceId, message.id), Utils.createRequest('POST', uploadUrlObject)).then(() => {\r\n });\r\n }\r\n }\r\n }\r\n }, \"\");\r\n \r\n\r\n // useEffect(() => {\r\n // const uploaderWorker = new Worker('./uploader.js');\r\n // uploaderWorker.onmessage = function (e) {\r\n // handleWorkerMessage(e.data);\r\n // };\r\n // setUploader(uploaderWorker);\r\n // }, []);\r\n\r\n function uploadVideo(type, id, file, uploadUrlObject) {\r\n let copy = [...currentUploads];\r\n let index = copy.findIndex(x => x.id === id);\r\n if (index !== -1) {\r\n let obj = copy[index];\r\n obj.worker.postMessage({ cancel: true });\r\n }\r\n\r\n const uploaderWorker = new Worker('./uploader.js');\r\n uploaderWorker.onmessage = function (e) {\r\n handleWorkerMessage(e.data);\r\n };\r\n\r\n let uploadObject = { \r\n worker: uploaderWorker, \r\n uploadUrlObject: uploadUrlObject, \r\n type: type,\r\n id: id, \r\n filename: file.name, \r\n size: file.size, \r\n progress: -1, \r\n status: Utils.WorkerStatus.Idle \r\n };\r\n copy.push(uploadObject);\r\n setCurrentUploads(copy);\r\n uploaderWorker.postMessage({ id: id, file: file, url: uploadUrlObject.url });\r\n }\r\n\r\n useEffect(() => {\r\n setUsername(unescape(document.cookie.split('; ').find(x => x.startsWith('is_logged_in=')).split('=')[1]));\r\n if (params.instanceId) {\r\n let ids = { \r\n instance: params.instanceId,\r\n client: params.clientId,\r\n clip: params.ClipId\r\n }\r\n setInitialLoadIds(ids);\r\n loadInstances();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if(instances) {\r\n if (initialLoadIds?.instance) {\r\n selectInstance(instances.find(x => x.id === initialLoadIds.instance));\r\n if (initialLoadIds.client) \r\n loadClients(initialLoadIds.instance);\r\n else \r\n setInitialLoadIds(null);\r\n }\r\n }\r\n }, [instances]);\r\n\r\n useEffect(() => {\r\n if(clients) {\r\n if (initialLoadIds?.client) {\r\n selectClient(clients.find(x => x.id === initialLoadIds.client));\r\n if (initialLoadIds.clip) \r\n loadClips(initialLoadIds.instance, initialLoadIds.client);\r\n else \r\n setInitialLoadIds(null);\r\n }\r\n }\r\n }, [clients]);\r\n\r\n useEffect(() => {\r\n if(clips) {\r\n if (initialLoadIds?.clip) {\r\n selectClip(clips.find(x => x.id === initialLoadIds.clip));\r\n setInitialLoadIds(null);\r\n }\r\n }\r\n }, [clips]);\r\n\r\n useEffect(() => {\r\n let stack = [];\r\n if (activeSection === instancesSection) {\r\n setInstances(null);\r\n setSelectedInstance(null);\r\n setClients(null);\r\n setClientGroups(null);\r\n setSelectedClientId(null);\r\n setSelectedClientGroupId(null);\r\n setClips(null);\r\n setSelectedClipId(null);\r\n setClipDetails(null);\r\n\r\n loadInstances();\r\n }\r\n\r\n if (activeSection === clientsSection) {\r\n const instanceId = selectedInstance?.id ?? params.instanceId;\r\n \r\n setClients(null);\r\n setClientGroups(null);\r\n setSelectedClientId(null);\r\n setSelectedClientGroupId(null);\r\n setClips(null);\r\n setSelectedClipId(null);\r\n setClipDetails(null);\r\n\r\n if(selectedInstance) stack.push(selectedInstance);\r\n \r\n loadClients(instanceId);\r\n }\r\n\r\n if (activeSection === playlistsSection) {\r\n const instanceId = selectedInstance?.id ?? params.instanceId;\r\n const clientId = selectedClient?.id ?? params.clientId;\r\n\r\n setPlaylists(null);\r\n setProducts(null);\r\n setClips(null);\r\n setSelectedClipId(null);\r\n setClipDetails(null);\r\n\r\n loadPlaylists(instanceId, clientId);\r\n }\r\n\r\n if (activeSection === productsSection) {\r\n const instanceId = selectedInstance?.id ?? params.instanceId;\r\n const clientId = selectedClient?.id ?? params.clientId;\r\n\r\n setPlaylists(null);\r\n setProducts(null);\r\n setClips(null);\r\n setSelectedClipId(null);\r\n setClipDetails(null);\r\n\r\n loadProducts(instanceId, clientId);\r\n }\r\n\r\n if (activeSection === clipsSection\r\n || activeSection === clientDetailsSection\r\n || activeSection === playlistsSection\r\n || activeSection === productsSection) {\r\n const instanceId = selectedInstance?.id ?? params.instanceId;\r\n const clientId = selectedClient?.id ?? params.clientId;\r\n \r\n setClips(null);\r\n setSelectedClipId(null);\r\n setClipDetails(null);\r\n\r\n if(selectedInstance) stack.push(selectedInstance);\r\n if(selectedClient) stack.push(selectedClient);\r\n \r\n if(activeSection === clipsSection)\r\n loadClips(instanceId, clientId);\r\n \r\n //if(activeSection === clientDetailsSection)\r\n //loadClips(instanceId, clientId);\r\n }\r\n\r\n // if (activeSection === clipDetailsSection) {\r\n // const instanceId = selectedInstance?.id ?? params.instanceId;\r\n // const clientId = selectedClient?.id ?? params.clientId;\r\n // const clipId = selectedClip?.id ?? params.clipId;\r\n \r\n // if(selectedInstance) stack.push(selectedInstance);\r\n // if(selectedClient) stack.push(selectedClient);\r\n // if(selectedClip) stack.push(selectedClip);\r\n \r\n // loadClipDetails(instanceId, clientId, clipId);\r\n // }\r\n\r\n setPageStack(stack);\r\n }, [activeSection]);\r\n\r\n useEffect(() => {\r\n const url = `/admin${pageStack.map(x => `/${x.id}`).join('')}`;\r\n history.push(url);\r\n }, [pageStack]);\r\n\r\n useEffect(() => {\r\n document.getElementsByTagName('main')[0].scrollTo(0, 0);\r\n }, [view]);\r\n\r\n useEffect(() => {\r\n if (selectedClientId) {\r\n loadClientData(params.instanceId, selectedClientId);\r\n }\r\n }, [selectedClientId]);\r\n\r\n useEffect(() => {\r\n if (selectedClientData) {\r\n setSelectedClientId(selectedClientData.client.id);\r\n let elem = document.getElementById('howtofystyles');\r\n if (elem) {\r\n elem.parentNode.removeChild(elem);\r\n }\r\n document.getElementsByTagName('head')[0].appendChild(PlayerUtils.getStyleElement(selectedClientData.client));\r\n }\r\n }, [selectedClientData]);\r\n\r\n useEffect(() => {\r\n if (selectedClientData && selectedClientId) {\r\n setSelectedClient(selectedClientData.client);\r\n }\r\n }, [selectedClientData, selectedClientId]);\r\n\r\n \r\n\r\n function onNavbarItemSelected(item) {\r\n resetViewToBrowse();\r\n if (!item) {\r\n setActiveSection(instancesSection);\r\n return;\r\n }\r\n\r\n switch(item.objectType) {\r\n case \"dbClip\":\r\n selectClip(item);\r\n break;\r\n case \"dbClient\":\r\n selectClient(item);\r\n break;\r\n case \"dbInstance\":\r\n selectInstance(item);\r\n break;\r\n }\r\n }\r\n\r\n function loadInstances() {\r\n Utils.loadInstances().then(response => response.json().then(data => {\r\n setInstances(data);\r\n }).catch((err) => {\r\n if (response.status === 403) {\r\n setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n } else {\r\n setErrorModalText(`Could not load data: ${err}`);\r\n }\r\n }));\r\n }\r\n\r\n function loadClientData(instanceId, clientId) {\r\n Utils.loadClientData(instanceId, clientId).then(response => response.json().then(data => {\r\n setSelectedClientData(Utils.processClientDataReferences(data));\r\n }).catch((err) => {\r\n if (response.status === 403) {\r\n setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n } else {\r\n setErrorModalText(`Could not load data: ${err}`);\r\n }\r\n }));\r\n }\r\n\r\n function loadClients(instanceId) {\r\n Utils.loadClients(instanceId).then(response => response.json().then(data => {\r\n setClients(data.clients);\r\n setClientGroups(data.groups);\r\n }).catch((err) => {\r\n if (response.status === 403) {\r\n setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n } else {\r\n setErrorModalText(`Could not load data: ${err}`);\r\n }\r\n }));\r\n }\r\n\r\n function loadPlaylists(instanceId, clientId) {\r\n if (selectedClient) {\r\n setPlaylists(selectedClient.__playlists);\r\n }\r\n // debugger;\r\n // Utils.loadPlaylists(instanceId, clientId).then(response => response.json().then(data => {\r\n // setPlaylists(data);\r\n // }).catch((err) => {\r\n // if (response.status === 403) {\r\n // setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n // } else {\r\n // setErrorModalText(`Could not load data: ${err}`);\r\n // }\r\n // }));\r\n }\r\n\r\n function loadProducts(instanceId, clientId) {\r\n if (selectedClient) {\r\n setProducts(selectedClient.__products);\r\n }\r\n // debugger;\r\n // Utils.loadProducts(instanceId, clientId).then(response => response.json().then(data => {\r\n // setProducts(data);\r\n // }).catch((err) => {\r\n // if (response.status === 403) {\r\n // setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n // } else {\r\n // setErrorModalText(`Could not load data: ${err}`);\r\n // }\r\n // }));\r\n }\r\n\r\n function loadClips(instanceId, clientId) {\r\n if (selectedClient) {\r\n setClips(selectedClient.__clips);\r\n }\r\n // Utils.loadClips(instanceId, clientId).then(response => response.json().then(data => {\r\n // setClips(data);\r\n // }).catch((err) => {\r\n // if (response.status === 403) {\r\n // setErrorModalText(\"Access denied:Please make sure the user you are logged in as has access to the requested resource.\");\r\n // } else {\r\n // setErrorModalText(`Could not load data: ${err}`);\r\n // }\r\n // }));\r\n }\r\n\r\n // function loadClipDetails(instanceId, clientId, clipId) {\r\n // fetch(`/api/instances/${instanceId}/clients/${clientId}/clips/${clipId}`).then(response => response.json().then(data => {\r\n // console.log(data);\r\n // setClipDetails(data);\r\n // }));\r\n // }\r\n\r\n function isSectionAvailable(section)\r\n {\r\n let res = false;\r\n if (section === dashboardSection) res = true;\r\n if (section === instancesSection) res = true;\r\n if (selectedInstance && section === clientsSection) res = true;\r\n if (selectedInstance && section === clientGroupsSection) res = true;\r\n if (selectedClient && section === clipsSection) res = true;\r\n if (selectedClient && section === playlistsSection) res = true;\r\n if (selectedClient && section === productsSection) res = true;\r\n if (selectedClip && section === clipDetailsSection) res = true;\r\n return res;\r\n }\r\n\r\n function selectInstance(instance) {\r\n setSelectedInstance(instance);\r\n setSelectedClient(null);\r\n setSelectedClip(null);\r\n setActiveSection(clientsSection);\r\n }\r\n\r\n function createInstance() {\r\n setView(createInstanceView);\r\n setSelectedInstance(null);\r\n setEditingItem({ name: '', comments: ''});\r\n }\r\n\r\n function editInstance(instance) {\r\n setView(editInstanceView);\r\n setSelectedInstance(instance);\r\n setEditingItem(_.cloneDeep(instance));\r\n }\r\n\r\n function saveInstance(instance, saveAndExit) {\r\n let items = [...instances];\r\n const idx = items.findIndex(x => x.id === instance.id);\r\n if (idx !== -1) {\r\n items.splice(idx, 1);\r\n } \r\n items.push(instance);\r\n setInstances(items);\r\n\r\n if (saveAndExit)\r\n resetViewToBrowse();\r\n else\r\n setEditingItem(_.cloneDeep(instance));\r\n }\r\n\r\n function deleteInstance(instance) {\r\n debugger;\r\n let items = [...instances];\r\n const idx = items.findIndex(x => x.id === instance.id);\r\n if (idx !== -1) {\r\n items.splice(idx, 1);\r\n } \r\n setInstances(items);\r\n\r\n resetViewToBrowse();\r\n }\r\n\r\n\r\n\r\n function selectClient(client) {\r\n setSelectedClientId(client.id);\r\n setSelectedPlaylist(null);\r\n setSelectedProduct(null);\r\n setSelectedClip(null);\r\n setActiveSection(clientDetailsSection);\r\n }\r\n\r\n function createClient() {\r\n setView(createClientView);\r\n setSelectedClient(null);\r\n setEditingItem({ name: '', comments: ''});\r\n }\r\n\r\n function editClient(client) {\r\n setView(editClientView);\r\n setSelectedClientId(client.id);\r\n setEditingItem(_.cloneDeep(client));\r\n }\r\n\r\n function clientSaved(client, saveAndExit) {\r\n let items = [...clients];\r\n const idx = items.findIndex(x => x.id === client.id);\r\n if (idx !== -1) {\r\n items.splice(idx, 1);\r\n } \r\n items.push(client);\r\n setClients(items);\r\n\r\n if (saveAndExit)\r\n resetViewToBrowse();\r\n else\r\n setEditingItem(_.cloneDeep(client));\r\n }\r\n\r\n function clientDeleted(client) {\r\n let items = [...clients];\r\n const idx = items.findIndex(x => x.id === client.id);\r\n if (idx !== -1) {\r\n items.splice(idx, 1);\r\n } \r\n setClients(items);\r\n\r\n resetViewToBrowse();\r\n }\r\n\r\n function selectClientGroup(clientGroup) {\r\n setSelectedClientGroupId(clientGroup.id);\r\n setSelectedClient(null);\r\n setSelectedProduct(null);\r\n setSelectedClip(null);\r\n setActiveSection(clientDetailsSection);\r\n }\r\n\r\n function createClientGroup() {\r\n setView(createClientGroupView);\r\n setSelectedClientGroup(null);\r\n setEditingItem({ name: '', comments: ''});\r\n }\r\n\r\n function editClientGroup(clientGroup) {\r\n setView(editClientGroupView);\r\n setSelectedClientGroupId(clientGroup.id);\r\n setEditingItem(_.cloneDeep(clientGroup));\r\n }\r\n\r\n function clientGroupSaved(clientGroup, saveAndExit) {\r\n let items = [...clientGroups];\r\n const idx = items.findIndex(x => x.id === clientGroup.id);\r\n if (idx !== -1) {\r\n items.splice(idx, 1);\r\n } \r\n items.push(clientGroup);\r\n setClientGroups(items);\r\n\r\n let clientsClone = [...clients];\r\n clientsClone.filter(x => x.clientGroupId == clientGroup.id).map(x => x.clientGroupId = null);\r\n clientGroup.clientIds.map(clientId => clientsClone.find(x => x.id == clientId).clientGroupId = clientGroup.id);\r\n setClients(clientsClone);\r\n\r\n if (saveAndExit)\r\n resetViewToBrowse();\r\n else\r\n setEditingItem(_.cloneDeep(clientGroup));\r\n }\r\n\r\n function clientGroupDeleted(clientGroup) {\r\n let items = [...clientGroups];\r\n const idx = items.findIndex(x => x.id === clientGroup.id);\r\n if (idx !== -1) {\r\n items.splice(idx, 1);\r\n } \r\n setClientGroups(items);\r\n\r\n let clientsClone = [...clients];\r\n clientsClone.filter(x => x.clientGroupId == clientGroup.id).map(x => x.clientGroupId = null);\r\n setClients(clientsClone);\r\n\r\n resetViewToBrowse();\r\n }\r\n\r\n // function selectPlaylist(playlist) {\r\n // setSelectedPlaylist(playlist);\r\n // setSelectedProduct(null);\r\n // setSelectedClip(null);\r\n // setActiveSection();\r\n // }\r\n\r\n function selectPlaylist(playlist) {\r\n setSelectedPlaylist(playlist);\r\n // setSelectedProduct(null);\r\n // setSelectedClip(null);\r\n setActiveSection(playlistDetailsSection);\r\n }\r\n\r\n function createPlaylist() {\r\n setView(createPlaylistView);\r\n setSelectedPlaylist(null);\r\n setEditingItem({ name: '', comments: ''});\r\n }\r\n\r\n function editPlaylist(playlist) {\r\n setView(editPlaylistView);\r\n setSelectedPlaylist(playlist);\r\n setEditingItem(_.cloneDeep(playlist));\r\n }\r\n\r\n\r\n function playlistSaved(clientData, saveAndExit) {\r\n // let items = [...playlists];\r\n // const idx = items.findIndex(x => x.id === playlist.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // } \r\n // items.push(playlist);\r\n // setPlaylists(items);\r\n\r\n playlistUpdated(clientData);\r\n if (saveAndExit)\r\n resetViewToBrowse();\r\n // else\r\n // setEditingItem(_.cloneDeep(playlist));\r\n }\r\n\r\n function playlistDeleted(clientData) {\r\n // let items = [...playlists];\r\n // const idx = items.findIndex(x => x.id === playlist.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // } \r\n // setPlaylists(items);\r\n playlistUpdated(clientData);\r\n resetViewToBrowse();\r\n }\r\n\r\n function playlistOrderChanged(clientData) {\r\n playlistUpdated(clientData);\r\n }\r\n\r\n function playlistUpdated(clientData) {\r\n const processed = Utils.processClientDataReferences(clientData);\r\n setSelectedClientData(processed);\r\n setSelectedClient(processed.client);\r\n setPlaylists(processed.client.__playlists);\r\n }\r\n\r\n\r\n function selectProduct(product) {\r\n setSelectedProduct(product);\r\n setActiveSection(productDetailsSection);\r\n }\r\n\r\n function createProduct() {\r\n setView(createProductView);\r\n setSelectedProduct(null);\r\n setEditingItem({ name: '', comments: ''});\r\n }\r\n\r\n function editProduct(product) {\r\n setView(editProductView);\r\n setSelectedProduct(product);\r\n setEditingItem(_.cloneDeep(product));\r\n }\r\n\r\n\r\n function productSaved(clientData, saveAndExit) {\r\n // let items = [...products];\r\n // const idx = items.findIndex(x => x.id === product.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // } \r\n // items.push(product);\r\n // setProducts(items);\r\n productUpdated(clientData);\r\n if (saveAndExit)\r\n resetViewToBrowse();\r\n // else\r\n // setEditingItem(_.cloneDeep(product));\r\n }\r\n\r\n function productDeleted(clientData) {\r\n // let items = [...products];\r\n // const idx = items.findIndex(x => x.id === product.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // } \r\n // setProducts(items);\r\n productUpdated(clientData);\r\n resetViewToBrowse();\r\n }\r\n\r\n function productUpdated(clientData) {\r\n const processed = Utils.processClientDataReferences(clientData);\r\n setSelectedClientData(processed);\r\n setSelectedClient(processed.client);\r\n setProducts(processed.client.__products);\r\n }\r\n\r\n\r\n\r\n function selectClip(clip) {\r\n setSelectedClip(clip);\r\n setActiveSection(clipDetailsSection);\r\n }\r\n\r\n function createClip() {\r\n setView(createClipView);\r\n setEditingItem({ id: `_new_${uuidv4()}`, name: '', comments: '', __products: [], segments: [], __playlists:[] });\r\n }\r\n\r\n function editClip(clip) {\r\n setView(editClipView);\r\n setEditingItem(_.cloneDeep(clip));\r\n }\r\n\r\n function clipSaved(clientData, saveAndExit) {\r\n // let clientDataClone = _.cloneDeep(selectedClientData);\r\n\r\n // let items = clientDataClone.__clips;\r\n // const idx = items.findIndex(x => x.id === clip.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // }\r\n // items.push(clip);\r\n clipUpdated(clientData);\r\n\r\n if (saveAndExit)\r\n resetViewToBrowse();\r\n //else\r\n //setEditingItem(_.cloneDeep(clip));\r\n\r\n // let items = [...clips];\r\n // const idx = items.findIndex(x => x.id === clip.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // } \r\n // items.push(clip);\r\n // setClips(items);\r\n\r\n // if (saveAndExit)\r\n // resetViewToBrowse();\r\n // else\r\n // setEditingItem(_.cloneDeep(clip));\r\n }\r\n\r\n function clipDeleted(clientData) {\r\n // let items = [...clips];\r\n // const idx = items.findIndex(x => x.id === clip.id);\r\n // if (idx !== -1) {\r\n // items.splice(idx, 1);\r\n // } \r\n // setClips(items);\r\n\r\n clipUpdated(clientData);\r\n resetViewToBrowse();\r\n }\r\n\r\n function clipUpdated(clientData) {\r\n const processed = Utils.processClientDataReferences(clientData);\r\n console.log(processed);\r\n setSelectedClientData(processed);\r\n setSelectedClient(processed.client);\r\n setClips(processed.client.__clips);\r\n }\r\n\r\n\r\n\r\n function resetViewToBrowse() {\r\n setEditingItem(null);\r\n setView(browseView);\r\n }\r\n\r\n function getActiveUploads() {\r\n return currentUploads.filter(x => x.status === Utils.WorkerStatus.Working);\r\n }\r\n \r\n function getProgressingUploads() {\r\n return getActiveUploads().filter(x => x.progress !== -1);\r\n }\r\n \r\n function hasActiveUploads() {\r\n return getActiveUploads().length > 0;\r\n }\r\n\r\n function getTotalUploadProgress() {\r\n const active = getProgressingUploads();\r\n const progress = _.sumBy(active, 'progress');\r\n const total = _.sumBy(active, 'size');\r\n return progress / total;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n setSidebarOpen(false)}\r\n >\r\n Close sidebar\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

Logged in as {username}

\r\n

Log out

\r\n
\r\n\r\n
\r\n \r\n
\r\n {/* Dummy element to force sidebar to shrink to fit close icon */}\r\n
\r\n
\r\n
\r\n\r\n {/* Static sidebar for desktop */}\r\n
\r\n
\r\n {/* Sidebar component, swap this element with another sidebar if you like */}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

Logged in as {username}

\r\n

Log out

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n setSidebarOpen(true)}\r\n >\r\n Open sidebar\r\n \r\n \r\n {/*
*/}\r\n {/*
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
*/}\r\n {/*
*/}\r\n {/* \r\n View notifications\r\n \r\n */}\r\n\r\n {/* \r\n
\r\n \r\n Open user menu\r\n \r\n \r\n
\r\n \r\n \r\n {userNavigation.map((item) => (\r\n \r\n {({ active }) => (\r\n \r\n {item.name}\r\n \r\n )}\r\n \r\n ))}\r\n \r\n \r\n
*/}\r\n {/*
*/}\r\n {/*
*/}\r\n
\r\n\r\n {pageStack.length > 0 &&\r\n onNavbarItemSelected(item)} />\r\n // \r\n }\r\n\r\n {currentUploads.length > 0 &&\r\n
\r\n
\r\n \r\n
\r\n {!hasActiveUploads() &&\r\n
\r\n All uploads have finished!\r\n
\r\n }\r\n\r\n {hasActiveUploads() &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n Uploading {getActiveUploads().length} file{getActiveUploads().length === 1 ? '' : 's'}\r\n \r\n ({Math.round(getTotalUploadProgress() * 100)}%...)\r\n \r\n
\r\n
\r\n }\r\n
\r\n }\r\n\r\n \r\n\r\n
\r\n {selectedClient &&\r\n
\r\n {selectedClient.existingLogoUrl &&\r\n {selectedClient.name}\r\n }\r\n {!selectedClient.existingLogoUrl &&\r\n

{selectedClient.name}

\r\n }\r\n
\r\n }\r\n {view === browseView &&\r\n
\r\n
\r\n

{activeSection?.name}

\r\n
\r\n
\r\n {activeSection === dashboardSection &&\r\n <>\r\n {/* Replace with your content */}\r\n
\r\n
\r\n
\r\n {/* /End replace */}\r\n \r\n }\r\n\r\n {activeSection === instancesSection &&\r\n selectInstance(instance)} onEditClicked={(instance) => editInstance(instance)} onCreateClicked={() => createInstance()} />\r\n }\r\n\r\n {activeSection === clientsSection &&\r\n selectClient(client)} onEditClicked={(client) => editClient(client)} onCreateClicked={() => createClient()} />\r\n }\r\n\r\n {activeSection === clientGroupsSection &&\r\n selectClientGroup(clientGroup)} onEditClicked={(clientGroup) => editClientGroup(clientGroup)} onCreateClicked={() => createClientGroup()} />\r\n }\r\n\r\n {activeSection === clientDetailsSection && selectedClient &&\r\n { resetViewToBrowse(); setActiveSection(section); }} onEditClicked={(client) => editClient(client)} />\r\n }\r\n\r\n {activeSection === playlistsSection &&\r\n selectPlaylist(playlist)} onOrderChanged={(item) => playlistOrderChanged(item)} onEditClicked={(playlist) => editPlaylist(playlist)} onCreateClicked={() => createPlaylist()} />\r\n }\r\n\r\n {activeSection === playlistDetailsSection &&\r\n editPlaylist(playlist)} />\r\n }\r\n\r\n {activeSection === productsSection &&\r\n selectProduct(product)} onEditClicked={(product) => editProduct(product)} onCreateClicked={() => createProduct()} />\r\n }\r\n\r\n {activeSection === productDetailsSection &&\r\n editProduct(product)} />\r\n }\r\n\r\n {activeSection === clipsSection &&\r\n selectClip(clip)} onEditClicked={(clip) => editClip(clip)} onCreateClicked={() => createClip()} />\r\n }\r\n\r\n {activeSection === clipDetailsSection &&\r\n editClip(clip)} />\r\n }\r\n
\r\n
\r\n }\r\n\r\n {(view === createInstanceView || view === editInstanceView) &&\r\n saveInstance(item, saveAndExit)} onDeleted={(item) => deleteInstance(item)} onDone={() => resetViewToBrowse()} />\r\n }\r\n\r\n {(view === createClientView || view === editClientView) &&\r\n uploadVideo('client', id, file, uploadUrlObject)}\r\n onSaved={(item, saveAndExit) => clientSaved(item, saveAndExit)} \r\n onDeleted={(item) => clientDeleted(item)} \r\n onDone={() => resetViewToBrowse()} \r\n />\r\n }\r\n\r\n {(view === createClientGroupView || view === editClientGroupView) &&\r\n clientGroupSaved(item, saveAndExit)} \r\n onDeleted={(item) => clientGroupDeleted(item)} \r\n onDone={() => resetViewToBrowse()} \r\n />\r\n }\r\n\r\n {(view === createPlaylistView || view === editPlaylistView) &&\r\n playlistSaved(item, saveAndExit)} \r\n onDeleted={(item) => playlistDeleted(item)} \r\n onDone={() => resetViewToBrowse()} />\r\n }\r\n\r\n {(view === createProductView || view === editProductView) &&\r\n productSaved(item, saveAndExit)} \r\n onDeleted={(item) => productDeleted(item)} \r\n onDone={() => resetViewToBrowse()} />\r\n }\r\n\r\n {(view === createClipView || view === editClipView) &&\r\n uploadVideo('clip', id, file, uploadUrlObject)}\r\n onPlaylistCreated={(item) => playlistSaved(item, false)}\r\n onSaved={(item, saveAndExit) => clipSaved(item, saveAndExit)} \r\n onDeleted={(item) => clipDeleted(item)} \r\n onDone={() => resetViewToBrowse()} />\r\n }\r\n\r\n
\r\n
\r\n
\r\n alert('onClosed')}>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n {errorModalText?.split(':')[0]}\r\n

\r\n
\r\n

\r\n {errorModalText?.split(':')[1]}\r\n

\r\n
\r\n
\r\n
\r\n
\r\n setErrorModalText(null)}\r\n >\r\n OK\r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n","import React, { Fragment, useState, useEffect } from 'react';\nimport { Dialog, Transition } from '@headlessui/react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport default (props) => {\n\n return (\n \n props.onClose()}>\n
\n \n \n
props.onClose()} className={`fixed inset-y-0 ${props.side === 'left' ? 'left-0 pr-10' : 'right-0 pl-10'} max-w-full flex`}>\n \n
ev.stopPropagation()} className={`${props.side === 'left' ? 'rounded-r-xl' : 'rounded-l-xl'} bg-white bg-opacity-95 w-96 overflow-y-auto shadow-xlhv`}>\n
\n
\n
\n {props.title}\n
\n props.onClose()}\n >\n Close panel\n \n \n
\n
\n
\n {props.children}\n
\n
\n {/*
\n
ev.stopPropagation()} className={`${props.side === 'left' ? 'rounded-r-lg' : 'rounded-l-lg'} pointer-events-none h-full flex flex-col py-6 bg-white bg-opacity-95 shadow-xlhv overflow-y-scroll`}>\n
\n
\n {props.title}\n
\n props.onClose()}\n >\n Close panel\n \n \n
\n
\n
\n
\n {props.children}\n
\n
\n
*/}\n \n
\n
\n
\n
\n )\n }","import React, { useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PlayerUtils from '../Utils/PlayerUtils';\n\nexport default (props) => {\n let aspect = \"aspect-w-4 aspect-h-5 md:aspect-w-16 md:aspect-h-9\";\n switch(props.aspect) {\n case \"portrait\":\n aspect = \"aspect-w-4 aspect-h-5\";\n break;\n case \"landscape\":\n aspect = \"aspect-w-16 aspect-h-9\";\n break;\n case \"square\":\n aspect = \"aspect-w-1 aspect-h-1\";\n break;\n }\n\n return (\n
\n
\n {props.title}\n
\n {(props.title || props.duration) &&\n
\n {props.title &&\n

\n {props.title}\n

\n }\n {props.duration &&\n

\n {PlayerUtils.formatDuration(props.duration)}\n

\n }\n
\n }\n
\n {props.showPlayIcon &&\n
\n \n
\n }\n
\n
\n )\n}\n\n","import React, { Fragment, useEffect, useState } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Item from './Item';\r\n\r\nexport default (props) => {\r\n const [searchTerms, setSearchTerms] = useState('');\r\n const [filteredResults, setFilteredResults] = useState();\r\n const [selectedCategory, setSelectedCategory] = useState('clips');\r\n\r\n useEffect(() => {\r\n if (props.client) {\r\n setSearchTerms('');\r\n }\r\n }, [props.client]);\r\n\r\n useEffect(() => {\r\n if (!searchTerms || searchTerms.trim() === '') {\r\n setFilteredResults({ clips: props.client.clips, playlists: props.client.playlists, products: props.client.products });\r\n return;\r\n }\r\n\r\n const terms = searchTerms.toLowerCase();\r\n\r\n let clips = props.client.clips.filter(x => {\r\n const str = `${x.name} ${x.description}`.toLowerCase();\r\n return str.indexOf(terms)> -1;\r\n });\r\n let playlists = props.client.playlists.filter(x => {\r\n const str = `${x.name} ${x.description}`.toLowerCase();\r\n return str.indexOf(terms)> -1;\r\n });\r\n\r\n let products = props.client.products.filter(x => {\r\n const str = `${x.name} ${x.description} ${x.articleNumber}`.toLowerCase();\r\n return str.indexOf(terms)> -1;\r\n });\r\n\r\n setFilteredResults( { clips: clips, playlists: playlists, products: products });\r\n }, [searchTerms]);\r\n\r\n function getClipUrlPrefix() {\r\n if (props.customChannelUrl) return `/v`;\r\n return `/v/${props.client.pid}`;\r\n }\r\n\r\n function getPlaylistUrlPrefix() {\r\n if (props.customChannelUrl) return `/p`;\r\n return `/p/${props.client.pid}`;\r\n }\r\n\r\n function getProdUrlPrefix() {\r\n if (props.customChannelUrl) return `/prod`;\r\n return `/prod/${props.client.pid}`;\r\n }\r\n\r\n return (\r\n <>\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n setSearchTerms(ev.target.value)}\r\n className=\"focus:ring-indigo-500 focus:border-indigo-500 block w-full pl-10 sm:text-sm border-gray-300 rounded-md\"\r\n placeholder=\"Type to search...\"\r\n />\r\n
\r\n {filteredResults &&\r\n
\r\n setSelectedCategory('clips')}\r\n className={`${selectedCategory === 'clips' ? 'howtofy-text-color howtofy-background-color' : 'text-gray-700 bg-white '} relative inline-flex items-center justify-center px-4 py-2 rounded-l-md border border-gray-300 text-sm font-medium focus:z-10 focus:outline-none`}\r\n >\r\n Videos\r\n ({filteredResults.clips.length})\r\n \r\n setSelectedCategory('playlists')}\r\n className={`${selectedCategory === 'playlists' ? 'howtofy-text-color howtofy-background-color' : 'text-gray-700 bg-white '} -ml-px relative inline-flex items-center justify-center px-4 py-2 border border-gray-300 text-sm font-medium focus:z-10 focus:outline-none`}\r\n >\r\n Playlists\r\n ({filteredResults.playlists.length})\r\n \r\n setSelectedCategory('products')}\r\n className={`${selectedCategory === 'products' ? 'howtofy-text-color howtofy-background-color' : 'text-gray-700 bg-white '} -ml-px relative inline-flex items-center justify-center px-4 py-2 rounded-r-md border border-gray-300 text-sm font-medium text-gray-700 focus:z-10 focus:outline-none`}\r\n >\r\n Products\r\n ({filteredResults.products.length})\r\n \r\n
\r\n }\r\n
\r\n\r\n
\r\n {filteredResults &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {selectedCategory === 'clips' &&\r\n
    \r\n {filteredResults.clips.map(clip => {\r\n return (\r\n
  • \r\n \r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n {selectedCategory === 'playlists' &&\r\n
    \r\n {filteredResults.playlists.map(playlist => {\r\n return (\r\n
  • \r\n
    \r\n \r\n

    \r\n {playlist.name}\r\n

    \r\n
    \r\n\r\n\r\n
    \r\n
      \r\n {playlist.clips.map(clip => {\r\n return (\r\n
    • \r\n
      \r\n \r\n \r\n \r\n
      \r\n
    • \r\n );\r\n })}\r\n
    \r\n
    \r\n\r\n\r\n\r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n\r\n\r\n\r\n\r\n\r\n {selectedCategory === 'products' &&\r\n
    \r\n {filteredResults.products.map(product => {\r\n return (\r\n
  • \r\n {/* */}\r\n \r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n \r\n }\r\n
\r\n\r\n \r\n )\r\n}\r\n\r\n","\nimport React from 'react';\n\nexport default () => {\n function getYear() {\n return new Date().getFullYear();\n }\n\n return (\n
\n Powered by Howtofy. Copyright © 2021-{getYear()} Howtofy AB. All rights reserved.\n
\n )\n}\n","import React, { useEffect, useState } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport PlayerUtils from '../Utils/PlayerUtils';\r\nimport PoweredByBar from \"./PoweredByBar\";\r\n\r\nexport default (props) => {\r\n function ensureStartsWith(str, value) {\r\n if (value.indexOf(str) === 0) return value;\r\n return str + value;\r\n }\r\n\r\n return (\r\n\r\n
\r\n
\r\n
\r\n {props.client?.contactInfo?.address &&\r\n
\r\n
{props.client.contactInfo.address}
\r\n
\r\n }\r\n
\r\n\r\n
\r\n {props.client?.contactInfo?.email &&\r\n \r\n }\r\n {props.client?.contactInfo?.phone &&\r\n
\r\n \r\n
{props.client.contactInfo.phone}
\r\n
\r\n }\r\n {props.client?.contactInfo?.url &&\r\n \r\n }\r\n
\r\n\r\n
\r\n {props.client?.socialMediaChannels &&\r\n
    \r\n {props.client.socialMediaChannels.map(channel => {\r\n return(\r\n
  • \r\n x.name === channel.type).icon} size=\"lg\" className=\"opacity-30\" />\r\n \r\n
    {channel.name}
    \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n","import React, { useState, useEffect, useReducer } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PlayerUtils from '../Utils/PlayerUtils';\nimport Drawer from './Drawer';\nimport Search from './Search';\nimport ContactDetails from './ContactDetails';\n\nexport default (props) => {\n const [searchTerms, setSearchTerms] = useState('');\n const [searchVisible, setSearchVisible] = useState(false);\n const [currentSearchResultsSection, setCurrentSearchResultsSection] = useState(null);\n const [searchResults, setSearchResults] = useState(null);\n const [isSearching, setIsSearching] = useState(false);\n\n const [leftDrawerVisible, setLeftDrawerVisible] = useState(false);\n const [rightDrawerVisible, setRightDrawerVisible] = useState(false);\n const [lastScrollTop, setLastScrollTop] = useState(0);\n const [headerTop, setHeaderTop] = useState(0);\n\n const headerRef = React.useRef();\n\n const [, handleScrollEvent] = useReducer((state, message) => {\n let scrollTop = window.scrollY || window.document.documentElement.scrollTop;\n console.log(scrollTop);\n if (headerRef?.current) {\n const scrollDelta = lastScrollTop - Math.max(0, scrollTop);\n const topVal = Math.min(0, Math.max(-80, headerTop + scrollDelta));\n setHeaderTop(topVal);\n let topStyle = `${topVal}px`;\n headerRef.current.style.top = topStyle;\n setLastScrollTop(scrollTop);\n }\n });\n\n // useEffect(() => {\n // window.addEventListener('scroll', handleScrollEvent);\n // return () => {\n // window.removeEventListener('scroll', handleScrollEvent);\n // };\n // }, []);\n\n function searchTermsChanged(terms) {\n setSearchTerms(terms);\n setSearchResults(null);\n if (terms.length > 2) {\n setIsSearching(true);\n PlayerUtils.search(props.client.customUrl, terms).then(response => response.json().then(data => {\n setIsSearching(false);\n const results = [\n { name: 'Playlists', items: data.playlists },\n { name: 'Videos', items: data.clips },\n { name: 'Products', items: data.products },\n ];\n setCurrentSearchResultsSection(results[0]);\n setSearchResults(results);\n }));\n }\n }\n\n function getThumbUrl(item) {\n switch (item.objectType) { \n case \"dbPlaylist\": \n return item.thumbUrl;\n case \"dbClip\":\n return item.existingCustomLandscapeThumbUrl ?? item.existingVideoThumbUrl;\n case \"dbProduct\":\n return item.existingImageUrl;\n }\n }\n\n function getUrl(item) {\n switch (item.objectType) { \n case \"dbPlaylist\": \n return item.playlistUrl;\n case \"dbClip\":\n return item.playerUrl;\n case \"dbProduct\":\n return item.shop;\n }\n }\n\n function getChannelUrl() {\n return props.customChannelUrl ? '/' : props.client.url;\n }\n\n return (\n <>\n
\n
\n
\n {/* */}\n setLeftDrawerVisible(!leftDrawerVisible)} icon={['fas', 'bars' ]} size=\"2x\" className=\"cursor-pointer\" />\n
\n \n {props.client?.logoUrl &&\n
\n \n {props.client?.name}\n \n
\n }\n \n
\n {/* setSearchVisible(!searchVisible)} icon={['fas', 'search' ]} size=\"2x\" className=\"howtofy-text-color opacity-60 cursor-pointer\" /> */}\n setRightDrawerVisible(!rightDrawerVisible)} icon={['fas', 'search' ]} size=\"2x\" className=\"cursor-pointer\" />\n
\n
\n {searchVisible &&\n <>\n
\n
\n
\n \n \n \n
\n searchTermsChanged(ev.target.value)} \n className=\"focus:outline-none focus:border-transparent block w-full pl-10 pr-3 sm:text-sm rounded-full bg-white text-white bg-opacity-30 placeholder-white placeholder-opacity-50\" \n />\n
\n
\n {searchResults &&\n
\n\n\n
\n
\n \n setCurrentSearchResultsSection(searchResults.find(x => x.name === ev.target.value))}\n defaultValue={currentSearchResultsSection}\n >\n {searchResults.map((tab) => (\n \n ))}\n \n
\n
\n
\n \n
\n
\n
\n\n\n {currentSearchResultsSection &&\n
\n \n
\n }\n\n\n
\n }\n \n }\n
\n
\n setLeftDrawerVisible(false)}>\n \n \n setRightDrawerVisible(false)}>\n \n \n
\n \n )\n}","import React, { useEffect, useState } from 'react';\nexport default (props) => {\n // const videoRef = React.useRef(null);\n // const playerRef = React.useRef(null);\n // const [player, setPlayer] = useState(null);\n \n if(!props.videoUrl) return null;\n\n // useEffect(() => {\n // if(props.videoUrl) {\n // if (!playerRef?.current && videoRef?.current && (props.client || props.videoUrl)) {\n // const videoElement = videoRef.current;\n // if (!videoElement) return;\n\n // const videoJsOptions = {\n // autoplay: true,\n // controls: false,\n // responsive: true,\n // fluid: false,\n // sources: [{\n // src: props.client.streamUrls ? props.client.streamUrls[0] : props.videoUrl,\n // type: props.client.streamUrls ? 'application/x-mpegURL' : 'video/mp4'\n // }]\n // }\n \n // playerRef.current = videojs(videoElement, videoJsOptions, function() {\n // });\n // setPlayer(playerRef.current); \n // } \n // }\n // }, [props.videoUrl, props.client, videoRef]);\n\n // useEffect(() => {\n // const player = playerRef.current;\n\n // return () => {\n // if (player) {\n // player.dispose();\n // playerRef.current = null;\n // }\n // };\n // }, [playerRef]);\n\n return (\n
\n \n
\n //