Untitled

 avatar
unknown
plain_text
2 years ago
22 kB
2
Indexable
import React from 'react';
import { Card, Carousel, Text, View } from 'react-native-ui-lib';
import { Image } from 'react-native';
import colors from '../../../rb-constants/colors';
import { abbreviateNumber } from '../../../../utils/number_formatter'
import Icon from 'react-native-vector-icons/FontAwesome';
import messages from './messages';

import images from '../../../rb-constants/images';
type Props = {
    report: any;
    company?: any;
};
const OverviewYoutube = ({ report, company }: Props) => {
    const socialMediaType = "youtube";
    const secondsToHms = (d) => {
        d = Number(d);
        const h = Math.floor(d / 3600);
        const m = Math.floor((d % 3600) / 60);
        const s = Math.floor((d % 3600) % 60);

        const hDisplay = h < 10 ? `0${h}:` : `${h}:`;
        const mDisplay = m < 10 ? `0${m}:` : `${m}:`;
        const sDisplay = s < 10 ? `0${s}` : s;

        return hDisplay + mDisplay + sDisplay;
    }
    const getData = (socialMediaData: any, reportType: any) => {
        const socialType = socialMediaData.type;
        if (socialMediaData.status === 'EXIST') {
            if (socialType === 'youtube') {
                const pageInsights = socialMediaData.pageInsights;

                let totalClicks = 0;
                let cardClicks = null;
                let annotationClicks = null;
                let diffCardClicks = 0;
                let diffAnnotationClicks = 0;

                let totalInteractions = 0;
                let likes = null;
                let dislikes = null;
                let comments = null;
                let shares = null;
                let diffLikes = 0;
                let diffDislikes = 0;
                let diffComments = 0;
                let diffShares = 0;

                let videoViews = null;
                let videoCount = null;
                let desktopVideoViews = null;
                let mobileVideoViews = null;
                let tabletVideoViews = null;
                let tvVideoViews = null;
                let averageVideoViewDuration = 0;
                let averageVideoViewPercentage = null;
                let mostVideoViews = null;

                let lowestVideoViews = null;

                let diffVideoCount = 0;
                let diffDesktopVideoViews = 0;
                let diffMobileVideoViews = 0;
                let diffTabletVideoViews = 0;
                let diffTvVideoViews = 0;
                let diffAverageVideoViewDuration = 0;
                let diffAverageVideoViewPercentage = 0;
                let diffMostVideoViews = 0;
                let diffLowestVideoViews = 0;

                let totalImpressions = 0;
                let adImpressions = null;
                let annotationImpressions = null;
                let annotationClickableImpressions = null;
                let cardImpressions = null;
                let cardTeaserImpressions = null;
                let diffAdImpressions = 0;
                let diffAnnotationImpressions = 0;
                let diffAnnotationClickableImpressions = 0;
                let diffCardImpressions = 0;
                let diffCardTeaserImpressions = 0;

                const subscriberCount = socialMediaData.numberOfFollowers;
                let subscribersGained = null;
                let subscribersLost = null;
                let diffSubscribersGained = 0;
                let diffSubscribersLost = 0;

                if (pageInsights) {
                    cardClicks = pageInsights.cardClicks;
                    annotationClicks = pageInsights.annotationClicks;
                    dislikes = pageInsights.videoDislikes;
                    videoViews = pageInsights.videoViews;
                    desktopVideoViews = pageInsights.desktopVideoViews;
                    mobileVideoViews = pageInsights.mobileVideoViews;
                    tabletVideoViews = pageInsights.tabletVideoViews;
                    tvVideoViews = pageInsights.tvVideoViews;
                    averageVideoViewDuration = secondsToHms(
                        pageInsights.averageVideoViewDuration,
                    );
                    averageVideoViewPercentage = pageInsights.averageVideoViewPercentage;
                    mostVideoViews = pageInsights.mostVideoViews;
                    lowestVideoViews = pageInsights.lowestVideoViews;
                    adImpressions = pageInsights.adImpressions;
                    annotationImpressions = pageInsights.annotationImpressions;
                    annotationClickableImpressions =
                        pageInsights.annotationClickableImpressions;
                    cardImpressions = pageInsights.cardImpressions;
                    cardTeaserImpressions = pageInsights.cardTeaserImpressions;
                    subscribersGained = pageInsights.subscribersGained;
                    subscribersLost = pageInsights.subscribersLost;

                    diffCardClicks = pageInsights.cardClicksChange;
                    diffAnnotationClicks = pageInsights.annotationClicksChange;
                    diffDislikes = pageInsights.videoDislikesChange;
                    diffDesktopVideoViews = pageInsights.desktopVideoViewsChange;
                    diffMobileVideoViews = pageInsights.mobileVideoViewsChange;
                    diffTabletVideoViews = pageInsights.tabletVideoViewsChange;
                    diffTvVideoViews = pageInsights.tvVideoViewsChange;
                    diffAverageVideoViewDuration =
                        pageInsights.averageVideoViewDurationChange;
                    diffAverageVideoViewPercentage =
                        pageInsights.averageVideoViewPercentageChange;
                    diffMostVideoViews = pageInsights.mostVideoViewsChange;
                    diffLowestVideoViews = pageInsights.lowestVideoViewsChange;
                    diffAdImpressions = pageInsights.adImpressionsChange;
                    diffAnnotationImpressions = pageInsights.annotationImpressionsChange;
                    diffAnnotationClickableImpressions =
                        pageInsights.annotationClickableImpressionsChange;
                    diffCardImpressions = pageInsights.cardImpressionsChange;
                    diffCardTeaserImpressions = pageInsights.cardTeaserImpressionsChange;
                    diffSubscribersGained = pageInsights.subscribersGainedChange;
                    diffSubscribersLost = pageInsights.subscribersLostChange;
                }

                if (reportType === 'MONTHLY') {
                    likes = socialMediaData.likesLastMonth;
                    comments = socialMediaData.commentLastMonth;
                    shares = socialMediaData.sharesLastMonth;
                    videoCount = socialMediaData.numberOfPostsLastMonth;
                    diffLikes = likes - socialMediaData.likesPastMonth;
                    diffComments = comments - socialMediaData.commentPastMonth;
                    diffShares = shares - socialMediaData.sharesPastMonth;
                    diffVideoCount = videoCount - socialMediaData.numberOfPostsPastMonth;
                } else {
                    likes = socialMediaData.likesLastWeek;
                    comments = socialMediaData.commentLastWeek;
                    shares = socialMediaData.sharesLastWeek;
                    videoCount = socialMediaData.numberOfPostsLastWeek;
                    diffLikes = likes - socialMediaData.likesPastWeek;
                    diffComments = comments - socialMediaData.commentPastWeek;
                    diffShares = shares - socialMediaData.sharesPastWeek;
                    diffVideoCount = videoCount - socialMediaData.numberOfPostsPastWeek;
                }

                if (cardClicks) {
                    totalClicks += cardClicks;
                }
                if (annotationClicks) {
                    totalClicks += annotationClicks;
                }

                if (likes) {
                    totalInteractions += likes;
                }
                if (comments) {
                    totalInteractions += comments;
                }
                if (shares) {
                    totalInteractions += shares;
                }
                if (dislikes) {
                    totalInteractions += dislikes;
                }

                if (adImpressions) {
                    totalImpressions += adImpressions;
                }
                if (annotationImpressions) {
                    totalImpressions += annotationImpressions;
                }
                if (annotationClickableImpressions) {
                    totalImpressions += annotationClickableImpressions;
                }
                if (cardImpressions) {
                    totalImpressions += cardImpressions;
                }
                if (cardTeaserImpressions) {
                    totalImpressions += cardTeaserImpressions;
                }

                return [
                    {
                        header: messages.numberOfSubscriber.defaultMessage,
                        value: subscriberCount,
                        subvalues: [
                            {
                                header: messages.gain.defaultMessage,
                                value: subscribersGained,
                                diffValue: diffSubscribersGained,
                            },
                            {
                                header: messages.loss.defaultMessage,
                                value: subscribersLost,
                                diffValue: diffSubscribersLost,
                            },
                        ],
                    },
                    {
                        header: messages.impressions.defaultMessage,
                        value: totalImpressions,
                        subvalues: [
                            {
                                header: messages.annotationImpressions.defaultMessage,
                                value: annotationImpressions,
                                diffValue: diffAnnotationImpressions,
                            },
                            {
                                header: messages.annotationClickableImpressions.defaultMessage,
                                value: annotationClickableImpressions,
                                diffValue: diffAnnotationClickableImpressions,
                            },
                            {
                                header: messages.cardImpressions.defaultMessage,
                                value: cardImpressions,
                                diffValue: diffCardImpressions,
                            },
                            {
                                header: messages.cardTeaserImpressions.defaultMessage,
                                value: cardTeaserImpressions,
                                diffValue: diffCardTeaserImpressions,
                            },
                            {
                                header: messages.adImpressions.defaultMessage,
                                value: adImpressions,
                                diffValue: diffAdImpressions,
                            },
                        ],
                    },
                    {
                        header: messages.videoViews.defaultMessage,
                        value: videoViews,
                        subvalues: [
                            {
                                header: messages.desktopVideoViews.defaultMessage,
                                value: desktopVideoViews,
                                diffValue: diffDesktopVideoViews,
                            },
                            {
                                header: messages.mobileVideoViews.defaultMessage,
                                value: mobileVideoViews,
                                diffValue: diffMobileVideoViews,
                            },
                            {
                                header: messages.tabletVideoViews.defaultMessage,
                                value: tabletVideoViews,
                                diffValue: diffTabletVideoViews,
                            },
                            {
                                header: messages.tvVideoViews.defaultMessage,
                                value: tvVideoViews,
                                diffValue: diffTvVideoViews,
                            },
                            {
                                header: messages.averageVideoViewDuration.defaultMessage,
                                value: averageVideoViewDuration,
                                diffValue: diffAverageVideoViewDuration,
                            },
                            {
                                header: messages.averageVideoViewPercentage.defaultMessage,
                                value: averageVideoViewPercentage,
                                diffValue: diffAverageVideoViewPercentage,
                            },
                            {
                                header: messages.videoCount.defaultMessage,
                                value: videoCount,
                                diffValue: diffVideoCount,
                            },
                            {
                                header: messages.highestVideoViews.defaultMessage,
                                value: mostVideoViews,
                                diffValue: diffMostVideoViews,
                            },
                            {
                                header: messages.lowestVideoViews.defaultMessage,
                                value: lowestVideoViews,
                                diffValue: diffLowestVideoViews,
                            },
                        ],
                    },
                    {
                        header: messages.totalInteractions.defaultMessage,
                        value: totalInteractions,
                        subvalues: [
                            {
                                header: messages.likes.defaultMessage,
                                value: likes,
                                diffValue: diffLikes,
                            },
                            {
                                header: messages.dislikes.defaultMessage,
                                value: dislikes,
                                diffValue: diffDislikes,
                            },
                            {
                                header: messages.comments.defaultMessage,
                                value: comments,
                                diffValue: diffComments,
                            },
                            {
                                header: messages.shares.defaultMessage,
                                value: shares,
                                diffValue: diffShares,
                            },
                        ],
                    },
                    {
                        header: messages.buttonTaps.defaultMessage,
                        value: totalClicks,
                        subvalues: [
                            {
                                header: messages.cardClicks.defaultMessage,
                                value: cardClicks,
                                diffValue: diffCardClicks,
                            },
                            {
                                header: messages.annotationClicks.defaultMessage,
                                value: annotationClicks,
                                diffValue: diffAnnotationClicks,
                            },
                        ],
                    },
                ];
            }
        }
    }

    const connectionCheck = (connectList: any, type: any) => {
        let isConnection = false;

        if (connectList && connectList.length > 0) {
            connectList.forEach((item: any) => {
                if (item.type === type) {
                    isConnection = item.connect;
                }
            });
        }

        return isConnection;
    }
    const reportType = report?.data && report?.data?.type;
    const social = report?.data && report?.data?.score && report?.data?.score.social;
    const connectList = report?.data && report?.data?.connectList;
    const isConnectionError = !connectionCheck(
        connectList,
        socialMediaType.toUpperCase(),
    );
    const socialMediaData =
        social && social.find((obj: any) => obj.type === socialMediaType);

    let isError = false;
    let errorMessageType;

    if (isConnectionError) {
        errorMessageType = `${socialMediaType.toLowerCase()}ErrorMessage`;
    } else if (
        !socialMediaData ||
        socialMediaData.status !== 'EXIST' ||
        !reportType
    ) {
        isError = true;
        errorMessageType = 'companySocialNotExist';
    }

    let datas = [];
    if (!isError && !isConnectionError) {
        datas = getData(socialMediaData, reportType);
    } else {
        // datas = generateErrorObject(socialMediaType);
    }


    return (
        datas.length > 0 ? (
            <View>
                <Carousel>
                    {
                        datas.map((item) => (
                            <>
                                <Card center>
                                    <Text center grey40 text40BO>
                                        {item.header}
                                    </Text>
                                    <Text orange40 text10BO>
                                        {abbreviateNumber(item.value)}
                                    </Text>
                                </Card>
                                {item.subvalues.map((item: any) => (
                                    <Card centerH row >
                                        <>
                                            <View center flex>
                                                <Text text60BO>
                                                    {item.header}
                                                </Text>
                                            </View>
                                            <View flex>
                                                <Text center orange40 text30BO >
                                                    {abbreviateNumber(item.value)}
                                                </Text>
                                            </View>

                                            {
                                                item.diffValue > 0 ? (
                                                    <View flex centerH row center>
                                                        <Icon
                                                            name="arrow-up"
                                                            color={colors.Green}
                                                            size={25}
                                                            style={{ marginRight: 5 }}
                                                        />
                                                        <Text green30 text40BO>
                                                            {item.diffValue}
                                                        </Text>
                                                    </View>
                                                ) : item.diffValue < 0 ? (
                                                    <View flex row center>
                                                        <Icon
                                                            name="arrow-down"
                                                            color={colors.RedLighter}
                                                            style={{ marginRight: 5 }}
                                                            size={25}
                                                        />
                                                        <Text red40 text40BO>
                                                            {parseFloat(item.diffValue).toFixed(0)}
                                                        </Text>
                                                    </View>
                                                ) : (
                                                    <View row flex centerH center>
                                                        <Text grey40 text20BO>
                                                            -
                                                        </Text>
                                                    </View>
                                                )
                                            }

                                        </>
                                    </Card>
                                ))}
                            </>
                        ))
                    }
                </Carousel>
            </View>
        ) : (
            <View center margin-20><Text heading4 grey30>"Please connect your social media account to see the post."</Text>
                <Image style={{ width: 100, height: 100 }} source={images.warning} />

            </View>
        )
    )


}
export default OverviewYoutube;


Editor is loading...