Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat / live channels screen with EPG view #113

Merged
merged 102 commits into from
Aug 5, 2022
Merged
Changes from 1 commit
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
a06ee35
chore(project): add 24x7 live channels with epg in readme
ChristiaanScheermeijer Jul 15, 2022
a3983cf
chore(epg): add epg to commit scopes
ChristiaanScheermeijer Jul 19, 2022
d9a4f2d
feat(epg): add EpgService and schedule data fixtures
ChristiaanScheermeijer Jul 19, 2022
719cf8f
test(epg): use correct properties for startTime and endTime
ChristiaanScheermeijer Jul 19, 2022
15bac4a
test(epg): use vi-fetch for epg tests
ChristiaanScheermeijer Jul 20, 2022
9b11c70
chore(epg): add more test cases and refactor epg service
ChristiaanScheermeijer Jul 20, 2022
9ad3104
chore(epg): log rejected programs in debug env
ChristiaanScheermeijer Jul 20, 2022
4e47144
feat(epg): add authentication header when scheduleToken is defined
ChristiaanScheermeijer Jul 20, 2022
f10d929
Merge pull request #119 from jwplayer/feat/add-support-for-schedule-t…
ChristiaanScheermeijer Jul 20, 2022
d0f41a0
feat(epg): fill schedule with static program when empty
ChristiaanScheermeijer Jul 20, 2022
3ac9179
test(epg): use fake timers to test start and end time
ChristiaanScheermeijer Jul 20, 2022
b9b921e
chore(project): translation fixes
ChristiaanScheermeijer Jul 20, 2022
fdba70d
feat(epg): use different static program when schedule fails to load
ChristiaanScheermeijer Jul 20, 2022
abaf7bb
Merge pull request #120 from jwplayer/feat/add-static-epg-program
ChristiaanScheermeijer Jul 21, 2022
2ac2eb1
feat(epg): add schedule demo mode
ChristiaanScheermeijer Jul 21, 2022
d96e1a5
Merge pull request #118 from jwplayer/feat/add-epg-service
ChristiaanScheermeijer Jul 21, 2022
c11e72d
refactor(project): refactor Video and Cinema components
ChristiaanScheermeijer Jul 21, 2022
c8f622c
chore(project): fix tests and watch history not working properly
ChristiaanScheermeijer Jul 21, 2022
9c798d7
chore(project): update snapshots
ChristiaanScheermeijer Jul 21, 2022
6934725
chore(project): fix e2e tests
ChristiaanScheermeijer Jul 22, 2022
35de71f
refactor(project): refactor fixes and improvements
ChristiaanScheermeijer Jul 22, 2022
17bafdd
chore(project): update snapshots
ChristiaanScheermeijer Jul 22, 2022
981feae
Merge pull request #122 from jwplayer/feat/add-epg-demo-mode
ChristiaanScheermeijer Jul 22, 2022
e80eeac
Merge branch 'feat/live-channels-view-with-epg' into feat/add-live-ch…
ChristiaanScheermeijer Jul 22, 2022
a275623
refactor: rename Video component to VideoDetails
ChristiaanScheermeijer Jul 22, 2022
eb45b84
chore: add comment to ignore exhaustive-deps
ChristiaanScheermeijer Jul 22, 2022
8a08f71
chore: remove old snapshot
ChristiaanScheermeijer Jul 22, 2022
6608470
refactor: rename metadata props in VideoDetails component
ChristiaanScheermeijer Jul 22, 2022
5c268b7
refactor: make player required
ChristiaanScheermeijer Jul 22, 2022
d727d40
refactor: extract trailer and favorite buttons from VideoDetails
ChristiaanScheermeijer Jul 22, 2022
8cb6a42
refactor: move FavoritesWarning to FavoriteButton container
ChristiaanScheermeijer Jul 22, 2022
91d13a3
refactor(video): ignore watch progress when disabled
ChristiaanScheermeijer Jul 22, 2022
bfe4d20
feat(epg): add live channels layout and epg
ChristiaanScheermeijer Jul 22, 2022
5d95fd2
refactor: translation improvements
ChristiaanScheermeijer Jul 25, 2022
c078e8e
chore: build deploy previews for feature branches
ChristiaanScheermeijer Jul 25, 2022
05943b2
chore: remove semicolon in favorite button
ChristiaanScheermeijer Jul 25, 2022
b2481e8
Merge pull request #124 from jwplayer/feat/add-live-channels-layout
ChristiaanScheermeijer Jul 25, 2022
ec8d56e
feat(epg): add start from beginning button
ChristiaanScheermeijer Jul 25, 2022
25120cf
chore: add curly eslint rule and add braces
ChristiaanScheermeijer Jul 26, 2022
b55e119
refactor(epg): refactor hooks and add code comments
ChristiaanScheermeijer Jul 26, 2022
6d40f9a
chore: fix eslint error
ChristiaanScheermeijer Jul 26, 2022
7ac8027
Merge pull request #129 from jwplayer/feat/live-channels-start-from-t…
ChristiaanScheermeijer Jul 27, 2022
11ee74e
feat(epg): allow channel selection by clicking on the logo
ChristiaanScheermeijer Jul 27, 2022
6f03f7b
feat(epg): update program information and remove static program
ChristiaanScheermeijer Jul 27, 2022
46987df
feat(epg): refetch live channel schedules every 15 minutes
ChristiaanScheermeijer Jul 28, 2022
56435e9
feat(epg): allow deeplinking to live channel
ChristiaanScheermeijer Jul 28, 2022
924edf4
Merge pull request #130 from jwplayer/feat/update-program-information
ChristiaanScheermeijer Jul 28, 2022
e186c97
feat(epg): add epg channel item
RCVZ Jul 26, 2022
7467792
feat(epg): add epg program item
RCVZ Jul 26, 2022
c2252be
feat(epg): add epg timelin compontent
RCVZ Jul 26, 2022
3fac9bd
feat(epg): add timeline controls to epg
RCVZ Jul 27, 2022
0456aac
chore(epg): tweaked design of channel and program
RCVZ Jul 27, 2022
a4e2bb2
feat(epg): styled epg according to design
RCVZ Jul 28, 2022
721f162
feat(epg): add epg loading indicator
RCVZ Jul 28, 2022
8d9c2ed
chore(epg): add translation key
RCVZ Jul 28, 2022
712b157
feat(epg): add ended state to epgprogram
RCVZ Jul 28, 2022
dc40f76
chore: pr feedback
RCVZ Jul 28, 2022
2f85469
style: white space
RCVZ Jul 28, 2022
f9f309b
Merge pull request #131 from jwplayer/feat/add-epg-channel-program-co…
RCVZ Jul 28, 2022
43a9f30
Merge pull request #132 from jwplayer/feat/support-deeplinking-to-cha…
ChristiaanScheermeijer Jul 28, 2022
969c906
feat(epg): add channel active state and click action
ChristiaanScheermeijer Jul 28, 2022
793af01
feat(epg): implement catchup hours mechanism
ChristiaanScheermeijer Jul 28, 2022
9ce9321
feat(epg): scroll to now when clicking a channel
ChristiaanScheermeijer Jul 28, 2022
3adba3d
chore(epg): implemented design feedback
RCVZ Jul 29, 2022
65ca0ce
chore(epg): design tweaks
RCVZ Jul 29, 2022
622207d
fix(epg): livetag always visible on mobile
RCVZ Jul 29, 2022
211b05d
chore: add correct aria-labels to icon buttons
RCVZ Jul 29, 2022
97b234f
feat(epg): show correct time for locale
ChristiaanScheermeijer Jul 29, 2022
e71b0d9
feat(epg): update start and end date to redraw timeline
ChristiaanScheermeijer Jul 29, 2022
9857963
chore: use playlist ids from e2e property
ChristiaanScheermeijer Jul 29, 2022
2c22736
Merge pull request #133 from jwplayer/feat/epg-design-improvements
ChristiaanScheermeijer Jul 29, 2022
41d57c9
chore: live playlist id correction
ChristiaanScheermeijer Jul 29, 2022
a484fe7
chore: remove unused file
ChristiaanScheermeijer Jul 29, 2022
a1b768c
chore(epg): rename isSmall to isMobile
ChristiaanScheermeijer Jul 29, 2022
cd7ff65
Merge pull request #126 from jwplayer/feat/add-live-channels-layout-a…
ChristiaanScheermeijer Jul 29, 2022
350cc30
chore(project): update vitest and add testing library hooks
ChristiaanScheermeijer Aug 1, 2022
286a439
test(epg): add test for catchup hours in playlist item
ChristiaanScheermeijer Aug 1, 2022
4128444
test(epg): add tests for epg hooks
ChristiaanScheermeijer Aug 1, 2022
22b4427
chore(project): update vite to 3.0.4
ChristiaanScheermeijer Aug 1, 2022
b428b1a
chore(project): fix data fixture type
ChristiaanScheermeijer Aug 1, 2022
9cda898
chore(project): fix prettier error
ChristiaanScheermeijer Aug 1, 2022
bdcf4b0
Merge pull request #135 from jwplayer/feat/add-unit-tests-for-hooks-a…
ChristiaanScheermeijer Aug 1, 2022
40cfe9f
fix(epg): update channel when data changes
ChristiaanScheermeijer Aug 1, 2022
ed131d4
chore(project): improve code comments
ChristiaanScheermeijer Aug 1, 2022
af205ae
fix(epg): demo mode in different timezones
ChristiaanScheermeijer Aug 3, 2022
6de8811
fix(epg): last hour not visible in timeline
ChristiaanScheermeijer Aug 3, 2022
19ec7fa
fix(epg): outline with border-radius not working in Safari
ChristiaanScheermeijer Aug 3, 2022
d19c8ff
fix(epg): mobile epg layout improvements and scroll to top
ChristiaanScheermeijer Aug 3, 2022
e51157a
chore(project): add todo for seek to beginning mechanism
ChristiaanScheermeijer Aug 3, 2022
457810e
feat(epg): rename watch from beginning button to watch from begin
ChristiaanScheermeijer Aug 3, 2022
a653555
feat(epg): improve live channels SEO
ChristiaanScheermeijer Aug 3, 2022
d14a51c
Merge pull request #138 from jwplayer/fix/epg-fixes-and-improvements
ChristiaanScheermeijer Aug 3, 2022
bcc3dfa
feat(e2e): add live channels end to end tests
RCVZ Aug 1, 2022
28e95b1
chore(epg): replaced waitForPlayerPlaying
RCVZ Aug 1, 2022
1083e1b
chore: clean up
RCVZ Aug 1, 2022
8b9706f
chore: increased time wait for epg
RCVZ Aug 2, 2022
4d523b6
chore: fix date mock locale
RCVZ Aug 2, 2022
a947a59
chore: pr comment rework
RCVZ Aug 2, 2022
b097a1b
chore(epg): update e2e tests for live channels
ChristiaanScheermeijer Aug 3, 2022
2896e85
Merge pull request #136 from jwplayer/feat/add-live-channel-e2e-tests
ChristiaanScheermeijer Aug 3, 2022
c8f648a
chore(epg): add minimal documentation
ChristiaanScheermeijer Aug 4, 2022
549bdf4
chore(epg): rename watch from begin to watch from start
ChristiaanScheermeijer Aug 4, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 27 additions & 5 deletions src/containers/PlaylistLiveChannels/PlaylistLiveChannels.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import Play from '#src/icons/Play';
import useLiveProgram from '#src/hooks/useLiveProgram';
import Tag from '#src/components/Tag/Tag';
import useBreakpoint, { Breakpoint } from '#src/hooks/useBreakpoint';
import { generateMovieJSONLD } from '#src/utils/structuredData';

