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

fix(background-media): avoid potential VPC setup race #12158

Merged
merged 5 commits into from
Dec 12, 2024
Merged
Changes from 2 commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import settings from '@carbon/ibmdotcom-utilities/es/utilities/settings/settings
import styles from './background-media.scss';
import { GRADIENT_DIRECTION, MOBILE_POSITION } from './defs';
import C4DImage from '../image/image';
import C4DVideoPlayer from '../video-player/video-player';
import C4DVideoPlayerContainer from '../video-player/video-player-container';
import C4DLeadSpace from '../leadspace/leadspace';
import { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';
Expand Down Expand Up @@ -50,13 +49,14 @@ class C4DBackgroundMedia extends C4DImage {
* Returns a class-name based on the Mobile Position type
*/
protected _getMobilePositionClass() {
const { videoPlayerContainer: video } = this;
return classMap({
[`${prefix}--background-media--container`]: true,
[`${prefix}--background-media--mobile-position`]: true,
[`${prefix}--background-media--mobile-position--${this.mobilePosition}`]:
this.mobilePosition,
[`${prefix}--background-media--image`]: this.videoPlayer === null,
[`${prefix}--background-media--video`]: this.videoPlayer !== null,
[`${prefix}--background-media--image`]: video === null,
[`${prefix}--background-media--video`]: video !== null,
});
}

Expand Down Expand Up @@ -92,23 +92,20 @@ class C4DBackgroundMedia extends C4DImage {
@property({ attribute: 'mobile-position', reflect: true })
mobilePosition = MOBILE_POSITION.BOTTOM;

/**
* Internal storage of the video ID
*/
@property()
videoId: string | null = null;

/**
* Current state of video playback
*/
@property()
videoIsPlaying = false;

/**
* Internal storage of the video player comonent
* Query selector to get the child video player container
*/
@property()
videoPlayer: C4DVideoPlayer | null = null;
protected get videoPlayerContainer() {
return this.querySelector(
`${c4dPrefix}-video-player-container`
) as C4DVideoPlayerContainer | null;
}

/**
* Conditionally runs super.render() if all children are `c4d-image-item`
Expand All @@ -122,40 +119,36 @@ class C4DBackgroundMedia extends C4DImage {
);
const assignedVideos = assignedElements.filter(
(el) => el.tagName === `${c4dPrefix}-video-player-container`.toUpperCase()
);
) as C4DVideoPlayerContainer[];

if (
assignedElements.length === assignedImages.length &&
!assignedVideos.length
) {
if (assignedImages.length && !assignedVideos.length) {
this.containsOnlyImages = true;
}

if (assignedVideos.length) {
const [video] = assignedVideos;
this.videoId = video.getAttribute('video-id');
this.videoPlayer = video.querySelector(`${c4dPrefix}-video-player`);
this.videoIsPlaying = (video as C4DVideoPlayerContainer).isPlaying;
m4olivei marked this conversation as resolved.
Show resolved Hide resolved
}
}

toggleVideoState() {
this.videoPlayer?.userInitiatedTogglePlaybackState();
this.videoIsPlaying = !this.videoIsPlaying;
const { videoPlayerContainer: video } = this;

if (video?.isPlaying) {
video.pauseAllVideos();
} else {
video?.playAllVideos();
}
}

renderVideoControls() {
const { toggleVideoState, videoIsPlaying } = this;
const { toggleVideoState, videoPlayerContainer } = this;
const { isPlaying } = videoPlayerContainer ?? {};

return html`
<button
part="controls"
@click=${toggleVideoState}
class="${prefix}--video-player__controls"
aria-pressed="${!videoIsPlaying}"
aria-label="${videoIsPlaying ? 'Pause the video' : 'Play the video'}"
aria-pressed="${!isPlaying}"
aria-label="${isPlaying ? 'Pause the video' : 'Play the video'}"
hasTooltip>
${videoIsPlaying ? pauseIcon() : playIcon()}
${isPlaying ? pauseIcon() : playIcon()}
</button>
`;
}
Expand Down Expand Up @@ -186,7 +179,7 @@ class C4DBackgroundMedia extends C4DImage {
this.gradientHidden = true;
}

if (this.hasAttribute('default-src') && !this.videoId) {
if (this.hasAttribute('default-src') && !this.videoPlayerContainer) {
this.containsOnlyImages = true;
}
}
Expand All @@ -203,7 +196,7 @@ class C4DBackgroundMedia extends C4DImage {
<slot @slotchange="${this._handleBackgroundMedia}"></slot>
</div>
</div>
${this.videoId ? this.renderVideoControls() : ''}
${this.videoPlayerContainer ? this.renderVideoControls() : ''}
`;
}

Expand Down
Loading