Compare commits
2 Commits
develop
...
demo-inspo
| Author | SHA1 | Date |
|---|---|---|
|
|
24dc9cbf57 | 2 years ago |
|
|
55e15e2b08 | 2 years ago |
@ -0,0 +1,51 @@ |
||||
import { css } from 'styled-components/macro' |
||||
|
||||
import { |
||||
ClientConfig, |
||||
ClientIds, |
||||
ClientNames, |
||||
} from './types' |
||||
|
||||
export const rustat: ClientConfig = { |
||||
auth: { |
||||
clientId: ClientIds.Rustat, |
||||
}, |
||||
currencyBadge: { |
||||
color: '#333333', |
||||
secondColor: 'rgba(255, 255, 255, 0.7)', |
||||
sign: 'Dollar', |
||||
}, |
||||
defaultLanguage: 'en', |
||||
description: 'Live sports streaming platform. Football, basketball, ice hockey and more. Access to various player playlists and game highlights. Multiple subscription options. Available across all devices.', |
||||
disabledPreferences: true, |
||||
host: 'demo.insports.tv', |
||||
name: ClientNames.Rustat, |
||||
privacyLink: '/privacy-policy-and-statement?client_id=insports-ott-web', |
||||
showSearch: true, |
||||
showSmartBanner: true, |
||||
styles: { |
||||
background: 'background-image: url(/images/Checker.png);', |
||||
logo: 'insports-logo.svg', |
||||
logoHeight: 2.465, |
||||
logoLeft: 1.7, |
||||
logoTop: 1.5, |
||||
logoWidth: 6.37, |
||||
matchLogoHeight: 2.465, |
||||
matchLogoWidth: 6.37, |
||||
matchPageMobileHeaderLogo: css` |
||||
width: 90px; |
||||
height: 27px; |
||||
top: 0; |
||||
`,
|
||||
mobileHeaderLogo: css` |
||||
width: 77px; |
||||
height: 24px; |
||||
`,
|
||||
userAccountLogo: css` |
||||
width: 6.37rem; |
||||
height: 2.465rem; |
||||
`,
|
||||
}, |
||||
termsLink: '/terms-and-conditions?client_id=insports-ott-web', |
||||
title: 'InSports TV - The Home of Sports Streaming', |
||||
} |
||||
@ -0,0 +1,42 @@ |
||||
import { css } from 'styled-components' |
||||
|
||||
import { rustat as platformRustat } from 'config/clients/rustat' |
||||
import { isMobileDevice } from 'config/userAgent' |
||||
|
||||
import { Background } from 'features/Background' |
||||
|
||||
import type { ClientConfig } from './types' |
||||
|
||||
export const rustat: ClientConfig = { |
||||
...platformRustat, |
||||
background: Background, |
||||
styles: { |
||||
centerBlock: css` |
||||
margin-top: 9.15rem; |
||||
${isMobileDevice ? css` |
||||
margin-top: 107px; |
||||
@media screen and (orientation: landscape) { |
||||
width: 290px; |
||||
margin: auto; |
||||
} |
||||
` : ''};
|
||||
`,
|
||||
logo: css` |
||||
background-image: url(/images/insports-logo.svg); |
||||
background-position: center; |
||||
height: 85px; |
||||
width: 275px; |
||||
margin-bottom: 1.82rem; |
||||
|
||||
${isMobileDevice ? css` |
||||
margin-bottom: 15px; |
||||
width: 165px; |
||||
height: 50px; |
||||
@media screen and (orientation: landscape){ |
||||
width: 92px; |
||||
height: 22px; |
||||
} |
||||
` : ''}
|
||||
`,
|
||||
}, |
||||
} |
||||
@ -0,0 +1,22 @@ |
||||
import { usePageParams } from 'hooks' |
||||
import { useEffect, useState } from 'react' |
||||
import { Peak, getViewPeaks } from 'requests/getViewPeaks' |
||||
|
||||
export const useViewsPeaks = () => { |
||||
const { profileId, sportType } = usePageParams() |
||||
|
||||
const [peaks, setPeaks] = useState<Array<Peak>>([]) |
||||
|
||||
useEffect(() => { |
||||
(async () => { |
||||
const res = await getViewPeaks({ match_id: profileId, sport_id: sportType }) |
||||
if (res) { |
||||
setPeaks(res) |
||||
} |
||||
})() |
||||
}, [profileId, sportType]) |
||||
|
||||
return ( |
||||
{ peaks } |
||||
) |
||||
} |
||||
@ -0,0 +1,32 @@ |
||||
import { useMatchPageStore } from 'features/MatchPage/store' |
||||
import { memo, useMemo } from 'react' |
||||
|
||||
import { |
||||
PeakContainer, |
||||
PeaksList, |
||||
} from './styled' |
||||
|
||||
interface Props { |
||||
duration: number, |
||||
} |
||||
|
||||
export const Peaks: React.FC<Props> = memo(({ duration }) => { |
||||
const { peaks } = useMatchPageStore() |
||||
|
||||
const peaksPrepared = useMemo(() => peaks.map((p) => ( |
||||
{ |
||||
...p, |
||||
left: p.s / (duration / 1000) * 100, |
||||
width: (p.e - p.s) / (duration / 1000) * 100, |
||||
} |
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
)), [peaks.length, duration]) |
||||
|
||||
return ( |
||||
<PeaksList> |
||||
{peaksPrepared.map((p) => ( |
||||
<PeakContainer style={{ left: `${p.left}%`, width: `${p.width}%` }} /> |
||||
))} |
||||
</PeaksList> |
||||
) |
||||
}) |
||||
@ -0,0 +1,15 @@ |
||||
import styled from 'styled-components/macro' |
||||
|
||||
export const PeaksList = styled.div` |
||||
width: 100%; |
||||
height: 100%; |
||||
display: flex; |
||||
position: absolute; |
||||
z-index: 3; |
||||
` |
||||
|
||||
export const PeakContainer = styled.div` |
||||
position: relative; |
||||
height: 100%; |
||||
background-color: #5CDD86; |
||||
` |
||||
@ -0,0 +1,23 @@ |
||||
import { API_ROOT } from 'config' |
||||
import { callApi } from 'helpers' |
||||
|
||||
export interface Peak { |
||||
e: number, |
||||
s: number, |
||||
} |
||||
|
||||
export type Props = { |
||||
match_id: number, |
||||
sport_id: number, |
||||
} |
||||
|
||||
export const getViewPeaks = async ({ match_id, sport_id }: Props): Promise<Array<Peak>> => { |
||||
const config = { |
||||
method: 'GET', |
||||
} |
||||
|
||||
return callApi({ |
||||
config, |
||||
url: `${API_ROOT}/v1/views/peaks/${sport_id}/${match_id}`, |
||||
}) |
||||
} |
||||
Loading…
Reference in new issue