function PlaylistLiveChannels({ playlist: { feedid, title, playlist } }: { playlist: Playlist }) {
function PlaylistLiveChannels({ playlist: { feedid, playlist } }: { playlist: Playlist }) {
const { t } = useTranslation('epg');
const breakpoint = useBreakpoint();
const isMobile = breakpoint === Breakpoint.xs;
Expand Down Expand Up @@ -128,19 +129,40 @@ function PlaylistLiveChannels({ playlist: { feedid, title, playlist } }: { playl
if (channel && feedid) history.replace(liveChannelsURL(feedid, channel.id));
}, [history, feedid, channel]);

// Loading
if (!channel) {
// Loading (channel and feedid must be defined)
if (!channel || !feedid) {
return <LoadingOverlay />;
}

const pageTitle = `${title} - ${siteName}`;
// SEO (for channels)
const canonicalUrl = `${window.location.origin}${liveChannelsURL(feedid, channel.id)}`;
const pageTitle = `${channel.title} - ${siteName}`;

return (
<>
<Helmet>
<title>{pageTitle}</title>
<link rel="canonical" href={canonicalUrl} />
ChristiaanScheermeijer marked this conversation as resolved.
Show resolved Hide resolved
<meta name="description" content={channelMediaItem?.description} />
<meta property="og:description" content={channelMediaItem?.description} />
<meta property="og:title" content={pageTitle} />
<meta property="og:type" content="video.other" />
{channelMediaItem?.image && <meta property="og:image" content={channelMediaItem.image?.replace(/^https:/, 'http:')} />}
{channelMediaItem?.image && <meta property="og:image:secure_url" content={channelMediaItem.image?.replace(/^http:/, 'https:')} />}
<meta property="og:image:width" content={channelMediaItem?.image ? '720' : ''} />
<meta property="og:image:height" content={channelMediaItem?.image ? '406' : ''} />
<meta name="twitter:title" content={pageTitle} />
<meta name="twitter:description" content={channelMediaItem?.description} />
<meta name="twitter:image" content={channelMediaItem?.image} />
<meta property="og:video" content={canonicalUrl.replace(/^https:/, 'http:')} />
<meta property="og:video:secure_url" content={canonicalUrl.replace(/^http:/, 'https:')} />
<meta property="og:video:type" content="text/html" />
<meta property="og:video:width" content="1280" />
<meta property="og:video:height" content="720" />
{channelMediaItem?.tags?.split(',').map((tag) => (
<meta property="og:video:tag" content={tag} key={tag} />
))}
{channelMediaItem ? <script type="application/ld+json">{generateMovieJSONLD(channelMediaItem)}</script> : null}
</Helmet>
{channelMediaItem && (
<Cinema
Expand All @@ -167,7 +189,7 @@ function PlaylistLiveChannels({ playlist: { feedid, title, playlist } }: { playl
<>
<StartWatchingButton
item={channelMediaItem}
playUrl={addQueryParams(liveChannelsURL(feedid || '', channelId, true), {
playUrl={addQueryParams(liveChannelsURL(feedid, channelId, true), {
start: isVod ? program?.startTime : undefined,
end: isVod ? program?.endTime : undefined,
})}
Expand Down