Untitled
unknown
plain_text
2 years ago
17 kB
6
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 OverviewLinkedin = ({ report, company }: Props) => {
const socialMediaType = "linkedin";
const getData = (socialMediaData: any, reportType: any) => {
const socialType = socialMediaData.type;
if (socialMediaData.status === 'EXIST') {
if (socialType === 'linkedin') {
const pageInsights = socialMediaData.pageInsights;
let totalClicks = 0;
let careerPageClicks = null;
let websiteClicks = 0;
let desktopWebsiteClicks = null;
let mobileWebsiteClicks = null;
let diffCareerPageClicks = 0;
let diffDesktopWebsiteClicks = 0;
let diffMobileWebsiteClicks = 0;
let totalInteractions = 0;
let likes = null;
let comments = null;
let shares = null;
let diffLikes = 0;
let diffComments = 0;
let diffShares = 0;
let reach = 0;
let postCount = null;
const postReach = socialMediaData.totalMediaReach;
const avgPostReach = parseFloat(
socialMediaData.averagePostReach,
).toFixed(2);
let diffPostCount = 0;
const diffPostReach = socialMediaData.totalMediaReachChange;
const diffAvgPostReach = socialMediaData.averagePostReachChange
? 0
: parseFloat(socialMediaData.averagePostReachChange).toFixed(2);
let impressions = 0;
const postImpressions = socialMediaData.totalMediaImpressions;
const avgPostImpressions = parseFloat(
socialMediaData.averagePostImpressions,
).toFixed(2);
const mostPostImpressions = socialMediaData.mostPostImpressions;
const lowestPostImpressions = socialMediaData.lowestPostImpressions;
const diffPostImpressions = socialMediaData.totalMediaImpressionsChange;
const diffAvgPostImpressions = socialMediaData.averagePostImpressionsChange
? 0
: parseFloat(socialMediaData.averagePostImpressionsChange).toFixed(2);
const diffMostPostImpressions =
socialMediaData.mostPostImpressionsChange;
const diffLowestPostImpressions =
socialMediaData.lowestPostImpressionsChange;
let profileViews = 0;
let desktopProfileViews = 0;
let mobileProfileViews = 0;
let diffDesktopProfileViews = 0;
let diffMobileProfileViews = 0;
if (pageInsights) {
profileViews = pageInsights.profileViews;
desktopProfileViews = pageInsights.desktopProfileViews;
mobileProfileViews = pageInsights.mobileProfileViews;
diffDesktopProfileViews = pageInsights.desktopProfileViewsChange;
diffMobileProfileViews = pageInsights.mobileProfileViewsChange;
impressions = pageInsights.sharesImpressions;
reach = pageInsights.sharesReach;
careerPageClicks = pageInsights.careerPageClicks;
desktopWebsiteClicks = pageInsights.desktopWebsiteClicks;
mobileWebsiteClicks = pageInsights.mobileWebsiteClicks;
diffCareerPageClicks = pageInsights.careerPageClicksChange;
diffDesktopWebsiteClicks = pageInsights.desktopWebsiteClicksChange;
diffMobileWebsiteClicks = pageInsights.mobileWebsiteClicksChange;
}
if (reportType === 'MONTHLY') {
likes = socialMediaData.likesLastMonth;
comments = socialMediaData.commentLastMonth;
shares = socialMediaData.sharesLastMonth;
postCount = socialMediaData.numberOfPostsLastMonth;
diffLikes = likes - socialMediaData.likesPastMonth;
diffComments = comments - socialMediaData.commentPastMonth;
diffShares = shares - socialMediaData.sharesPastMonth;
diffPostCount = postCount - socialMediaData.numberOfPostsPastMonth;
} else {
likes = socialMediaData.likesLastWeek;
comments = socialMediaData.commentLastWeek;
shares = socialMediaData.sharesLastWeek;
postCount = socialMediaData.numberOfPostsLastWeek;
diffLikes = likes - socialMediaData.likesPastWeek;
diffComments = comments - socialMediaData.commentPastWeek;
diffShares = shares - socialMediaData.sharesPastWeek;
diffPostCount = postCount - socialMediaData.numberOfPostsPastWeek;
}
if (likes) {
totalInteractions += likes;
}
if (comments) {
totalInteractions += comments;
}
if (shares) {
totalInteractions += shares;
}
if (desktopWebsiteClicks) {
websiteClicks += desktopWebsiteClicks;
}
if (mobileWebsiteClicks) {
websiteClicks += mobileWebsiteClicks;
}
totalClicks += websiteClicks;
if (careerPageClicks) {
totalClicks += careerPageClicks;
}
return [
{
header: messages.profileVisits.defaultMessage,
value: profileViews,
subvalues: [
{
header: messages.desktopProfileViews.defaultMessage,
value: desktopProfileViews,
diffValue: diffDesktopProfileViews,
},
{
header: messages.mobileProfileViews.defaultMessage,
value: mobileProfileViews,
diffValue: diffMobileProfileViews,
},
],
},
{
header: messages.impressions.defaultMessage,
value: impressions,
subvalues: [
{
header: messages.postCount.defaultMessage,
value: postCount,
diffValue: diffPostCount,
},
{
header: messages.linkedinPostImpressions.defaultMessage,
value: postImpressions,
diffValue: diffPostImpressions,
},
{
header: messages.linkedinAvgPostImpressions.defaultMessage,
value: avgPostImpressions,
diffValue: diffAvgPostImpressions,
},
{
header: messages.highestPostImpressions.defaultMessage,
value: mostPostImpressions,
diffValue: diffMostPostImpressions,
},
{
header: messages.lowestPostImpressions.defaultMessage,
value: lowestPostImpressions,
diffValue: diffLowestPostImpressions,
},
],
},
{
header: messages.reach.defaultMessage,
value: reach,
subvalues: [
{
header: messages.postCount.defaultMessage,
value: postCount,
diffValue: diffPostCount,
},
{
header: messages.postReach.defaultMessage,
value: postReach,
diffValue: diffPostReach,
},
{
header: messages.avgPostReach.defaultMessage,
value: avgPostReach,
diffValue: diffAvgPostReach,
},
],
},
{
header: messages.totalInteractions.defaultMessage,
value: totalInteractions,
subvalues: [
{
header: messages.likes.defaultMessage,
value: likes,
diffValue: diffLikes,
},
{
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.careerPageTaps.defaultMessage,
value: careerPageClicks,
diffValue: diffCareerPageClicks,
},
{
header: messages.websiteTaps.defaultMessage,
value: websiteClicks,
diffValue: null,
},
{
header: messages.desktopWebsiteTaps.defaultMessage,
value: desktopWebsiteClicks,
diffValue: diffDesktopWebsiteClicks,
},
{
header: messages.mobileWebsiteTaps.defaultMessage,
value: mobileWebsiteClicks,
diffValue: diffMobileWebsiteClicks,
},
],
},
];
}
}
}
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);
}
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 OverviewLinkedin;
Editor is loading...