import React from 'react';
import { Animated, ScrollView, FlatList, Platform, Text, View, TouchableOpacity, Image, Dimensions, ActivityIndicator } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import styles from '../styles/Content';
import drawerStyles from '../styles/DrawerMenu';
import CustomIcons from '../components/CustomIcon';
import ContentListView from '../components/ContentListView';
import EmptyScreen from '../components/EmptyScreen';
import Chip from '../components/Chip';
import EStyleSheet from 'react-native-extended-stylesheet';
import DrawerLayout from 'react-native-drawer-layout';
import { translate } from '../locales/i18n';
import Spinner from 'react-native-spinkit';
import config from '../config/config';
import staticConfig from '../config/staticConfig';
import * as conProvider from '../utils/ConProvider';
import * as colProvider from '../utils/ColProvider';
import * as insProvider from '../utils/InsProvider';
import * as varProvider from '../utils/VarProvider';
import * as jaProvider from '../utils/JAProvider';
import * as connection from '../utils/Connection';
import * as apiProvider from '../utils/ApiProvider';
import * as storageProvider from '../utils/StorageProvider';
import * as analyticsProvider from '../utils/AnalyticsProvider';
import * as setProvider from '../utils/SetProvider';
import * as notProvider from '../utils/NotProvider';
import screenNames from '../config/screenNames';
import Toast from '@remobile/react-native-toast';
import RNFetchBlob from 'rn-fetch-blob';
import NativeReachabilityModule from '../components/NativeReachabilityModule';
import VPNModule from '../components/VPNModule';
import ArticleLoader from '../components/ArticleLoader';
import Modal from 'react-native-modal';
import AsyncStorage from '@react-native-async-storage/async-storage';
import imageJson from '../config/imageJson';
import guideImageJson from '../config/guideImageJson';
import GuideView from '../components/GuideView';
import ActionSheet from '../components/ActionSheet';
var contentList, currentType, noMoreData, isInfiniteOn, currentTitle = "", activeType, favIndex = 0, fromDidMount, modalObserver, conVPNObserver, menuItemId;
var typeList = [];
var pagingCount = config.contentPagingCount;
var cloneIt, alreadyLoaded;
var currentRandomId, currentRandomTypeId, isRootCall, isListFromGraph;
var shouldShowJournalDetail, modalWidth, modalHeight, multiUrlsList = [], graphError;
var addVPNPopup = false;
export default class Content extends React.Component {
constructor(props) {
super(props);
this.state = {
isCardView: false,
contentList: [],
footerLoading: false,
contentLoading: true,
contentLength: 0,
errorModal: false,
pubFilters: [],
refreshTypes: false,
isDrawerOn: false,
drawerLockMode: "locked-closed",
showGuide: false,
multiUrlsView: false,
isConnected: connection.isConnectedFun(),
isVPNConfigAccepted: true,
isVPNOptional: true
};
graphError = "";
contentList = [];
isListFromGraph = false;
currentType = null;
activeType = null;
currentTitle = "";
menuItemId = "";
typeList = [];
alreadyLoaded = true;
isInfiniteOn = false;
varProvider.drawerLockMode = "locked-closed";
addVPNPopup = false;
this.openMenu = this.openMenu.bind(this);
this.callbackFun = this.callbackFun.bind(this);
this.buttonCallback = this.buttonCallback.bind(this);
this.rootButtonCallback = this.rootButtonCallback.bind(this);
this.callbackFavorite = this.callbackFavorite.bind(this);
this.removeItem = this.removeItem.bind(this);
this.openContent = this.openContent.bind(this);
this.openVpnInfo = this.openVpnInfo.bind(this);
this.callbackVpnInfo = this.callbackVpnInfo.bind(this);
this.favoriteContent = this.favoriteContent.bind(this);
this.viewDetails = this.viewDetails.bind(this);
this.successFetchingImage = this.successFetchingImage.bind(this)
this.errorFetchingImage = this.errorFetchingImage.bind(this)
this.insertIntoTypeList = this.insertIntoTypeList.bind(this)
this.insertIntoContentList = this.insertIntoContentList.bind(this)
this.initMaxHeight = this.initMaxHeight.bind(this)
this.shakeAnimation = new Animated.Value(0)
}
static navigationOptions = ({ navigation, route }) => {
return {
headerShown: false
}
}
componentDidMount() {
fromDidMount = true;
varProvider.currentScreen = screenNames.Content
this.initMaxHeight();
Dimensions.addEventListener("change", this.initMaxHeight);
this.rootButtonCallback();
AsyncStorage.getItem("shouldShowJournalDetail").then((value) => {
shouldShowJournalDetail = value;
})
setProvider.showGuide("iseResourcesGuideShown", screenNames.Content).then((res) => {
if (res) {
this.setState({ showGuide: true });
}
else {
this.checkIfVPNCreated();
}
})
varProvider.connectionObserver.subscribe(() => {
let isConnected = connection.isConnectedFun();
if (!isConnected) {
this.showNoInternetError();
}
if (isConnected && this.state.errorModal)
this.rootButtonCallback();
this.setState({
isConnected: isConnected,
refreshTypes: !this.state.refreshTypes
});
});
modalObserver = varProvider.modalClosedObserver.subscribe((data) => {
if (varProvider.currentScreen === screenNames.Content && data.other) {
if (this.state.permissionModal || this.state.showGuide || this.state.multiUrlsView) {
this.setState({
permissionModal: false,
showGuide: false
});
this.closeActionSheetModal()
}
if (varProvider.modalClosedObserver) {
let resJson = {
"home": true,
"other": false,
"screen": screenNames.Content,
}
varProvider.modalClosedObserver.next(resJson);
}
}
})
conVPNObserver = varProvider.vpnObserver.subscribe((res) => {
this.setState({
isVPNConfigAccepted: res
})
})
this._unsubscribe = this.props.navigation.addListener('focus', () => {
this.isFocused();
});
}
componentWillUnmount() {
modalObserver.unsubscribe();
conVPNObserver.unsubscribe();
this._unsubscribe();
}
isFocused() {
const { params } = this.props.route;
if (params) {
//console.log("params::", params);
// [deep link] if contentType is received from params, then set it as a active biblio type and load content list
if (menuItemId != params?.menuItemId) { //this condition handle for if user have clicked or received same deeplink url
if (params?.contentType) {
currentType = params?.contentType;
menuItemId = params?.menuItemId;
currentTitle = params?.cTitle;
}
//deeplink use case: when user have already text deeplink tab active and another deeplink with text or without text will come then we'll clear the filters before.
var tempFilters = this.state.pubFilters;
tempFilters?.map((item) => {
item.active = false;
});
// [deep link] if searchText is received from params, then set it as a active filter and load content list accordingly
if (currentType == params?.contentType && params?.searchText) {
let originalSearchText = params.searchText;
let trimmedSearchText = originalSearchText.trim();
let filterJson = [
{
"active": true,
"chipTitle": 'Search text: "' + originalSearchText + '"',
"value": trimmedSearchText,
"originalSearchText": originalSearchText
}
];
this.setState({ pubFilters: filterJson })
}
}
}
varProvider.currentScreen = currentType ? currentType : screenNames.Content;
if (varProvider.isContentTabChanged) {
if (!this.state.showGuide && !fromDidMount) {
this.checkIfVPNCreated();
}
}
fromDidMount = false;
AsyncStorage.getItem("contentUpdate").then((value) => {
let isTabChanged = varProvider.isContentTabChanged;
if (value == "true") {
this.drawer.closeDrawer();
AsyncStorage.setItem("contentUpdate", "false");
if (!alreadyLoaded) {
this.rootButtonCallback();
currentType = null;
}
} else {
if (varProvider.isContentTabChanged) {
varProvider.isContentTabChanged = false;
//don't call when component will mount called
if (!alreadyLoaded) {
//console.log("alreadyLoaded bgGetContent");
this.bgGetContent();
}
}
}
alreadyLoaded = false;
if (isTabChanged) {
this.logScreenViewEvent(true);
if (currentType) {
this.logScreenViewEvent(false);
}
}
});
}
initMaxHeight() {
var sheight = Dimensions.get('window').height;
var swidth = Dimensions.get('window').width;
if (sheight < 480) {
modalHeight = 250;
}
else {
modalHeight = sheight / 2;
}
if (swidth < 480) {
modalWidth = "100%";
}
else if (swidth < 920) {
modalWidth = "70%";
}
else {
modalWidth = "60%";
}
this.setState({ refresh: !this.state.refresh });
}
logScreenViewEvent(isFirstTime) {
if (varProvider.lastTabName != currentType) {
var openScreen = isFirstTime ? screenNames.Content : currentType;
varProvider.currentScreen = openScreen;
let screenViewJson = {
"name": openScreen,
"previous": varProvider.lastTabName
};
analyticsProvider.logAnalyticsJson("ScreenView", screenViewJson);
varProvider.lastTabName = openScreen;
}
}
startShake = () => {
Animated.sequence([
Animated.timing(this.shakeAnimation, { toValue: 10, duration: 100, useNativeDriver: true }),
Animated.timing(this.shakeAnimation, { toValue: -10, duration: 100, useNativeDriver: true }),
Animated.timing(this.shakeAnimation, { toValue: 10, duration: 100, useNativeDriver: true }),
Animated.timing(this.shakeAnimation, { toValue: 0, duration: 100, useNativeDriver: true })
]).start();
}
async checkIfVPNCreated() {
let aOptionalProxy = await storageProvider.getItem("optionalProxy");
if (aOptionalProxy == "false") {
varProvider.isVPNOptional = true;
}
// if vpn is mandatory then only check and configure vpn
if (!varProvider.isVPNOptional) {
if (Platform.OS == "ios") {
var isVpnCreated = await NativeReachabilityModule.checkIfVPNCreated();
if (isVpnCreated) {
AsyncStorage.getItem("isVPNLogged").then((isLogged) => {
if (isLogged != "true") {
this.logVPNEvent(true);
AsyncStorage.setItem("isVPNLogged", "true");
}
});
conProvider.updateProxyDetailsForIos(false);
this.setState({
isVPNConfigAccepted: true
});
} else {
// vpn analytics log
this.logVPNEvent(false);
this.setState({
permissionModal: true
});
}
} else {
if (varProvider.enableProxy) {
var isVPNConfigured = await VPNModule.isVPNConfigured();
// console.log("check if vpn created: " + isVPNConfigured);
if (isVPNConfigured) {
AsyncStorage.getItem("isVPNLogged").then((isLogged) => {
if (isLogged != "true") {
this.logVPNEvent(true);
AsyncStorage.setItem("isVPNLogged", "true");
}
});
conProvider.updateProxyDetailsForAndroid(false);
this.setState({
isVPNConfigAccepted: true
});
} else {
// vpn analytics log
this.logVPNEvent(false);
this.setState({
permissionModal: true
});
}
}
}
}
this.setState({
isVPNOptional: varProvider.isVPNOptional
});
}
logVPNEvent(isCreated) {
let vpnJson = {
"isConfigured": isCreated ? "true" : "false"
};
analyticsProvider.logAnalyticsJson("VPN", vpnJson);
}
rootButtonCallback() {
// console.log("rootButtonCallback");
graphError = ""
contentList = [];
this.setState({
contentLoading: true,
contentLength: 0,
refresh: !this.state.refresh,
pubFilters: [],
refreshTypes: false,
accessDenied: false,
errorModal: false,
drawerLockMode: "unlocked",
isButton: false,
errorLoading: false
});
varProvider.drawerLockMode = "unlocked";
this.startProcess();
}
buttonCallback() {
if (isRootCall) {
isRootCall = false;
this.rootButtonCallback();
} else {
graphError = ""
this.setState({
contentLoading: true,
contentLength: 0,
refreshTypes: false,
accessDenied: false,
errorModal: false,
drawerLockMode: "unlocked",
isButton: false,
errorLoading: false
});
varProvider.drawerLockMode = "unlocked";
var tempFilters = this.state.pubFilters;
this.callbackFun(tempFilters);
}
}
bgGetContent() {
this.startProcess();
}
// when internet is not connnected , the button press from errorModal will go to collection for saved actricle
gotoCollection = () => {
const { navigate } = this.props.navigation;
navigate('Collections');
}
//first check if email is verified or not
startProcess() {
if (connection.isConnectedFun()) {
insProvider.getUserProfile().then(() => {
//checking user status
this.checkUserStatus();
}).catch((error) => {
isRootCall = true;
this.contentError(error, 0);
this.offlineChecks(true);
});
} else {
//no internet. so, get the value of user status from local storage
this.offlineChecks(false);
}
}
//get userstatus and accordingly show appropriate message
checkUserStatus() {
// console.log("check user status function");
AsyncStorage.multiGet(["userStatus", "instituteName"]).then((data) => {
// console.log("asyncstorage multiget");
// console.log(data);
var userStatus = data[0][1];
var instituteName = data[1][1];
var msg, imagePath;
imagePath = imageJson.pending_approval;
if (userStatus == "APPROVED") {
this.startLoadingContent();
}
else if (userStatus == "BLOCKED") {
msg = translate("USER_ACCOUNT_BLOCKED_ERROR_TITLE", { instituteName: instituteName }) + " " + translate("USER_ACCOUNT_BLOCKED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "ARCHIVED") {
msg = translate("USER_ACCOUNT_ARCHIVED_ERROR_TITLE", { instituteName: instituteName }) + " " + translate("USER_ACCOUNT_ARCHIVED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "REJECTED") {
msg = translate("USER_ACCOUNT_REJECTED_ERROR_TITLE", { instituteName: instituteName }) + " " + translate("USER_ACCOUNT_REJECTED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "PENDING") {
msg = translate("USER_ACCOUNT_PENDING_ERROR_TITLE", { instituteName: instituteName }) + " " + translate("USER_ACCOUNT_PENDING_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "EXPIRED") {
msg = translate("USER_ACCOUNT_EXPIRED_ERROR_TITLE", { instituteName: instituteName }) + " " + translate("USER_ACCOUNT_EXPIRED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "REVOKED") {
msg = translate("USER_ACCOUNT_REVOKED_ERROR_TITLE", { instituteName: instituteName }) + " " + translate("USER_ACCOUNT_REVOKED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
});
}
offlineChecks(isError) {
AsyncStorage.multiGet(["userStatus", "verifyEmail"]).then((data) => {
var userStatus = data[0][1];
var verifyEmail = (data[1][1] == "true");
if (userStatus && verifyEmail) {
//if email is verified
this.offlineUserStatusCheck(userStatus);
} else {
//if no value found for verified email or value is false
//and if offline
//show no internet message on full screen
if (isError) {
//this function is called when some error has occured in fetching either userprofile
} else {
this.showNoInternetError();
}
}
});
}
showNoInternetError() {
if (this.drawer)
this.drawer.closeDrawer();
var msg = translate("INTERNET_EMPTY");
var imagePath = imageJson.no_internet;
var bottomText = translate("INTERNET_EMPTY_DATA1");
graphError = ""
this.setState({
accessDenied: true,
deniedMessage: msg,
contentLoading: false,
contentLength: 0,
errorModal: true,
drawerLockMode: "locked-closed",
imagePath: imagePath,
isButton: true,
bottomText: bottomText,
errorLoading: false,
multiUrlsView: false
});
varProvider.drawerLockMode = "locked-closed";
}
//show appropriate message according to user status
offlineUserStatusCheck(userStatus) {
var msg, imagePath;
imagePath = imageJson.pending_approval;
if (userStatus == "APPROVED") {
this.startLoadingContent();
}
else if (userStatus == "BLOCKED") {
msg = translate("USER_ACCOUNT_BLOCKED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_BLOCKED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "ARCHIVED") {
msg = translate("USER_ACCOUNT_ARCHIVED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_ARCHIVED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "REJECTED") {
msg = translate("USER_ACCOUNT_REJECTED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_REJECTED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "PENDING") {
msg = translate("USER_ACCOUNT_PENDING_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_PENDING_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "EXPIRED") {
msg = translate("USER_ACCOUNT_EXPIRED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_EXPIRED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
else if (userStatus == "REVOKED") {
msg = translate("USER_ACCOUNT_REVOKED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_REVOKED_E_RESOURCE_ERROR_DESCRIPTION");
this.showError(msg, imagePath);
}
}
startLoadingContent() {
//get menu item list
this.getMenuItemsList().then((data) => {
}).catch((error) => {
if (connection.isConnectedFun()) {
this.contentError(error, 0);
} else {
this.showNoInternetError();
}
});
}
insertIntoContentList(data, tempJson, localRandomId, isGraph) {
console.log("insertIntoContentList==========", data?.length, tempJson, localRandomId, isGraph);
if (localRandomId == currentRandomId) {
if (tempJson.type == currentType) {
this.contentSuccessPush(data, tempJson, isGraph);
}
} else {
console.log("insertIntoContentList else==========",);
}
setTimeout(() => {
isInfiniteOn = false;
}, 400);
}
//load institute content
loadContentList(tempJson) {
//console.log("loadContentList=================", tempJson);
currentRandomId = apiProvider.generateUUID();
var localRandomId = currentRandomId;
if (tempJson.type == staticConfig.favorite) {
//if filter is applied then directly get the result via graph query
if (!tempJson.isFilter) {
this.getContentSql(tempJson, localRandomId).then(() => {
this.getFavContentGraph(tempJson, localRandomId);
});
} else {
this.getFavContentGraph(tempJson, localRandomId);
}
}
else if (tempJson.type == staticConfig.customInstituteContent || tempJson.type == staticConfig.customLink) {
if (!tempJson.isFilter) {
this.getContentSql(tempJson, localRandomId).then(() => {
this.getContentItemsofMenuItemforUser(tempJson, localRandomId);
});
} else {
this.getContentItemsofMenuItemforUser(tempJson, localRandomId);
}
}
else {
//if filter is applied then directly get the result via graph query
if (!tempJson.isFilter) {
this.getContentSql(tempJson, localRandomId).then(() => {
//console.log("getContentGraph1", tempJson, localRandomId);
this.getContentGraph(tempJson, localRandomId);
});
} else {
// console.log("getContentGraph2");
this.getContentGraph(tempJson, localRandomId);
}
}
}
getContentSql(tempJson, localRandomId) {
return new Promise((resolve) => {
conProvider.getContentSql(tempJson).then((data) => {
if (data.length > 0) {
console.log("getContentSql", data?.length)
this.insertIntoContentList(data, tempJson, localRandomId, false);
}
resolve();
}).catch((error) => {
resolve();
console.log("getContentSql", error)
});
});
}
getFavContentGraph(tempJson, localRandomId) {
conProvider.getFavContentListGraph(tempJson).then((data) => {
console.log("get fav content list then");
this.insertIntoContentList(data, tempJson, localRandomId, true)
}).catch((error) => {
// console.log("get fav content list catch");
// console.log(error);
if (localRandomId == currentRandomId) {
if (tempJson.type == currentType) {
if (error == "ACCESSDENIED_EXPIRY") {
var msg = translate("USER_ACCOUNT_EXPIRED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_EXPIRED_E_RESOURCE_ERROR_DESCRIPTION");
var imagePath = imageJson.pending_approval;
this.showError(msg, imagePath);
} else {
this.contentError(error, tempJson.skip);
}
}
}
isInfiniteOn = false;
});
}
getContentGraph(tempJson, localRandomId) {
console.log("getContentGraph", tempJson, localRandomId);
conProvider.getContentListGraph(tempJson).then((data) => {
this.insertIntoContentList(data, tempJson, localRandomId, true)
console.log("getContentGraph get content list then", data?.length, tempJson, localRandomId, currentRandomTypeId);
// console.log(data);
}).catch((error) => {
// console.log("get content list catch");
// console.log(error);
if (localRandomId == currentRandomId) {
if (tempJson.type == currentType) {
if (error == "ACCESSDENIED_EXPIRY") {
var msg = translate("USER_ACCOUNT_EXPIRED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_EXPIRED_E_RESOURCE_ERROR_DESCRIPTION");
var imagePath = imageJson.pending_approval;
this.showError(msg, imagePath);
} else {
this.contentError(error, tempJson.skip);
}
}
}
isInfiniteOn = false;
});
}
getContentItemsofMenuItemforUser(tempJson, localRandomId) {
conProvider.getContentItemsofMenuItemforUser(tempJson).then((data) => {
this.insertIntoContentList(data, tempJson, localRandomId, true)
// console.log(data);
}).catch((error) => {
// console.log("get content list catch");
// console.log(error);
if (localRandomId == currentRandomId) {
if (tempJson.type == currentType) {
if (error == "ACCESSDENIED_EXPIRY") {
var msg = translate("USER_ACCOUNT_EXPIRED_ERROR_TITLE", { instituteName: varProvider.currentInstituteName }) + " " + translate("USER_ACCOUNT_EXPIRED_E_RESOURCE_ERROR_DESCRIPTION");
var imagePath = imageJson.pending_approval;
this.showError(msg, imagePath);
} else {
this.contentError(error, tempJson.skip);
}
}
}
isInfiniteOn = false;
});
}
//process content data
contentSuccessPush(data, tempJson, isGraph) {
console.log("contentSuccessPush::::::", data?.length, tempJson, isGraph);
if (data.length < 30 && isGraph) {
noMoreData = true;
}
var loadedId = [];
if (currentType == staticConfig.customLink || currentType == staticConfig.favorite) {
for (var k = 0; k < contentList.length; k++) {
if (contentList[k].isFetched) {
loadedId.push(contentList[k].id);
}
}
}
const { params } = this.props.route;
console.log("tempJson.skip", params);
if (tempJson.skip == 0) {
console.log("tempJson.skip");
contentList = [];
}
for (var i = 0; i < data.length; i++) {
var initials = data[i].title.charAt(0).toUpperCase();
var isFetched = false;
if (loadedId.length != 0) {
if (loadedId.indexOf(data[i].id) != -1) {
isFetched = true;
}
}
var type = data[i].type;
var issn = data[i].issn;
var eissn = data[i].eissn;
var cid = data[i].contentId;
var url = data[i].url;
var libCoverImage = data[i].libCoverImage;
var contentUpdatedAt = data[i].contentUpdatedAt
var contentImage = this.loadContentImageFast(issn, eissn, type, cid, libCoverImage, contentUpdatedAt);
var phImage = conProvider.getBgContentImage(type, url);
var smallImage = conProvider.getContentImageSmall(type, data);
var bgColor = conProvider.getContentBg(type);
var multiUrls = data[i].multiUrls ? JSON.parse(data[i].multiUrls) : null
contentList.push({
"id": data[i].id,
"title": data[i].title,
"libDescription": data[i].libDescription,
"url": url,
"type": type,
"publisherName": data[i].publisherName,
"isFavorite": data[i].isFavorite,
"image": contentImage,
"phImage": phImage,
"smallImage": smallImage,
"isFetched": isFetched,
"issn": issn,
"eissn": eissn,
"initials": initials,
"bgColor": bgColor,
"multiUrls": multiUrls,
"customInsContentId": data[i].customInsContentId,
"contentType": data[i].contentType,
});
}
isListFromGraph = isGraph;
console.log("contentList::===", contentList?.length);
graphError = ""
this.setState({
refresh: !this.state.refresh,
contentLoading: false,
footerLoading: false,
errorLoading: false,
contentLength: contentList.length,
accessDenied: false,
errorModal: false,
drawerLockMode: "unlocked"
});
varProvider.drawerLockMode = "unlocked";
}
//error to show when content fetching fails
contentError(error, skipVal) {
if (skipVal > pagingCount - 1) {
//error while fetching next 30 article
graphError = ""
this.setState({ contentLoading: false, footerLoading: false, errorLoading: false, contentLength: contentList.length });
} else {
connection.getGraphError(error).then((data) => {
graphError = data
this.setState({
errorLoading: true,
contentLoading: false,
footerLoading: false,
contentLength: contentList.length,
accessDenied: false,
errorModal: false,
drawerLockMode: "unlocked"
});
})
varProvider.drawerLockMode = "unlocked";
}
}
errorFetchingImage(contentItem) {
for (var i = 0; i < contentList.length; i++) {
if (contentList[i].id == contentItem.id) {
contentList[i].isFetched = false;
break;
}
}
this.setState({ refresh: !this.state.refresh });
}
successFetchingImage(contentItem) {
for (var i = 0; i < contentList.length; i++) {
if (contentList[i].id == contentItem.id) {
contentList[i].isFetched = true;
break;
}
}
this.setState({ refresh: !this.state.refresh });
}
loadContentImageFast(issn, eissn, contentType, cid, libCoverImage, contentUpdatedAt) {
var url;
if (contentType == staticConfig.database) {
if (libCoverImage === null) {
url = config.coverUrl + contentType.toLowerCase() + "/" + cid.concat(contentUpdatedAt ? "?v=" + contentUpdatedAt : "");
} else {
url = libCoverImage;
}
}
else if (contentType == staticConfig.link) {
url = config.s3AppSettingBucket + "institute/" + varProvider.currentInstituteId + "/contentItem/contentitem_" + cid;
}
else {
if (issn) {
url = config.coverUrl + contentType.toLowerCase() + "/" + issn + ".jpg".concat(contentUpdatedAt ? "?v=" + contentUpdatedAt : "");
} else if (eissn) {
url = config.coverUrl + contentType.toLowerCase() + "/" + eissn + ".jpg".concat(contentUpdatedAt ? "?v=" + contentUpdatedAt : "");
} else {
url = conProvider.getContentImage(contentType);
}
}
return url;
}
loadContentImage(contentItem) {
// console.log(contentItem);
var path = RNFetchBlob.fs.dirs.DocumentDir + "/" + contentItem.id + ".jpg";
RNFetchBlob.fs.exists(path).then((exist) => {
// console.log("content image exist: " + exist);
if (exist) {
for (var i = 0; i < contentList.length; i++) {
if (contentList[i].id == contentItem.id) {
contentList[i].image = "file://" + path;
break;
}
}
this.setState({ refresh: !this.state.refresh });
} else {
var issnOrIsbn;
if (contentItem.issn) {
issnOrIsbn = contentItem.issn;
this.writeContentImage(contentItem, issnOrIsbn, true);
} else if (contentItem.eissn) {
issnOrIsbn = contentItem.eissn;
this.writeContentImage(contentItem, issnOrIsbn, false);
}
}
});
}
writeContentImage(contentItem, issnOrIsbn, isIssn) {
// console.log("write content image");
// let dirs = RNFetchBlob.fs.dirs;
var path = RNFetchBlob.fs.dirs.DocumentDir + "/" + contentItem.id + ".jpg";
var url = config.coverUrl + contentItem.type.toLowerCase() + "/" + issnOrIsbn + ".jpg";
// console.log(url);
RNFetchBlob
.config({
fileCache: true,
// by adding this option, the temp files will have a file extension
path: path
})
.fetch('GET', url, {
//some headers ..
})
.then((res) => {
// the temp file path with file extension `png`
// console.log(res);
// console.log('The file saved to ', res.path());
if (res["respInfo"] && res["respInfo"]["headers"]) {
var types = colProvider.findValueOfProperty(res["respInfo"]["headers"], "content-type");
if (types.length != 0) {
var ctype = types[0];
if (ctype.indexOf("xml") == -1 && ctype.indexOf("html") == -1) {
var aPath = "file://" + res.path();
for (var i = 0; i < contentList.length; i++) {
if (contentList[i].id == contentItem.id) {
contentList[i].image = "file://" + aPath;
break;
}
}
this.setState({ refresh: !this.state.refresh });
}
}
}
})
}
createContentTitleList(data) {
var tempList = []
for (var i = 0; i < data.length; i++) {
tempList.push({
id: data[i].id,
title: data[i].title,
type: data[i].type,
iconName: (data[i].type.toUpperCase() == staticConfig.customLink || data[i].type.toUpperCase() == staticConfig.customInstituteContent || data[i].type.toUpperCase() == staticConfig.filtered) ? "icon_user_folder" : "icon_" + data[i].type.toLowerCase(),
active: false,
isExpanded: false,
containsContent: data[i].containsContent,
childMenuItems: data[i].childMenuItems ? this.createContentTitleList(JSON.parse(data[i].childMenuItems), data[i].type) : null
});
}
return tempList;
}
maintainTypeListState = (typeList) => {
for (var m = 0; m < typeList.length; m++) {
if (typeList[m].active) {
if (typeList[m].childMenuItems?.length > 0) {
let res = this.maintainTypeListState(typeList[m].childMenuItems)
if (res != null) {
return res
}
else {
return typeList[m]
}
}
else {
return typeList[m]
}
}
}
return null
}
// inserting the bibilolist data in typeList
async insertIntoTypeList(data, localRandomId, shouldFetchContentList) {
if (localRandomId == currentRandomTypeId) {
const { params } = this.props.route;
var activeItem = await this.maintainTypeListState(typeList)
typeList = [];
typeList = this.createContentTitleList(data);
// icon_user_folder
this.getBiblioContentList().then((data) => {
for (var i = 0; i < data.length; i++) {
if (data[i].type == staticConfig.favorite) {
typeList.push({
id: "fav_item",
title: data[i].title,
type: data[i].type,
iconName: "icon_" + data[i].type.toLowerCase(),
active: false,
containsContent: true,
});
console.log("getBiblioContentList::::", params, params?.contentType);
// if there is fav content item present and there is not any active item, then make fav section as active and show content
if (data[i].count != 0 && activeItem == null && !params?.contentType) {
typeList[typeList.length - 1].active = true;
currentType = typeList[typeList.length - 1].type;
currentTitle = typeList[typeList.length - 1].title;
menuItemId = typeList[typeList.length - 1].id
activeItem = typeList[typeList.length - 1];
console.log("first::::", params);
}
else if (params?.contentType) { //deeplink use case when user have fav and without fav item set to active tab item
currentType = params?.contentType;
currentTitle = params?.cTitle;
menuItemId = params?.menuItemId;
activeItem = {
id: params?.menuItemId,
title: params?.cTitle,
};
console.log("second::::", params);
}
favIndex = typeList.length - 1;
break;
}
}
//if typelist length is less than 2 then there won't be 2nd index in type list array
if (currentType == "" || currentTitle == "" || currentType == null) {
for (var m = 0; m < typeList.length; m++) {
typeList[m].active = false;
}
if (typeList[0].containsContent)
typeList[0].active = true;
typeList[0].isExpanded = true;
currentType = typeList[0].type;
currentTitle = typeList[0].title;
menuItemId = typeList[0].id
}
else {
this.updateTempList(typeList, activeItem, true)
currentTitle = activeItem == null ? typeList[0].title : activeItem.title;
menuItemId = activeItem == null ? typeList[0].id : activeItem.id
}
var tempFilters = this.state.pubFilters;
console.log("shouldFetchContentList:::::", shouldFetchContentList)
if (shouldFetchContentList) {
this.callbackFun(tempFilters, true);
this.clearParams();
// if (!params?.contentType) {
// this.callbackFun(tempFilters, true);
// // this.clearParams();
// console.log("if:::::")
// } else {
// this.callbackFun(tempFilters);
// console.log("else:::::")
// }
}
});
}
}
//get biblio content list
getBiblioContentList() {
return new Promise((resolve, reject) => {
var shouldFetchContentList = true;
conProvider.getBiblioSql().then((data) => {
if (data.length > 0) {
shouldFetchContentList = false;
resolve(data);
}
conProvider.getBiblioListGraph().then((resJson) => {
//updating the typeList
if (resJson.length > 0) {
resolve(resJson);
} else {
if (shouldFetchContentList)
reject();
}
}).catch((error) => {
if (shouldFetchContentList)
reject(error);
});
}).catch(() => {
reject();
});
});
}
//get biblio content list
getMenuItemsList() {
currentRandomTypeId = apiProvider.generateUUID();
var localRandomId = currentRandomTypeId;
return new Promise((resolve, reject) => {
var shouldFetchContentList = true;
conProvider.getMenuItemSql().then((data) => {
if (data.length > 0) {
this.insertIntoTypeList(data, localRandomId, true);
shouldFetchContentList = false;
resolve(data);
}
conProvider.getMenuItemsGraph().then((resJson) => {
//updating the typeList
if (resJson.length > 0) {
this.insertIntoTypeList(resJson, localRandomId, shouldFetchContentList);
resolve(resJson);
} else {
if (shouldFetchContentList)
reject();
}
}).catch((error) => {
if (shouldFetchContentList)
reject(error);
});
}).catch(() => {
reject();
});
});
}
//root error message on full screen
showError(msg, imagePath) {
this.drawer.closeDrawer();
graphError = ""
this.setState({
accessDenied: true,
deniedMessage: msg,
contentLoading: false,
contentLength: 0,
errorModal: true,
drawerLockMode: "locked-closed",
isButton: false,
imagePath: imagePath,
errorLoading: false
});
varProvider.drawerLockMode = "locked-closed";
}
openMenu() {
this.drawer.openDrawer();
}
changeView() {
this.setState({ isCardView: !this.state.isCardView });
}
callbackFun(activeFilters, isBgContent) {
var isFilter = false;
var appliedFilter = [];
var topKey, bottomKey, dataKey, dataValue;
for (var i = 0; i < activeFilters.length; i++) {
if (activeFilters[i].active) {
isFilter = true;
// if (i == 0) {
topKey = "$searchText: String";
bottomKey = "libTitle_contains: $searchText";
dataKey = "searchText";
dataValue = activeFilters[0].value;
// }
appliedFilter.push({
"topKey": topKey,
"bottomKey": bottomKey,
"dataKey": dataKey,
"dataValue": dataValue,
});
}
}
if (appliedFilter.length == 0) {
this.setState({
"isFilter": false,
appliedFilter: appliedFilter
});
} else {
this.setState({
"isFilter": true,
appliedFilter: appliedFilter
});
}
var tempJson = {
"isFilter": isFilter,
"appliedFilter": appliedFilter,
"skip": 0,
"menuItemId": menuItemId
}
this.initContentList(tempJson, activeFilters, isBgContent);
}
initContentList(tempJson, activeFilters, isBgContent) {
//console.log("initContentList::::", isBgContent);
if (!isBgContent) {
//console.log("isBgContent", isBgContent, contentList?.length);
contentList = [];
graphError = ""
this.setState({
contentLoading: true,
contentLength: 0,
pubFilters: activeFilters,
accessDenied: false,
errorModal: false,
drawerLockMode: "unlocked",
refreshTypes: !this.state.refreshTypes,
errorLoading: false
});
varProvider.drawerLockMode = "unlocked";
noMoreData = false;
} else {
//console.log("isBgContent else", isBgContent, contentList.length);
noMoreData = false;
//fetch content list from sqlite and compare it with new list fetched via graph query
//if there isn't any change than no need to reset content list
if (contentList.length != 0 && connection.isConnectedFun()) {
//console.log("noMoreData");
//return function here so that next lines does not execute
tempJson["type"] = currentType;
tempJson["shouldDelete"] = "check";
tempJson["first"] = contentList.length;
return this.loadContentList(tempJson);
}
}
tempJson["type"] = currentType;
tempJson["shouldDelete"] = "true";
tempJson["first"] = pagingCount;
if (connection.isConnectedFun()) {
//console.log("connection.isConnectedFun");
this.loadContentList(tempJson);
}
}
callbackFavorite(isFavorite) {
if (currentType == staticConfig.favorite && !isFavorite) {
this.removeItem(cloneIt);
} else {
cloneIt.isFavorite = isFavorite;
this.setState({ refresh: !this.state.refresh });
}
}
openFilters() {
const { navigate } = this.props.navigation;
navigate('ConFilters', { "callbackFun": this.callbackFun, "pubFilters": this.state.pubFilters, "contentType": currentType });
}
openContent(item) {
// console.log(item);
cloneIt = item;
const { navigate } = this.props.navigation;
if (item.type == staticConfig.journal) {
if (this.state.isVPNConfigAccepted || this.state.isVPNOptional) {
if ((item.issn || item.eissn) && shouldShowJournalDetail == "true") {
navigate('JournalArticles', { "journalItem": item, "callbackFavorite": this.callbackFavorite, "refScreen": varProvider.currentScreen });
} else {
if (connection.isConnectedFun()) {
var pubApiUrl = item.url;
if (pubApiUrl.includes(config.pubApiShort)) {
pubApiUrl = pubApiUrl.replace(/:token/g, varProvider.lastToken);
}
navigate('BrowserView', { "url": pubApiUrl, "refScreen": varProvider.currentScreen });
this.logContentOpenEvent(item.type, item.id)
} else {
Toast.showShortCenter(translate("PLEASE_CONNECT"));
}
}
} else {
addVPNPopup = true;
this.setState({
permissionModal: true
});
}
}
else {
if (connection.isConnectedFun()) {
if (this.state.isVPNConfigAccepted || this.state.isVPNOptional) {
if (item.url) {
// checking if multiUrl is present for database only
if (item.multiUrls !== null && item.multiUrls.length > 0 && item.type === staticConfig.database) {
if (item.multiUrls.length === 1) {
this.openContentUrl(item.multiUrls[0].url, false, item.type, item.id) // false represent that there are no multi urls OR only one multi url
}
else {
multiUrlsList = []
item.multiUrls.map((multiUrlsitem) => {
multiUrlsList.push({ title: multiUrlsitem.resourceGroup.name, onPressFun: this.openContentUrl.bind(this, multiUrlsitem.url, true, item.type, item.id) }) // true represent that there are more then one multiUrl
})
this.setState({ multiUrlsView: true })
}
}
else {
this.openContentUrl(item.url, false, item.type, item.id) // false represent that there are no multi urls OR only one multi url
}
}
} else {
addVPNPopup = true;
this.setState({
permissionModal: true
});
}
} else {
Toast.showShortCenter(translate("PLEASE_CONNECT"));
}
}
}
openContentUrl = (url, isMultiUrl, type, id) => {
const { navigate } = this.props.navigation;
if (isMultiUrl) {
this.setState({ multiUrlsView: false })
multiUrlsList = []
}
var pubApiUrl = url
if (pubApiUrl.includes(config.pubApiShort)) {
pubApiUrl = pubApiUrl.replace(/:token/g, varProvider.lastToken);
}
navigate('BrowserView', { "url": pubApiUrl, "refScreen": varProvider.currentScreen });
this.logContentOpenEvent(type, id)
}
logContentOpenEvent(type, eResourceId) {
let contentOpenJson = {
"type": type,
"eResourceId": eResourceId
}
analyticsProvider.logAnalyticsJson("eResourceOpen", contentOpenJson);
}
logPdfScreenViewEvent(isNavigatingBack) {
let screenViewJson = {
"name": isNavigatingBack ? currentType : screenNames.PDFView,
"previous": isNavigatingBack ? screenNames.PDFView : currentType
};
analyticsProvider.logAnalyticsJson("ScreenView", screenViewJson);
}
iosPdfEvent(pdfObject) {
const viewerDismissedSubscription = pdfObject.addListener(
'ViewerWillDismiss',
(highlightObject) => {
// console.log("ViewerWillDismiss Collection screen");
// console.log(highlightObject);
viewerDismissedSubscription.remove();
this.logPdfScreenViewEvent(true);
varProvider.currentScreen = screenNames.Content;
}
);
}
removeFilter(item) {
var tempFilters = this.state.pubFilters;
for (var i = 0; i < tempFilters.length; i++) {
if (item.value == tempFilters[i].value) {
tempFilters[i].active = false;
break;
}
}
this.callbackFun(tempFilters);
}
viewDetails(item) {
const { navigate } = this.props.navigation;
navigate('ContentDescription', { "item": item, "openContent": this.openContent });
}
favoriteContent(item) {
if (connection.isConnectedFun()) {
var action;
if (item.isFavorite) {
item.isFavorite = false;
action = "UNFAVORITE";
}
else {
item.isFavorite = true;
action = "FAVORITE";
}
var secondArg = false;
var tempJson = {};
var contentIds = [];
var id = item.contentType == staticConfig.customInstituteContent ? item.customInsContentId : item.id
contentIds.push(id);
tempJson["contentIds"] = contentIds;
tempJson["action"] = action;
tempJson["isFavorite"] = item.isFavorite;
tempJson["type"] = item.type;
if (currentType == staticConfig.favorite && !item.isFavorite) {
this.removeItem(item);
}
conProvider.favoriteContentGraph(tempJson, secondArg).then((data) => {
if (item.type == staticConfig.journal && item.isFavorite) {
jaProvider.cacheJournalArticles();
}
}).catch((error) => {
});
this.setState({ refresh: !this.state.refresh });
}
else {
Toast.showShortCenter(translate("PLEASE_CONNECT"));
}
}
removeItem(item) {
for (var i = 0; i < contentList.length; i++) {
if (contentList[i].id == item.id) {
contentList.splice(i, 1);
break;
}
}
this.setState({ refresh: !this.state.refresh });
}
FlatListItemSeparator = () => {
return (
);
}
// to handle scroll pagination to load more content
handleLoadMore = () => {
if (contentList.length > pagingCount - 1) {
if (!noMoreData) {
if (!isInfiniteOn) {
this.setState({ footerLoading: true });
isInfiniteOn = true;
var skipCount = contentList.length;
var tempJson = {
"isFilter": this.state.isFilter,
"appliedFilter": this.state.appliedFilter,
"skip": skipCount,
"first": pagingCount,
"type": currentType,
"shouldDelete": "false",
"menuItemId": menuItemId
}
console.log("handleLoadMore", tempJson);
this.loadContentList(tempJson);
}
}
} else {
if (isListFromGraph)
noMoreData = true;
}
};
closeGuide = () => {
this.setState({ showGuide: false })
setProvider.closeGuide("iseResourcesGuideShown");
}
hideModalCallback = () => {
this.checkIfVPNCreated()
}
callbackVpnInfo() {
this.setState({
permissionModal: true
});
}
openVpnInfo() {
this.setState({
permissionModal: false
});
const { navigate } = this.props.navigation;
navigate('VpnInfo', { "isModal": true, "shouldShowDNSSetting": false, "callbackVpnInfo": this.callbackVpnInfo, "refScreen": screenNames.Content });
}
renderFooter = () => {
if (!this.state.footerLoading) return null;
return (
);
};
renderEmpty = () => {
console.log("renderEmpty:::", currentType, currentTitle, contentList?.length);
var imagePath, isButton, buttonText, buttonFunction, title, text = ""
if (currentType == staticConfig.favorite) {
imagePath = imageJson.fav_content_empty;
title = this.state.isFilter ? translate("FAV_FILTER_EMPTY") : translate("FC_EMPTY");
text = this.state.isFilter ? translate("FAV_FILTER_EMPTY_DATA") : translate("FC_EMPTY_DATA1");
isButton = true
buttonText = translate("VIEW_MORE")
buttonFunction = this.openMenu;
// we have to change this , so i have not included it in en.json
} else if (currentType == staticConfig.database) {
imagePath = imageJson.content_empty;
title = this.state.isFilter ? translate("CONTENT_DATABASE_FILTER_EMPTY") : translate("CONTENT_DATABASE_EMPTY");
text = this.state.isFilter ? translate("CONTENT_DATABASE_FILTER_EMPTY_DATA") : translate("CONTENT_DATABASE_EMPTY_DATA", { currentTitle: currentTitle });
}
else if (currentType == staticConfig.journal) {
imagePath = imageJson.content_empty;
title = this.state.isFilter ? translate("CONTENT_JOURNAL_FILTER_EMPTY") : translate("CONTENT_JOURNAL_EMPTY");
text = this.state.isFilter ? translate("CONTENT_JOURNAL_FILTER_EMPTY_DATA") : translate("CONTENT_JOURNAL_EMPTY_DATA", { currentTitle: currentTitle });
}
else if (currentType == staticConfig.ebook) {
imagePath = imageJson.content_empty;
title = this.state.isFilter ? translate("CONTENT_EBOOK_FILTER_EMPTY") : translate("CONTENT_EBOOK_EMPTY");
text = this.state.isFilter ? translate("CONTENT_EBOOK_FILTER_EMPTY_DATA") : translate("CONTENT_EBOOK_EMPTY_DATA", { currentTitle: currentTitle });
}
else if (currentType == staticConfig.customInstituteContent) {
imagePath = imageJson.content_empty;
title = this.state.isFilter ? translate("CONTENT_CUSTOMINSCON_FILTER_EMPTY") : translate("CONTENT_CUSTOMINSCON_EMPTY")
text = this.state.isFilter ? translate("CONTENT_CUSTOMINSCON_FILTER_EMPTY_DATA") : translate("CONTENT_CUSTOMINSCON_EMPTY_DATA", { currentTitle: currentTitle })
}
else if (currentType == staticConfig.customLink) {
imagePath = imageJson.content_empty;
title = this.state.isFilter ? translate("CONTENT_CUSTOMLINK_FILTER_EMPTY") : translate("CONTENT_CUSTOMLINK_EMPTY")
text = this.state.isFilter ? translate("CONTENT_CUSTOMLINK_FILTER_EMPTY_DATA") : translate("CONTENT_CUSTOMLINK_EMPTY_DATA", { currentTitle: currentTitle })
}
else if (currentType == staticConfig.filtered) {
imagePath = imageJson.content_empty;
title = this.state.isFilter ? translate("CONTENT_FILTERED_FILTER_EMPTY") : translate("CONTENT_FILTERED_EMPTY")
text = this.state.isFilter ? translate("CONTENT_FILTERED_FILTER_EMPTY_DATA") : translate("CONTENT_FILTERED_EMPTY_DATA", { currentTitle: currentTitle })
}
return (
{this.state.errorLoading ?
:
this.state.isFilter ?
:
}
);
}
renderEmptyDrawer = () => {
return (
{this.state.errorLoading ?
{translate("BIBLIO_FAILED")}
:
}
);
}
downloadFromLink = (item, retry) => {
const { navigate } = this.props.navigation;
this.setState({ isLinkLoading: true });
conProvider.getDownloadURlFromS3(item).then((url) => {
this.setState({ isLinkLoading: false });
navigate('BrowserView', { "url": url, "refScreen": varProvider.currentScreen });
this.logContentOpenEvent(item.type, item.id)
}).catch((error) => {
if (retry) {
this.downloadFromLink(item, false)
}
else {
this.setState({ isLinkLoading: false });
setTimeout(() => {
Toast.showShortCenter(translate("ERROR_UNKNOWN_DESC"));
}, 400)
}
});
}
checkS3Url = (item) => {
if (this.state.isVPNConfigAccepted || this.state.isVPNOptional) {
if (item.url.includes("s3://")) {
this.downloadFromLink(item, true)
} else {
this.openContent(item)
}
}
else {
addVPNPopup = true;
this.setState({
permissionModal: true
});
}
}
_renderContentCard = ({ item }) => (
)
hideActionSheetModal = () => {
multiUrlsList = []
this.setState({ multiUrlsView: false });
}
closeActionSheetModal = () => {
multiUrlsList = []
this.setState({ multiUrlsView: false });
}
render() {
var renderFavFooter = (typeList && typeList.length > 0)
?
this.menuItemPress(typeList[favIndex], true)}
>
{typeList[favIndex]?.title}
:
null;
var menu =
{translate("ALL_CONTENT")}
{
this.state.noData ?
:
item.id}
ListEmptyComponent={this.renderEmptyDrawer}
renderItem={({ item, index }) =>
item.type !== staticConfig.favorite &&
this.menuItemPress(item, true)}
>
{item.title}
{item.childMenuItems.length >= 1 &&
}
{item.isExpanded && item.childMenuItems.length >= 1 && item.childMenuItems.map((item, key) =>
this.menuItemPress(item, true)}
>
{item.title}
)}
}
/>
{renderFavFooter}
}
var headerBar =
this.openMenu()}>
{currentTitle}
this.openFilters()}>
return (
{ this.drawer = _drawer; varProvider.conDrawer = _drawer; }}
onDrawerClose={() => { this.onDrawerClose() }}
drawerPosition={DrawerLayout.positions.Left}
drawerLockMode={this.state.drawerLockMode}
renderNavigationView={() => menu}>
{/* to hide the header bar when there is any error modal on page*/}
{!this.state.errorModal && headerBar}
{this.state.pubFilters.map((item, key) =>
(
{item.active &&
this.removeFilter(item)}
/>
}
))
}
{
this.state.contentLoading ?
:
{this.state.accessDenied ?
{this.state.deniedMessage}
:
}
}
{this.state.errorModal &&
{this.state.imagePath &&
}
{this.state.deniedMessage}
{this.state.isButton &&
{this.state.bottomText}
{translate("READ_OFFLINE")}
}
}
{addVPNPopup ? translate("VPN_NOT_CONFIGURED") : translate("VPN_PERMISSION")}
{addVPNPopup ? translate("VPN_NOT_CONFIGURED_DATA") : translate("VPN_PERMISSION_DATA")}
{ this.openVpnInfo() }}> {translate("VPN_LEARN_MORE")}
{ this.proceedWithVPNPermission() }}>
{addVPNPopup ? translate("VPN_NOT_CONFIGURED_BUTTON") : translate("VPN_PERMISSION_BUTTON")}
);
}
async proceedWithVPNPermission() {
this.setState({
permissionModal: false
});
addVPNPopup = false;
if (Platform.OS == "ios") {
let isVPNConfigAccepted = await conProvider.updateProxyDetailsForIos(true);
this.setState({
isVPNConfigAccepted: varProvider.enableProxy ? isVPNConfigAccepted : true
});
} else {
setTimeout(async () => {
let isVPNConfigAccepted = await conProvider.updateProxyDetailsForAndroid(true);
this.setState({
isVPNConfigAccepted: isVPNConfigAccepted
});
if (isVPNConfigAccepted) {
this.logVPNEvent(true);
AsyncStorage.setItem("isVPNLogged", "true");
}
}, 1000);
}
}
clearParams() {
const { params } = this.props.route;
if (params != undefined && !params?.contentType) {
console.log("clearParams:::::");
params.contentType = null;
params.menuItemId = null;
params.cTitle = null;
}
}
menuItemPress(item, isClicked) {
this.clearParams(); //clear params for deeplink when using other menu item press to avoid re render deeplink tab issue
((item.childMenuItems == null || item.childMenuItems?.length == 0) && item.containsContent) && this.drawer.closeDrawer();
if (connection.isConnectedFun()) {
item.isExpanded = !item.isExpanded;
if (item.containsContent) {
this.updateTempList(typeList, item)
currentTitle = item.title;
menuItemId = item.id; // added currentTiTle to display correct name on top of the content screen when menuitem is pressed
if (isClicked)
this.logScreenViewEvent(false);
var tempFilters = this.state.pubFilters;
this.setState({
refreshTypes: !this.state.refreshTypes
});
setTimeout(() => {
currentType = item.type; // changed title to type
this.callbackFun(tempFilters);
}, 450)
} else {
this.setState({ refresh: !this.state.refresh })
}
} else {
Toast.showShortCenter(translate("PLEASE_CONNECT"));
}
}
updateTempList = (typeList, item, expandActiveItem) => {
if (typeList) {
var result = false;
for (var i = 0; i < typeList.length; i++) {
if (typeList[i].childMenuItems?.length > 0) {
result = this.updateTempList(typeList[i].childMenuItems, item)
if (result || typeList[i].id === item.id) {
typeList[i].active = typeList[i].containsContent || result ? true : false
if (expandActiveItem)
typeList[i].isExpanded = expandActiveItem
}
else {
typeList[i].active = false
typeList[i].isExpanded = false
}
}
else if (typeList[i].id === item.id) {
typeList[i].active = true
result = true
}
else {
typeList[i].active = false
typeList[i].isExpanded = false
}
}
return result;
}
}
onDrawerClose() {
// console.log("on drawer close");
}
}