Skip to content
This repository has been archived by the owner on Jan 16, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1599 from Plant-for-the-Planet-org/feature/Reiews…
Browse files Browse the repository at this point in the history
…-develop

Feature/reviews merged develop
  • Loading branch information
norbertschuler authored Dec 1, 2019
2 parents 63aed12 + 8ebce5e commit 1a0761b
Show file tree
Hide file tree
Showing 46 changed files with 7,431 additions and 5,517 deletions.
15 changes: 15 additions & 0 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,27 @@ android {
}
}
}

packagingOptions {
pickFirst 'lib/x86/libc++_shared.so'
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
pickFirst 'lib/arm64-v8a/libc++_shared.so'
pickFirst 'lib/x86_64/libc++_shared.so'
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
}
}

dependencies {
implementation project(':react-native-vector-icons')
//implementation project(':react-native-paypal-wrapper')
implementation project(':@react-native-community_async-storage')
implementation project(':react-native-fs')
implementation project(':react-native-pdf')
implementation project(':rn-fetch-blob')
implementation project(':react-native-vector-icons')
implementation project(':react-native-image-crop-picker')
implementation project(':react-native-document-picker')
implementation project(':react-native-linear-gradient')
implementation project(':bugsnag-react-native')
implementation project(':react-native-youtube')
Expand Down
13 changes: 12 additions & 1 deletion android/app/src/main/java/org/pftp/MainApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
import com.oblador.vectoricons.VectorIconsPackage;
import com.reactnativecommunity.asyncstorage.AsyncStoragePackage;
//import com.taessina.paypal.RNPaypalWrapperPackage;
import com.rnfs.RNFSPackage;
import org.wonday.pdf.RCTPdfView;
import com.RNFetchBlob.RNFetchBlobPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.reactnative.ivpusic.imagepicker.PickerPackage;
import io.github.elyx0.reactnativedocumentpicker.DocumentPickerPackage;
import com.BV.LinearGradient.LinearGradientPackage;
import com.bugsnag.BugsnagReactNative;
import com.inprogress.reactnativeyoutube.ReactNativeYouTube;
Expand Down Expand Up @@ -36,9 +42,14 @@ public boolean getUseDeveloperSupport() {
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new VectorIconsPackage(),
new AsyncStoragePackage(),
//new RNPaypalWrapperPackage(),
new RNFSPackage(),
new RCTPdfView(),
new RNFetchBlobPackage(),
new VectorIconsPackage(),
new PickerPackage(),
new DocumentPickerPackage(),
new LinearGradientPackage(),
BugsnagReactNative.getPackage(),
new ReactNativeYouTube(),
Expand Down
14 changes: 14 additions & 0 deletions android/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,20 @@ include ':react-native-youtube'
project(':react-native-youtube').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-youtube/android')
//include ':react-native-paypal-wrapper'
//project(':react-native-paypal-wrapper').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-paypal-wrapper/android')
include ':react-native-fs'
project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android')
include ':react-native-pdf'
project(':react-native-pdf').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-pdf/android')
include ':rn-fetch-blob'
project(':rn-fetch-blob').projectDir = new File(rootProject.projectDir, '../node_modules/rn-fetch-blob/android')
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':react-native-paypal-wrapper'
project(':react-native-paypal-wrapper').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-paypal-wrapper/android')
include ':react-native-image-crop-picker'
project(':react-native-image-crop-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-crop-picker/android')
include ':react-native-document-picker'
project(':react-native-document-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-document-picker/android')
include ':react-native-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')
include ':bugsnag-react-native'
Expand Down
5 changes: 5 additions & 0 deletions app/actions/apiRouting.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,8 @@ export const getImageUrl = (category, variant, imageName) => {
const { scheme, host } = context;
return `${scheme}://${host}/media/cache/${category}/${variant}/${imageName}`;
};

export const getPDFUrl = filename => {
const { scheme, host } = context;
return `${scheme}://${host}/uploads/pdfs/review/${filename}`;
};
150 changes: 150 additions & 0 deletions app/actions/reviews.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
import {
getRequest,
putAuthenticatedRequest,
deleteAuthenticatedRequest,
postAuthenticatedRequest
} from '../utils/api';
import { debug } from '../debug/index';
import { NotificationManager } from '../notification/PopupNotificaiton/notificationManager';
import { reviewsSchema, plantProjectSchema } from '../schemas/index';
import { normalize } from 'normalizr';
import {
deleteEntity,
unlinkEntity,
mergeEntities
} from '../reducers/entitiesReducer';
import { setProgressModelState } from '../reducers/modelDialogReducer';
import i18n from '../locales/i18n.js';
// import { ScrollView } from 'react-native-gesture-handler';

export function getReviewIndexes() {
return getRequest('review_indexes_get', { translated: 1 });
}
export function addReview(review) {
return dispatch => {
dispatch(setProgressModelState(true));
return new Promise(function(resolve) {
console.log('review:', review, review.id);

postAuthenticatedRequest('review_post', review)
.then(res => {
debug(res.status);
debug(res);
let { review, plantProject } = res.data.merge;
debug(review);
console.log('Normalize:', normalize(review, [reviewsSchema]));
dispatch(mergeEntities(normalize(review, [reviewsSchema])));
// TODO: we need to fix to add entry to plant project and userprofile
// let reviews = [...plantProject.reviews];
// console.log('pmatProject:', plantProject);
// plantProject.reviews = [reviews, review];
// console.log('pmatProject:', normalize(plantProject, [plantProjectSchema]));
dispatch(
mergeEntities(normalize(plantProject, [plantProjectSchema]))
);
NotificationManager.success(
i18n.t('label.new_review_added_successfully'),
i18n.t('label.congrats'),
5000
);
resolve(review);
dispatch(setProgressModelState(false));
})
.catch(err => {
debug(err);
NotificationManager.error(err.message, i18n.t('label.error'), 5000);
dispatch(setProgressModelState(false));
});
});
};
}

export function deleteReview(reviewId) {
return dispatch => {
dispatch(setProgressModelState(true));
return new Promise(function(resolve, reject) {
console.log('delete review ', reviewId);
deleteAuthenticatedRequest('review_delete', {
review: reviewId
})
.then(res => {
console.log(res.data);
const { review } = res.data.delete;
try {
dispatch(deleteEntity({ reviews: review }));
let { unlink } = res.data;
if (unlink) {
dispatch(unlinkEntity(unlink));
}
let { plantProject } = res.data.merge;

dispatch(
mergeEntities(normalize(plantProject, [plantProjectSchema]))
);
} catch (err) {
console.error(err);
}

NotificationManager.success(
i18n.t('label.review_deleted_successfully'),
i18n.t('label.congrats'),
5000
);
resolve(review);
dispatch(setProgressModelState(false));
})
.catch(err => {
debug(err);
NotificationManager.error(err.message, i18n.t('label.error'), 5000);
reject(err);
dispatch(setProgressModelState(false));
});
});
};
}

export function updateReview(review) {
return dispatch => {
dispatch(setProgressModelState(true));
return new Promise(function(resolve, reject) {
let reviewId = review.id;
delete review.id;
console.log('putting', review);

putAuthenticatedRequest('review_put', review, {
review: reviewId
})
.then(res => {
let { review, plantProject } = res.data.merge;
try {
dispatch(mergeEntities(normalize(review, [reviewsSchema])));
dispatch(
mergeEntities(normalize(plantProject, [plantProjectSchema]))
);
let { unlink, delete: deleteContent } = res.data;
if (unlink && deleteContent) {
// TODO: we need to fix this error and enable this
// this will delete entry from reviews and unlink from project and userprofile if there is params in response
// dispatch(unlinkEntity(unlink));
// dispatch(deleteEntity(deleteContent));
}
} catch (err) {
console.err(err);
}
NotificationManager.success(
i18n.t('label.review_updated_successfully'),
i18n.t('label.congrats'),
5000
);
resolve(res.data);
dispatch(setProgressModelState(false));
})
.catch(err => {
debug(err);
NotificationManager.error(err.message, i18n.t('label.error'), 5000);
reject(err);
dispatch(setProgressModelState(false));
});
});
};
}
Binary file added app/assets/images/attach.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions app/assets/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ import googlePlayBadge_en from './images/en/google-play-badge.png';
import googlePlayBadge_de from './images/de/google-play-badge.png';
import appleStoreBadge_en from './images/en/apple-store-badge.png';
import appleStoreBadge_de from './images/de/apple-store-badge.png';
import attach from './images/attach.png';
import cameraSolid from './images/icons/camera-solid.png';
import imageGallery from './images/icons/images-gallery.png';
import nextArrow from './images/icons/nextArrow.png';
Expand Down Expand Up @@ -302,6 +303,7 @@ export {
googlePlayBadge_de,
appleStoreBadge_en,
appleStoreBadge_de,
attach,
cameraSolid,
imageGallery,
nextArrow,
Expand Down
1 change: 0 additions & 1 deletion app/components/DonateTrees/index.native.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import { getLocalRoute } from '../../actions/apiRouting';
import { context } from '../../config';
import TabContainer from '../../containers/Menu/TabContainer';
import LoadingIndicator from '../Common/LoadingIndicator';

export default class DonateTrees extends React.PureComponent {
constructor(props) {
super(props);
Expand Down
4 changes: 2 additions & 2 deletions app/components/NDVI/NDVIfunctions/GradientUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@ export const getColorForNDVI = (point, gradientWidth = 350) => {
let percentageWidth = percentage / 100 * gradientWidth;
let value = (percentageWidth / (gradientWidth / (colorStops.length - 1))) % 1;

console.log(colorStops.length, lowerIndex, upperIndex, point);
// console.log(colorStops.length, lowerIndex, upperIndex, point);
let color = getStepColor(
colorStops[lowerIndex].color,
colorStops[upperIndex].color,
value
);
console.log(color);
// console.log(color);
return `rgb(${color.join(',')})`;
};

Expand Down
12 changes: 12 additions & 0 deletions app/components/Navigators/AppDrawerNavigator.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ import SuccessfullActivatedContainer from '../../containers/Authentication/Succe
import PledgeEvents from './../PledgeEvents/PledgeEvents.native';
import UnfulfilledPledgeEvents from './../PledgeEvents/UnfulfilledPledgeEvent';
import MakePledgeForm from './../PledgeEvents/MakePledgeForm.native';
import Reviews from './../Reviews/Reviews';
import AddReview from './../Reviews/AddReview/AddReview';
import PDFViewer from '../PDFViewer';
import createCompeition from './../Competition/Tabs/createCompetition.native';
import UpdatePledgeEvent from './../PledgeEvents/UpdatePledgeEvent.native';
const headerLabels = {
Expand Down Expand Up @@ -334,6 +337,15 @@ export const getAppNavigator = function(isLoggedIn, userProfile) {
['app_pledge_form']: {
screen: MakePledgeForm
},
['app_reviews']: {
screen: Reviews
},
['app_add_review']: {
screen: AddReview
},
['app_view_pdf']: {
screen: PDFViewer
},
['app_pledge_update_form']: {
screen: UpdatePledgeEvent
},
Expand Down
56 changes: 56 additions & 0 deletions app/components/PDFViewer/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import React from 'react';
import { StyleSheet, Dimensions, View, Text } from 'react-native';
import { getPDFUrl } from '../../actions/apiRouting';
import Pdf from 'react-native-pdf';
import i18n from '../../locales/i18n.js';

export default class PDFViewer extends React.Component {
constructor(props) {
super(props);
let { params } = this.props.navigation.state;
this.state = { uri: params ? params.url : this.props.url, cache: true };
console.log();
}

render() {
const source = { ...this.state, uri: getPDFUrl(this.state.uri) };
let instance = this;
console.log(this.state);
return (
<View style={styles.container}>
{!this.state.uri ? (
<Text>{i18n.t('label.no_pdf_found')}</Text>
) : (
<Pdf
enablePaging
source={source}
onLoadComplete={numberOfPages => {
console.log(`number of pages: ${numberOfPages}`);
}}
onPageChanged={page => {
console.log(`current page: ${page}`);
}}
onError={() => {
instance.setState({ uri: '' });
}}
style={styles.pdf}
/>
)}
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'flex-start',
alignItems: 'center',
marginTop: 5
},
pdf: {
flex: 1,
width: Dimensions.get('window').width,
height: Dimensions.get('window').height
}
});
1 change: 1 addition & 0 deletions app/components/PlantProjects/PlantProjectDetails.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class PlantProjectDetails extends React.Component {
caption={homepageCaption}
/>
)}

{videoUrl && (
<VideoContainer
onViewMoreClick={this.props.onViewMoreClick.bind(this)}
Expand Down
Loading

0 comments on commit 1a0761b

Please sign in to comment.