PageSourceSearch

https://scio3-prod-branding.pages.dev/assets/ProofOfPlayPage-BqlkgRQb.js

js scio3-prod-branding.pages.dev collected 2026-10-03 05:56:20 UTC 8,915 bytes, 1 lines download raw bytes

1import{r as d,j as o,c as Y}from"./vendor-core-CSqf0onn.js";import{u as $,e as Z}from"./ddp-lHCl710f.js";import{fc as P,B as j,a1 as H,A as J,ae as Q,a7 as W,G as X,a6 as ee,ad as te}from"./index-BLvPBB0_.js";import{u as N,f as I,p as R,a as E,b as ae,c as se,d as oe,A as ne,P as ie,e as f}from"./AnalyticsDashboard-Bc2pcf5b.js";import{u as re}from"./useAnalyticsApi-Doasqge-.js";import{A as le}from"./AssetDetailDialog-DsdWNHHe.js";import{u as ce}from"./vendor-i18n-CsG5WAan.js";import{L as z}from"./vendor-icons-DiwvYKnv.js";import"./vendor-posthog-DjDKwFVN.js";import"./vendor-firebase-B4mX4twW.js";import"./vendor-router-bax5p2Kx.js";import"./DateRangePickerWithPresets-BOyVapX6.js";import"./MultiSelectCombobox-OQDq_jRn.js";import"./useAssetTags-D4ZMHjgG.js";import"./useDeviceTags-wuKwLKCn.js";import"./AssetDetailPanel-3jivEolm.js";import"./useAssetActions-C2mK9gx1.js";import"./useUppyThumbnailUpload-Dq_LrxaY.js";import"./useOpenAssetEditor-DedqoMj9.js";import"./useAssetPreviewUrl-Cp6iqWYE.js";import"./purify.es-CEBYger9.js";import"./AssetThumbnail-DCAC6AGR.js";import"./useBroadcastsUsingAssets-BBbH6yZL.js";import"./BroadcastMenuItems-D1pxSRtz.js";import"./broadcast-types-BRemRDS8.js";import"./TagInput-Cjz3a_5J.js";function me(e){return{asset_id:e.asset_id||"",asset_name:e.asset_name||"",asset_tags:R(e.asset_tags),asset_type:e.asset_type||"",play_count:E(e.play_count),exposure_time:E(e.exposure_time),screen_tags:R(e.screen_tags),deviceName:e.deviceName||"",screen_tz:e.screen_tz||"",screens_played:e.screens_played||0,assets_played:e.assets_played||0,start_time_utc:e.start_time_utc||"",start_date:e.start_date||"",ai_count:e.ai_count||0,ai_model:e.ai_model||0}}function L(e,n){const i=new Set;for(const a of e)i.add(n(a));return i.size}function ue(e){if(e.length<=1)return e;const n=new Map;for(const a of e){const r=`${a.asset_id}---${a.deviceName}`,t=n.get(r);t?t.push(a):n.set(r,[a])}const i=[];for(const a of n.values()){if(a.length===1){i.push(a[0]);continue}const r=a[0];let t=0,l=0,p=0,y=r.start_date,_=r.start_time_utc;for(const m of a)t+=m.play_count,l+=m.exposure_time,p+=m.ai_count,m.start_date>y&&(y=m.start_date),m.start_time_utc>_&&(_=m.start_time_utc);i.push({...r,play_count:t,exposure_time:l,ai_count:p,assets_played:L(a,m=>m.asset_id),screens_played:L(a,m=>m.deviceName),start_date:y,start_time_utc:_})}return i}function pe(e,n){let i=null;if(n.isShowDeviceName?i=t=>t.deviceName:n.isShowAssetName?i=t=>t.asset_id:n.isShowAIModel&&(i=t=>String(t.ai_model)),!i||e.length===0)return e;const a=new Map;for(const t of e){const l=i(t),p=a.get(l);p?p.push(t):a.set(l,[t])}const r=[];for(const t of a.values()){if(t.length===1){r.push(t[0]);continue}const l=t[0];let p=0,y=0,_=0,m=l.start_date,v=l.start_time_utc;const h=new Set,x=new Set,g=new Map;for(const u of t)p+=u.play_count,y+=u.exposure_time,_+=u.ai_count,g.has(u.asset_id)||g.set(u.asset_id,u.asset_name),h.add(u.asset_type),x.add(u.deviceName),u.start_date>m&&(m=u.start_date),u.start_time_utc>v&&(v=u.start_time_utc);const w=g.size>1;r.push({...l,asset_name:w?"":l.asset_name,grouped_assets:w?[...g].map(([u,k])=>({asset_id:u,asset_name:k})):void 0,asset_id:w?"":l.asset_id,asset_type:h.size===1?l.asset_type:"",deviceName:x.size===1?l.deviceName:"",play_count:p,exposure_time:y,ai_count:_,assets_played:g.size,screens_played:x.size,start_date:m,start_time_utc:v})}return r}function de(){const{fetchPopData:e}=re(),n=P(s=>s.dateFrom),i=P(s=>s.dateTo),a=P(s=>s.assetTags),r=P(s=>s.screenTags),t=N(s=>!!(s.popView.columns.ai_count?.isShow||s.popView.columns.ai_model?.isShow)),l=N(s=>!!s.popView.columns.deviceName?.isShow),p=N(s=>!!s.popView.columns.asset_name?.isShow),y=N(s=>!!s.popView.columns.ai_model?.isShow),[_,m]=d.useState([]),[v,h]=d.useState(!0),[x,g]=d.useState(null),[w,u]=d.useState(0),k=d.useCallback(()=>u(s=>s+1),[]);d.useEffect(()=>{let s=!1;return h(!0),g(null),e({startDate:I(n,!1),endDate:I(i,!0),assetTags:a.length?a:void 0,screenTags:r.length?r:void 0,isAI:t}).then(A=>{if(s)return;const C=(A.data||[]).map(me);m(C),h(!1)}).catch(A=>{s||(console.error("Failed to fetch Proof of Play data:",A),g(A instanceof Error?A.message:"Failed to load data"),h(!1))}),()=>{s=!0}},[e,n,i,a,r,t,w]);const D=d.useMemo(()=>ue(_),[_]),b=d.useMemo(()=>pe(D,{isShowDeviceName:l,isShowAssetName:p,isShowAIModel:y}),[D,l,p,y]);return{data:_,tableData:b,tableDataUngrouped:D,loading:v,error:x,refresh:k}}function fe(e,n,{t:i,onOpenAsset:a,onViewAssetList:r}){const t=n.grouped_assets,l=typeof e=="string"?e:"",p=typeof n.asset_id=="string"?n.asset_id:"";return t&&t.length>1?o.jsx(j,{variant:"link",className:"h-auto p-0","data-testid":"pop-asset-list-link",onClick:()=>r(t),children:i("Assets")}):p?o.jsx(j,{variant:"link",className:"h-auto whitespace-normal p-0 text-left","data-testid":"pop-asset-link",onClick:()=>a(p),children:l||p}):l||null}Z();function G(e){return!Array.isArray(e)||e.length===0?null:o.jsx("div",{className:"flex flex-wrap gap-1",children:e.map(n=>o.jsx(te,{variant:"secondary",children:n},n))})}function _e(e,n,i){return[{key:"asset_id",name:e(f.asset_id.name)},{key:"asset_name",name:e(f.asset_name.name),render:(a,r)=>fe(a,r,{t:e,onOpenAsset:n,onViewAssetList:i})},{key:"asset_tags",name:e(f.asset_tags.name),render:G},{key:"asset_type",name:e(f.asset_type.name)}
1,{key:"screen_tags",name:e(f.screen_tags.name),render:G},{key:"screen_tz",name:e(f.screen_tz.name)},{key:"deviceName",name:e(f.deviceName.name)},{key:"start_date",name:e(f.start_date.name)},{key:"play_count",name:e(f.play_count.name),topCalc:"sum"},{key:"exposure_time",name:e(f.exposure_time.name),topCalc:"sum"},{key:"assets_played",name:e(f.assets_played.name),topCalc:"distinct",distinctKey:"asset_id"},{key:"screens_played",name:e(f.screens_played.name),topCalc:"distinct",distinctKey:"deviceName"},{key:"ai_count",name:e(f.ai_count.name),topCalc:"sum"},{key:"ai_model",name:e(f.ai_model.name)}]}function Be(){const{t:e}=ce(),{proofOfPlay:n,proofOfPlayStatus:i,loaded:a}=H(),r=P(c=>c.setPageType),t=N(c=>c.popView.timeGrouping),l=N(c=>c.setTimeGrouping),p=d.useRef(null),y=Y(),_=J(c=>c.setCompany),m=Q(),v=$("activeProofOfPlaySetting"),[h,x]=d.useState(!1);d.useEffect(()=>{r("proofOfPlay")},[r]);const g=P(c=>c.activeReport),w=P(c=>c.dateFrom),u=P(c=>c.dateTo),{data:k,tableData:D,tableDataUngrouped:b,loading:s,error:A,refresh:C}=de(),V=ae(k,t,w,u),{openAssetById:T}=se(),O=oe(c=>c.openDialog),F=d.useCallback(c=>O("viewAssetList",{assets:c}),[O]),B=d.useMemo(()=>_e(e,T,F),[e,T,F]),U=d.useMemo(()=>D,[D]),q=d.useMemo(()=>b,[b]);async function K(){if(await m({title:e("Enable Playback Report"),description:e("Are you sure you want to activate this feature?"),confirm:{label:e("Activate")}})){x(!0);try{const S=Intl.DateTimeFormat().resolvedOptions().timeZone;await v.mutateAsync([S]);const{data:M}=await y.query({query:X,fetchPolicy:"network-only"});M?.getCompanyInfo&&_(M.getCompanyInfo)}catch(S){console.error("Failed to activate Proof of Play",S),ee.error(e("Failed to enable Playback Report"))}finally{x(!1)}}}return a?n?i?o.jsxs("div",{"data-testid":"proof-of-play-page",className:"flex h-full overflow-hidden bg-muted p-2",children:[o.jsxs("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden rounded-xl bg-card",children:[o.jsxs("div",{className:"border-b px-6 py-4",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("h1",{className:"text-2xl font-semibold",children:e("Playback Report")}),g?.name&&o.jsxs("p",{className:"ml-1 text-lg font-normal text-muted-foreground",children:["(",g.name,")"]})]}),o.jsx("p",{className:"text-sm text-muted-foreground",children:e("Your screens report data in Real-time")})]}),o.jsx(ne,{pageType:"proofOfPlay",loading:s,error:A,tableData:U,tableDataUngrouped:q,columnDefs:B,chartRef:p,onRefresh:C,chartContent:o.jsx(ie,{data:V,timeGrouping:t,onTimeGroupingChange:c=>l("proofOfPlay",c)})})]}),o.jsx(le,{})]}):o.jsxs("div",{"data-testid":"proof-of-play-page",className:"flex h-full flex-col items-center justify-center",children:[o.jsx("p",{className:"mb-4 text-sm text-muted-foreground",children:e("Please Enable Playback Report for your devices to start reporting playback data. This will slightly increase network usage on your devices.")}),o.jsx(j,{onClick:K,disabled:h,children:h?o.jsxs(o.Fragment,{children:[o.jsx(z,{className:"mr-2 h-4 w-4 animate-spin"}),e("Enabling...")]}):e("Enable Now")})]}):o.jsx("div",{"data-testid":"proof-of-play-page",className:"flex h-full py-6 flex-col",children:o.jsx(W,{planFeature:"proofOfPlay",minPlanRequired:"pro",featureLabel:"Proof of Play",planLabel:"Pro & Enterprise Plan",learnMoreUrl:"https://www.optisigns.com/proof-of-play",backgroundImageUrl:"/images/plan-gate/proof-of-play-demo.png"})}):o.jsx("div",{"data-testid":"proof-of-play-page",className:"flex h-full flex-col items-center justify-center",children:o.jsx(z,{className:"h-8 w-8 animate-spin text-muted-foreground"})})}export{Be as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.