@plusscommunities/pluss-core-app 1.6.3-beta.0 → 1.6.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/actions/MediaActions.js +10 -1
- package/dist/module/actions/MediaActions.js.map +1 -1
- package/dist/module/actions/UserSettingsActions.js +14 -0
- package/dist/module/actions/UserSettingsActions.js.map +1 -0
- package/dist/module/actions/index.js +1 -0
- package/dist/module/actions/index.js.map +1 -1
- package/dist/module/actions/types.js +3 -0
- package/dist/module/actions/types.js.map +1 -1
- package/dist/module/components/AutoOffsetImage.js +40 -4
- package/dist/module/components/AutoOffsetImage.js.map +1 -1
- package/dist/module/components/CommentSection.js +117 -11
- package/dist/module/components/CommentSection.js.map +1 -1
- package/dist/module/components/index.js +1 -1
- package/dist/module/components/index.js.map +1 -1
- package/dist/module/js/images/findLandmarkRange.js +4 -0
- package/dist/module/js/images/findLandmarkRange.js.map +1 -1
- package/package.json +18 -18
- package/src/actions/MediaActions.js +8 -1
- package/src/actions/UserSettingsActions.js +15 -0
- package/src/actions/index.js +1 -0
- package/src/actions/types.js +3 -0
- package/src/components/AutoOffsetImage.js +46 -4
- package/src/components/CommentSection.js +95 -9
- package/src/components/index.js +1 -1
- package/src/js/images/findLandmarkRange.js +3 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IMAGE_LIBRARY_LOADED, STOCK_IMAGES_LOADED, IMAGE_FOLDER_UPDATED } from './types';
|
|
1
|
+
import { IMAGE_LIBRARY_LOADED, STOCK_IMAGES_LOADED, IMAGE_FOLDER_UPDATED, SAVE_IMAGE_POSITION } from './types';
|
|
2
2
|
export const stockImagesLoaded = images => {
|
|
3
3
|
return {
|
|
4
4
|
type: STOCK_IMAGES_LOADED,
|
|
@@ -17,4 +17,13 @@ export const imageFolderUpdated = folder => {
|
|
|
17
17
|
payload: folder
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
+
export const saveImagePosition = (uri, positions) => {
|
|
21
|
+
return {
|
|
22
|
+
type: SAVE_IMAGE_POSITION,
|
|
23
|
+
payload: {
|
|
24
|
+
uri,
|
|
25
|
+
positions
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
|
20
29
|
//# sourceMappingURL=MediaActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MediaActions.js"],"names":["IMAGE_LIBRARY_LOADED","STOCK_IMAGES_LOADED","IMAGE_FOLDER_UPDATED","stockImagesLoaded","images","type","payload","imageLibraryLoaded","library","imageFolderUpdated","folder"],"mappings":"AAAA,SAASA,oBAAT,EAA+BC,mBAA/B,EAAoDC,oBAApD,
|
|
1
|
+
{"version":3,"sources":["MediaActions.js"],"names":["IMAGE_LIBRARY_LOADED","STOCK_IMAGES_LOADED","IMAGE_FOLDER_UPDATED","SAVE_IMAGE_POSITION","stockImagesLoaded","images","type","payload","imageLibraryLoaded","library","imageFolderUpdated","folder","saveImagePosition","uri","positions"],"mappings":"AAAA,SAASA,oBAAT,EAA+BC,mBAA/B,EAAoDC,oBAApD,EAA0EC,mBAA1E,QAAqG,SAArG;AAEA,OAAO,MAAMC,iBAAiB,GAAGC,MAAM,IAAI;AACzC,SAAO;AACLC,IAAAA,IAAI,EAAEL,mBADD;AAELM,IAAAA,OAAO,EAAEF;AAFJ,GAAP;AAID,CALM;AAOP,OAAO,MAAMG,kBAAkB,GAAGC,OAAO,IAAI;AAC3C,SAAO;AACLH,IAAAA,IAAI,EAAEN,oBADD;AAELO,IAAAA,OAAO,EAAEE;AAFJ,GAAP;AAID,CALM;AAOP,OAAO,MAAMC,kBAAkB,GAAGC,MAAM,IAAI;AAC1C,SAAO;AACLL,IAAAA,IAAI,EAAEJ,oBADD;AAELK,IAAAA,OAAO,EAAEI;AAFJ,GAAP;AAID,CALM;AAOP,OAAO,MAAMC,iBAAiB,GAAG,CAACC,GAAD,EAAMC,SAAN,KAAoB;AACnD,SAAO;AACLR,IAAAA,IAAI,EAAEH,mBADD;AAELI,IAAAA,OAAO,EAAE;AAAEM,MAAAA,GAAF;AAAOC,MAAAA;AAAP;AAFJ,GAAP;AAID,CALM","sourcesContent":["import { IMAGE_LIBRARY_LOADED, STOCK_IMAGES_LOADED, IMAGE_FOLDER_UPDATED, SAVE_IMAGE_POSITION } from './types';\n\nexport const stockImagesLoaded = images => {\n return {\n type: STOCK_IMAGES_LOADED,\n payload: images,\n };\n};\n\nexport const imageLibraryLoaded = library => {\n return {\n type: IMAGE_LIBRARY_LOADED,\n payload: library,\n };\n};\n\nexport const imageFolderUpdated = folder => {\n return {\n type: IMAGE_FOLDER_UPDATED,\n payload: folder,\n };\n};\n\nexport const saveImagePosition = (uri, positions) => {\n return {\n type: SAVE_IMAGE_POSITION,\n payload: { uri, positions },\n };\n};\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BLOCK_USER, UNBLOCK_USER } from './types';
|
|
2
|
+
export const blockUser = userId => {
|
|
3
|
+
return {
|
|
4
|
+
type: BLOCK_USER,
|
|
5
|
+
payload: userId
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export const unblockUser = userId => {
|
|
9
|
+
return {
|
|
10
|
+
type: UNBLOCK_USER,
|
|
11
|
+
payload: userId
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=UserSettingsActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["UserSettingsActions.js"],"names":["BLOCK_USER","UNBLOCK_USER","blockUser","userId","type","payload","unblockUser"],"mappings":"AAAA,SAASA,UAAT,EAAqBC,YAArB,QAAyC,SAAzC;AAEA,OAAO,MAAMC,SAAS,GAAGC,MAAM,IAAI;AACjC,SAAO;AACLC,IAAAA,IAAI,EAAEJ,UADD;AAELK,IAAAA,OAAO,EAAEF;AAFJ,GAAP;AAID,CALM;AAOP,OAAO,MAAMG,WAAW,GAAGH,MAAM,IAAI;AACnC,SAAO;AACLC,IAAAA,IAAI,EAAEH,YADD;AAELI,IAAAA,OAAO,EAAEF;AAFJ,GAAP;AAID,CALM","sourcesContent":["import { BLOCK_USER, UNBLOCK_USER } from './types';\n\nexport const blockUser = userId => {\n return {\n type: BLOCK_USER,\n payload: userId,\n };\n};\n\nexport const unblockUser = userId => {\n return {\n type: UNBLOCK_USER,\n payload: userId,\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.js"],"names":[],"mappings":"AAAA,cAAc,gBAAd;AACA,cAAc,mBAAd;AACA,cAAc,mBAAd;AACA,cAAc,eAAd","sourcesContent":["export * from './MediaActions';\nexport * from './FollowerActions';\nexport * from './ResidentActions';\nexport * from './UserActions';\n"]}
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":[],"mappings":"AAAA,cAAc,gBAAd;AACA,cAAc,mBAAd;AACA,cAAc,mBAAd;AACA,cAAc,eAAd;AACA,cAAc,uBAAd","sourcesContent":["export * from './MediaActions';\nexport * from './FollowerActions';\nexport * from './ResidentActions';\nexport * from './UserActions';\nexport * from './UserSettingsActions';\n"]}
|
|
@@ -3,6 +3,7 @@ export const CHANGE_ROLE = 'CHANGE_ROLE';
|
|
|
3
3
|
export const IMAGE_LIBRARY_LOADED = 'IMAGE_LIBRARY_LOADED';
|
|
4
4
|
export const STOCK_IMAGES_LOADED = 'STOCK_IMAGES_LOADED';
|
|
5
5
|
export const IMAGE_FOLDER_UPDATED = 'IMAGE_FOLDER_UPDATED';
|
|
6
|
+
export const SAVE_IMAGE_POSITION = 'SAVE_IMAGE_POSITION';
|
|
6
7
|
export const LOAD_FOLLOWERS = 'LOAD_FOLLOWERS';
|
|
7
8
|
export const ADD_FOLLOWER = 'ADD_FOLLOWER';
|
|
8
9
|
export const REMOVE_FOLLOWER = 'REMOVE_FOLLOWER';
|
|
@@ -11,4 +12,6 @@ export const LOADED_RESIDENTS = 'LOADED_RESIDENTS';
|
|
|
11
12
|
export const LOADED_LINKED_USERS = 'LOADED_LINKED_USERS';
|
|
12
13
|
export const LOADED_LINKED_TO_USERS = 'LOADED_LINKED_TO_USERS';
|
|
13
14
|
export const UPDATE_USER_STATE = 'UPDATE_USER_STATE';
|
|
15
|
+
export const BLOCK_USER = 'BLOCK_USER';
|
|
16
|
+
export const UNBLOCK_USER = 'UNBLOCK_USER';
|
|
14
17
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["types.js"],"names":["LOGOUT","CHANGE_ROLE","IMAGE_LIBRARY_LOADED","STOCK_IMAGES_LOADED","IMAGE_FOLDER_UPDATED","LOAD_FOLLOWERS","ADD_FOLLOWER","REMOVE_FOLLOWER","UPDATE_RESIDENTS","LOADED_RESIDENTS","LOADED_LINKED_USERS","LOADED_LINKED_TO_USERS","UPDATE_USER_STATE"],"mappings":"AAAA,OAAO,MAAMA,MAAM,GAAG,QAAf;AACP,OAAO,MAAMC,WAAW,GAAG,aAApB;AACP,OAAO,MAAMC,oBAAoB,GAAG,sBAA7B;AACP,OAAO,MAAMC,mBAAmB,GAAG,qBAA5B;AACP,OAAO,MAAMC,oBAAoB,GAAG,sBAA7B;AACP,OAAO,MAAMC,cAAc,GAAG,gBAAvB;AACP,OAAO,MAAMC,YAAY,GAAG,cAArB;AACP,OAAO,MAAMC,eAAe,GAAG,iBAAxB;AACP,OAAO,MAAMC,gBAAgB,GAAG,kBAAzB;AACP,OAAO,MAAMC,gBAAgB,GAAG,kBAAzB;AACP,OAAO,MAAMC,mBAAmB,GAAG,qBAA5B;AACP,OAAO,MAAMC,sBAAsB,GAAG,wBAA/B;AACP,OAAO,MAAMC,iBAAiB,GAAG,mBAA1B","sourcesContent":["export const LOGOUT = 'LOGOUT';\nexport const CHANGE_ROLE = 'CHANGE_ROLE';\nexport const IMAGE_LIBRARY_LOADED = 'IMAGE_LIBRARY_LOADED';\nexport const STOCK_IMAGES_LOADED = 'STOCK_IMAGES_LOADED';\nexport const IMAGE_FOLDER_UPDATED = 'IMAGE_FOLDER_UPDATED';\nexport const LOAD_FOLLOWERS = 'LOAD_FOLLOWERS';\nexport const ADD_FOLLOWER = 'ADD_FOLLOWER';\nexport const REMOVE_FOLLOWER = 'REMOVE_FOLLOWER';\nexport const UPDATE_RESIDENTS = 'UPDATE_RESIDENTS';\nexport const LOADED_RESIDENTS = 'LOADED_RESIDENTS';\nexport const LOADED_LINKED_USERS = 'LOADED_LINKED_USERS';\nexport const LOADED_LINKED_TO_USERS = 'LOADED_LINKED_TO_USERS';\nexport const UPDATE_USER_STATE = 'UPDATE_USER_STATE';\n"]}
|
|
1
|
+
{"version":3,"sources":["types.js"],"names":["LOGOUT","CHANGE_ROLE","IMAGE_LIBRARY_LOADED","STOCK_IMAGES_LOADED","IMAGE_FOLDER_UPDATED","SAVE_IMAGE_POSITION","LOAD_FOLLOWERS","ADD_FOLLOWER","REMOVE_FOLLOWER","UPDATE_RESIDENTS","LOADED_RESIDENTS","LOADED_LINKED_USERS","LOADED_LINKED_TO_USERS","UPDATE_USER_STATE","BLOCK_USER","UNBLOCK_USER"],"mappings":"AAAA,OAAO,MAAMA,MAAM,GAAG,QAAf;AACP,OAAO,MAAMC,WAAW,GAAG,aAApB;AACP,OAAO,MAAMC,oBAAoB,GAAG,sBAA7B;AACP,OAAO,MAAMC,mBAAmB,GAAG,qBAA5B;AACP,OAAO,MAAMC,oBAAoB,GAAG,sBAA7B;AACP,OAAO,MAAMC,mBAAmB,GAAG,qBAA5B;AACP,OAAO,MAAMC,cAAc,GAAG,gBAAvB;AACP,OAAO,MAAMC,YAAY,GAAG,cAArB;AACP,OAAO,MAAMC,eAAe,GAAG,iBAAxB;AACP,OAAO,MAAMC,gBAAgB,GAAG,kBAAzB;AACP,OAAO,MAAMC,gBAAgB,GAAG,kBAAzB;AACP,OAAO,MAAMC,mBAAmB,GAAG,qBAA5B;AACP,OAAO,MAAMC,sBAAsB,GAAG,wBAA/B;AACP,OAAO,MAAMC,iBAAiB,GAAG,mBAA1B;AACP,OAAO,MAAMC,UAAU,GAAG,YAAnB;AACP,OAAO,MAAMC,YAAY,GAAG,cAArB","sourcesContent":["export const LOGOUT = 'LOGOUT';\nexport const CHANGE_ROLE = 'CHANGE_ROLE';\nexport const IMAGE_LIBRARY_LOADED = 'IMAGE_LIBRARY_LOADED';\nexport const STOCK_IMAGES_LOADED = 'STOCK_IMAGES_LOADED';\nexport const IMAGE_FOLDER_UPDATED = 'IMAGE_FOLDER_UPDATED';\nexport const SAVE_IMAGE_POSITION = 'SAVE_IMAGE_POSITION';\nexport const LOAD_FOLLOWERS = 'LOAD_FOLLOWERS';\nexport const ADD_FOLLOWER = 'ADD_FOLLOWER';\nexport const REMOVE_FOLLOWER = 'REMOVE_FOLLOWER';\nexport const UPDATE_RESIDENTS = 'UPDATE_RESIDENTS';\nexport const LOADED_RESIDENTS = 'LOADED_RESIDENTS';\nexport const LOADED_LINKED_USERS = 'LOADED_LINKED_USERS';\nexport const LOADED_LINKED_TO_USERS = 'LOADED_LINKED_TO_USERS';\nexport const UPDATE_USER_STATE = 'UPDATE_USER_STATE';\nexport const BLOCK_USER = 'BLOCK_USER';\nexport const UNBLOCK_USER = 'UNBLOCK_USER';\n"]}
|
|
@@ -2,8 +2,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
2
2
|
|
|
3
3
|
import React, { Component } from 'react';
|
|
4
4
|
import { View, Animated, StyleSheet } from 'react-native';
|
|
5
|
+
import { connect } from 'react-redux';
|
|
5
6
|
import moment from 'moment';
|
|
6
|
-
import { findLandmarkRange, getScaledOffset, get300 } from '../helper';
|
|
7
|
+
import { findLandmarkRange, getScaledOffset, get300, detectFaces } from '../helper';
|
|
8
|
+
import { saveImagePosition } from '../actions';
|
|
7
9
|
|
|
8
10
|
class AutoOffsetImage extends Component {
|
|
9
11
|
constructor(props) {
|
|
@@ -26,9 +28,33 @@ class AutoOffsetImage extends Component {
|
|
|
26
28
|
_defineProperty(this, "positionImage", async () => {
|
|
27
29
|
try {
|
|
28
30
|
const startTime = moment().valueOf();
|
|
31
|
+
let cachedValues; // check local cache
|
|
32
|
+
|
|
33
|
+
if (this.props.imagePositions && this.props.imagePositions[this.props.uri]) {
|
|
34
|
+
cachedValues = this.props.imagePositions[this.props.uri];
|
|
35
|
+
} // check remote cache
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if (!cachedValues) {
|
|
39
|
+
try {
|
|
40
|
+
const response = await stringActions.getString('plussSpace', `imagefaces_${encodeURIComponent(this.props.uri)}`);
|
|
41
|
+
cachedValues = response.data;
|
|
42
|
+
} catch (e) {
|
|
43
|
+
console.log('errored from cache');
|
|
44
|
+
} // run face detection locally
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
if (!cachedValues || !cachedValues.faces || !cachedValues.image || _.isEmpty(cachedValues.faces) && moment().add(-1, 'w').valueOf() > moment(cachedValues.timestamp).valueOf()) {
|
|
48
|
+
cachedValues = await detectFaces(this.props.uri);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.props.saveImagePosition(this.props.uri, cachedValues);
|
|
52
|
+
}
|
|
53
|
+
|
|
29
54
|
const image = await findLandmarkRange(this.props.uri, {
|
|
30
55
|
targetWidth: this.props.width,
|
|
31
|
-
targetHeight: this.props.height
|
|
56
|
+
targetHeight: this.props.height,
|
|
57
|
+
cachedValues
|
|
32
58
|
});
|
|
33
59
|
const scaledOffset = getScaledOffset(image.width, image.height, this.props.width, this.props.height);
|
|
34
60
|
const {
|
|
@@ -69,7 +95,7 @@ class AutoOffsetImage extends Component {
|
|
|
69
95
|
});
|
|
70
96
|
const endTime = moment().valueOf();
|
|
71
97
|
|
|
72
|
-
if (endTime - startTime <
|
|
98
|
+
if (endTime - startTime < 500) {
|
|
73
99
|
Animated.timing(this.state.blurRadius, {
|
|
74
100
|
toValue: 0,
|
|
75
101
|
duration: 0,
|
|
@@ -133,5 +159,15 @@ const styles = StyleSheet.create({
|
|
|
133
159
|
resizeMode: 'cover'
|
|
134
160
|
}
|
|
135
161
|
});
|
|
136
|
-
|
|
162
|
+
|
|
163
|
+
const mapStateToProps = state => {
|
|
164
|
+
return {
|
|
165
|
+
imagePositions: state.media.positions
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const autoOffsetImage = connect(mapStateToProps, {
|
|
170
|
+
saveImagePosition
|
|
171
|
+
})(AutoOffsetImage);
|
|
172
|
+
export { autoOffsetImage as AutoOffsetImage };
|
|
137
173
|
//# sourceMappingURL=AutoOffsetImage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["AutoOffsetImage.js"],"names":["React","Component","View","Animated","StyleSheet","moment","findLandmarkRange","getScaledOffset","get300","AutoOffsetImage","constructor","props","event","nativeEvent","source","uri","state","imageLoaded","setState","sequence","delay","timing","blurRadius","toValue","duration","useNativeDriver","start","startTime","valueOf","image","targetWidth","width","targetHeight","height","scaledOffset","landmarkStart","end","landmarkEnd","bounds","imageBounds","offset","y","Math","max","paddingFactor","x","imageStyle","top","left","imageSource","endTime","e","Value","componentDidMount","positionImage","componentDidUpdate","prevProps","render","styles","container","style","onLoad","children","create","overflow","position","resizeMode"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,SAASC,IAAT,EAAeC,QAAf,EAAyBC,UAAzB,QAA2C,cAA3C;AACA,OAAOC,MAAP,MAAmB,QAAnB;AACA,SAASC,iBAAT,EAA4BC,eAA5B,EAA6CC,MAA7C,QAA2D,WAA3D;;AAEA,MAAMC,eAAN,SAA8BR,SAA9B,CAAwC;AACtCS,EAAAA,WAAW,CAACC,KAAD,EAAQ;AACjB,UAAMA,KAAN;;AADiB,oCAyBVC,KAAK,IAAI;AAChB,UAAIA,KAAK,CAACC,WAAN,CAAkBC,MAAlB,CAAyBC,GAAzB,KAAiC,KAAKJ,KAAL,CAAWI,GAA5C,IAAmD,CAAC,KAAKC,KAAL,CAAWC,WAAnE,EAAgF;AAC9E;AACA,aAAKC,QAAL,CAAc;AACZD,UAAAA,WAAW,EAAE;AADD,SAAd;AAGAd,QAAAA,QAAQ,CAACgB,QAAT,CAAkB,CAChBhB,QAAQ,CAACiB,KAAT,CAAe,GAAf,CADgB,EAEhBjB,QAAQ,CAACkB,MAAT,CAAgB,KAAKL,KAAL,CAAWM,UAA3B,EAAuC;AACrCC,UAAAA,OAAO,EAAE,CAD4B;AAErCC,UAAAA,QAAQ,EAAE,GAF2B;AAGrCC,UAAAA,eAAe,EAAE;AAHoB,SAAvC,CAFgB,CAAlB,EAOGC,KAPH;AAQD;AACF,KAxCkB;;AAAA,2CA0CH,YAAY;AAC1B,UAAI;AACF,cAAMC,SAAS,GAAGtB,MAAM,GAAGuB,OAAT,EAAlB;AACA,cAAMC,KAAK,GAAG,MAAMvB,iBAAiB,CAAC,KAAKK,KAAL,CAAWI,GAAZ,EAAiB;AAAEe,UAAAA,WAAW,EAAE,KAAKnB,KAAL,CAAWoB,KAA1B;AAAiCC,UAAAA,YAAY,EAAE,KAAKrB,KAAL,CAAWsB;AAA1D,SAAjB,CAArC;AACA,cAAMC,YAAY,GAAG3B,eAAe,CAACsB,KAAK,CAACE,KAAP,EAAcF,KAAK,CAACI,MAApB,EAA4B,KAAKtB,KAAL,CAAWoB,KAAvC,EAA8C,KAAKpB,KAAL,CAAWsB,MAAzD,CAApC;AAEA,cAAM;AAAEP,UAAAA,KAAK,EAAES,aAAT;AAAwBC,UAAAA,GAAG,EAAEC;AAA7B,YAA6CR,KAAnD;AACA,cAAM;AAAES,UAAAA,MAAM,EAAEC,WAAV;AAAuBC,UAAAA,MAAvB;AAA+BT,UAAAA,KAA/B;AAAsCE,UAAAA;AAAtC,YAAiDC,YAAvD;;AAEA,YAAIC,aAAa,CAACM,CAAd,GAAkBF,WAAW,CAACb,KAAZ,CAAkBe,CAAxC,EAA2C;AACzC;AACAD,UAAAA,MAAM,CAACC,CAAP,GAAW,CAACC,IAAI,CAACC,GAAL,CAASR,aAAa,CAACM,CAAd,GAAkB,KAAK9B,KAAL,CAAWsB,MAAX,GAAoB,KAAKW,aAApD,EAAmE,CAAnE,CAAZ,CAFyC,CAE0C;AACpF,SAHD,MAGO,IAAIP,WAAW,CAACI,CAAZ,GAAgBF,WAAW,CAACH,GAAZ,CAAgBK,CAApC,EAAuC;AAC5C;AACAD,UAAAA,MAAM,CAACC,CAAP,GAAW,CAACC,IAAI,CAACC,GAAL,CAASN,WAAW,CAACI,CAAZ,GAAgB,KAAK9B,KAAL,CAAWsB,MAAX,GAAoB,KAAKW,aAAzC,GAAyD,KAAKjC,KAAL,CAAWsB,MAA7E,EAAqF,CAArF,CAAZ,CAF4C,CAEyD;AACtG;;AAED,YAAIE,aAAa,CAACU,CAAd,GAAkBN,WAAW,CAACb,KAAZ,CAAkBmB,CAAxC,EAA2C;AACzC;AACAL,UAAAA,MAAM,CAACK,CAAP,GAAW,CAACH,IAAI,CAACC,GAAL,CAASR,aAAa,CAACU,CAAd,GAAkB,KAAKlC,KAAL,CAAWoB,KAAX,GAAmB,KAAKa,aAAnD,EAAkE,CAAlE,CAAZ,CAFyC,CAEyC;AACnF,SAHD,MAGO,IAAIP,WAAW,CAACQ,CAAZ,GAAgBN,WAAW,CAACH,GAAZ,CAAgBS,CAApC,EAAuC;AAC5C;AACAL,UAAAA,MAAM,CAACK,CAAP,GAAW,CAACH,IAAI,CAACC,GAAL,CAASN,WAAW,CAACQ,CAAZ,GAAgB,KAAKlC,KAAL,CAAWoB,KAAX,GAAmB,KAAKa,aAAxC,GAAwD,KAAKjC,KAAL,CAAWoB,KAA5E,EAAmF,CAAnF,CAAZ,CAF4C,CAEuD;AACpG;;AAED,aAAKb,QAAL,CAAc;AACZ4B,UAAAA,UAAU,EAAE;AACVf,YAAAA,KADU;AAEVE,YAAAA,MAFU;AAGVc,YAAAA,GAAG,EAAEP,MAAM,CAACC,CAHF;AAIVO,YAAAA,IAAI,EAAER,MAAM,CAACK;AAJH,WADA;AAOZI,UAAAA,WAAW,EAAE,KAAKtC,KAAL,CAAWI;AAPZ,SAAd;AAUA,cAAMmC,OAAO,GAAG7C,MAAM,GAAGuB,OAAT,EAAhB;;AACA,YAAIsB,OAAO,GAAGvB,SAAV,GAAsB,GAA1B,EAA+B;AAC7BxB,UAAAA,QAAQ,CAACkB,MAAT,CAAgB,KAAKL,KAAL,CAAWM,UAA3B,EAAuC;AACrCC,YAAAA,OAAO,EAAE,CAD4B;AAErCC,YAAAA,QAAQ,EAAE,CAF2B;AAGrCC,YAAAA,eAAe,EAAE;AAHoB,WAAvC,EAIGC,KAJH;AAKD;AACF,OA1CD,CA0CE,OAAOyB,CAAP,EAAU;AACV,aAAKjC,QAAL,CAAc;AACZ+B,UAAAA,WAAW,EAAE,KAAKtC,KAAL,CAAWI;AADZ,SAAd;AAGD;AACF,KA1FkB;;AAGjB,SAAK6B,aAAL,GAAqB,KAAKjC,KAAL,CAAWiC,aAAX,IAA4B,GAAjD;AAEA,SAAK5B,KAAL,GAAa;AACX8B,MAAAA,UAAU,EAAE;AACVf,QAAAA,KAAK,EAAE,KAAKpB,KAAL,CAAWoB,KADR;AAEVE,QAAAA,MAAM,EAAE,KAAKtB,KAAL,CAAWsB;AAFT,OADD;AAKXX,MAAAA,UAAU,EAAE,IAAInB,QAAQ,CAACiD,KAAb,CAAmB,GAAnB,CALD;AAMXH,MAAAA,WAAW,EAAEzC,MAAM,CAAC,KAAKG,KAAL,CAAWI,GAAZ;AANR,KAAb;AAQD;;AAEDsC,EAAAA,iBAAiB,GAAG;AAClB,SAAKC,aAAL;AACD;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAAY;AAC5B,QAAIA,SAAS,CAACzC,GAAV,KAAkB,KAAKJ,KAAL,CAAWI,GAA7B,IAAoCyC,SAAS,CAACvB,MAAV,KAAqB,KAAKtB,KAAL,CAAWsB,MAApE,IAA8EuB,SAAS,CAACzB,KAAV,KAAoB,KAAKpB,KAAL,CAAWoB,KAAjH,EAAwH;AACtH,WAAKuB,aAAL;AACD;AACF;;AAqEDG,EAAAA,MAAM,GAAG;AACP,wBACE,oBAAC,IAAD;AACE,MAAA,KAAK,EAAE,CACLC,MAAM,CAACC,SADF,EAEL;AACE5B,QAAAA,KAAK,EAAE,KAAKpB,KAAL,CAAWoB,KADpB;AAEEE,QAAAA,MAAM,EAAE,KAAKtB,KAAL,CAAWsB;AAFrB,OAFK,EAML,KAAKtB,KAAL,CAAWiD,KANN;AADT,oBAUE,oBAAC,QAAD,CAAU,KAAV;AACE,MAAA,UAAU,EAAE,KAAK5C,KAAL,CAAWM,UADzB;AAEE,MAAA,MAAM,EAAE;AAAEP,QAAAA,GAAG,EAAE,KAAKC,KAAL,CAAWiC;AAAlB,OAFV;AAGE,MAAA,KAAK,EAAE,CAACS,MAAM,CAAC7B,KAAR,EAAe,KAAKb,KAAL,CAAW8B,UAA1B,CAHT;AAIE,MAAA,MAAM,EAAE,KAAKe;AAJf,MAVF,EAgBG,KAAKlD,KAAL,CAAWmD,QAhBd,CADF;AAoBD;;AAlHqC;;AAqHxC,MAAMJ,MAAM,GAAGtD,UAAU,CAAC2D,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AACTK,IAAAA,QAAQ,EAAE;AADD,GADoB;AAI/BnC,EAAAA,KAAK,EAAE;AACLoC,IAAAA,QAAQ,EAAE,UADL;AAELlB,IAAAA,GAAG,EAAE,CAFA;AAGLC,IAAAA,IAAI,EAAE,CAHD;AAILkB,IAAAA,UAAU,EAAE;AAJP;AAJwB,CAAlB,CAAf;AAYA,eAAezD,eAAf","sourcesContent":["import React, { Component } from 'react';\nimport { View, Animated, StyleSheet } from 'react-native';\nimport moment from 'moment';\nimport { findLandmarkRange, getScaledOffset, get300 } from '../helper';\n\nclass AutoOffsetImage extends Component {\n constructor(props) {\n super(props);\n\n this.paddingFactor = this.props.paddingFactor || 0.1;\n\n this.state = {\n imageStyle: {\n width: this.props.width,\n height: this.props.height,\n },\n blurRadius: new Animated.Value(100),\n imageSource: get300(this.props.uri),\n };\n }\n\n componentDidMount() {\n this.positionImage();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.uri !== this.props.uri || prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this.positionImage();\n }\n }\n\n onLoad = event => {\n if (event.nativeEvent.source.uri === this.props.uri && !this.state.imageLoaded) {\n //unblur\n this.setState({\n imageLoaded: true,\n });\n Animated.sequence([\n Animated.delay(200),\n Animated.timing(this.state.blurRadius, {\n toValue: 0,\n duration: 500,\n useNativeDriver: false,\n }),\n ]).start();\n }\n };\n\n positionImage = async () => {\n try {\n const startTime = moment().valueOf();\n const image = await findLandmarkRange(this.props.uri, { targetWidth: this.props.width, targetHeight: this.props.height });\n const scaledOffset = getScaledOffset(image.width, image.height, this.props.width, this.props.height);\n\n const { start: landmarkStart, end: landmarkEnd } = image;\n const { bounds: imageBounds, offset, width, height } = scaledOffset;\n\n if (landmarkStart.y < imageBounds.start.y) {\n // move up\n offset.y = -Math.max(landmarkStart.y - this.props.height * this.paddingFactor, 0); // move top to 5% above start of landmark\n } else if (landmarkEnd.y > imageBounds.end.y) {\n // move down\n offset.y = -Math.max(landmarkEnd.y + this.props.height * this.paddingFactor - this.props.height, 0); // move bottom to 5% below end of landmark\n }\n\n if (landmarkStart.x < imageBounds.start.x) {\n // move right\n offset.x = -Math.max(landmarkStart.x - this.props.width * this.paddingFactor, 0); // move left edge to 5% left of start of landmark\n } else if (landmarkEnd.x > imageBounds.end.x) {\n // move left\n offset.x = -Math.max(landmarkEnd.x + this.props.width * this.paddingFactor - this.props.width, 0); // move right edge to 5% left of end of landmark\n }\n\n this.setState({\n imageStyle: {\n width,\n height,\n top: offset.y,\n left: offset.x,\n },\n imageSource: this.props.uri,\n });\n\n const endTime = moment().valueOf();\n if (endTime - startTime < 300) {\n Animated.timing(this.state.blurRadius, {\n toValue: 0,\n duration: 0,\n useNativeDriver: false,\n }).start();\n }\n } catch (e) {\n this.setState({\n imageSource: this.props.uri,\n });\n }\n };\n\n render() {\n return (\n <View\n style={[\n styles.container,\n {\n width: this.props.width,\n height: this.props.height,\n },\n this.props.style,\n ]}\n >\n <Animated.Image\n blurRadius={this.state.blurRadius}\n source={{ uri: this.state.imageSource }}\n style={[styles.image, this.state.imageStyle]}\n onLoad={this.onLoad}\n />\n {this.props.children}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n image: {\n position: 'absolute',\n top: 0,\n left: 0,\n resizeMode: 'cover',\n },\n});\n\nexport default AutoOffsetImage;\n"]}
|
|
1
|
+
{"version":3,"sources":["AutoOffsetImage.js"],"names":["React","Component","View","Animated","StyleSheet","connect","moment","findLandmarkRange","getScaledOffset","get300","detectFaces","saveImagePosition","AutoOffsetImage","constructor","props","event","nativeEvent","source","uri","state","imageLoaded","setState","sequence","delay","timing","blurRadius","toValue","duration","useNativeDriver","start","startTime","valueOf","cachedValues","imagePositions","response","stringActions","getString","encodeURIComponent","data","e","console","log","faces","image","_","isEmpty","add","timestamp","targetWidth","width","targetHeight","height","scaledOffset","landmarkStart","end","landmarkEnd","bounds","imageBounds","offset","y","Math","max","paddingFactor","x","imageStyle","top","left","imageSource","endTime","Value","componentDidMount","positionImage","componentDidUpdate","prevProps","render","styles","container","style","onLoad","children","create","overflow","position","resizeMode","mapStateToProps","media","positions","autoOffsetImage"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,SAASC,IAAT,EAAeC,QAAf,EAAyBC,UAAzB,QAA2C,cAA3C;AACA,SAASC,OAAT,QAAwB,aAAxB;AACA,OAAOC,MAAP,MAAmB,QAAnB;AACA,SAASC,iBAAT,EAA4BC,eAA5B,EAA6CC,MAA7C,EAAqDC,WAArD,QAAwE,WAAxE;AACA,SAASC,iBAAT,QAAkC,YAAlC;;AAEA,MAAMC,eAAN,SAA8BX,SAA9B,CAAwC;AACtCY,EAAAA,WAAW,CAACC,KAAD,EAAQ;AACjB,UAAMA,KAAN;;AADiB,oCAyBVC,KAAK,IAAI;AAChB,UAAIA,KAAK,CAACC,WAAN,CAAkBC,MAAlB,CAAyBC,GAAzB,KAAiC,KAAKJ,KAAL,CAAWI,GAA5C,IAAmD,CAAC,KAAKC,KAAL,CAAWC,WAAnE,EAAgF;AAC9E;AACA,aAAKC,QAAL,CAAc;AACZD,UAAAA,WAAW,EAAE;AADD,SAAd;AAGAjB,QAAAA,QAAQ,CAACmB,QAAT,CAAkB,CAChBnB,QAAQ,CAACoB,KAAT,CAAe,GAAf,CADgB,EAEhBpB,QAAQ,CAACqB,MAAT,CAAgB,KAAKL,KAAL,CAAWM,UAA3B,EAAuC;AACrCC,UAAAA,OAAO,EAAE,CAD4B;AAErCC,UAAAA,QAAQ,EAAE,GAF2B;AAGrCC,UAAAA,eAAe,EAAE;AAHoB,SAAvC,CAFgB,CAAlB,EAOGC,KAPH;AAQD;AACF,KAxCkB;;AAAA,2CA0CH,YAAY;AAC1B,UAAI;AACF,cAAMC,SAAS,GAAGxB,MAAM,GAAGyB,OAAT,EAAlB;AAEA,YAAIC,YAAJ,CAHE,CAIF;;AACA,YAAI,KAAKlB,KAAL,CAAWmB,cAAX,IAA6B,KAAKnB,KAAL,CAAWmB,cAAX,CAA0B,KAAKnB,KAAL,CAAWI,GAArC,CAAjC,EAA4E;AAC1Ec,UAAAA,YAAY,GAAG,KAAKlB,KAAL,CAAWmB,cAAX,CAA0B,KAAKnB,KAAL,CAAWI,GAArC,CAAf;AACD,SAPC,CAQF;;;AACA,YAAI,CAACc,YAAL,EAAmB;AACjB,cAAI;AACF,kBAAME,QAAQ,GAAG,MAAMC,aAAa,CAACC,SAAd,CAAwB,YAAxB,EAAuC,cAAaC,kBAAkB,CAAC,KAAKvB,KAAL,CAAWI,GAAZ,CAAiB,EAAvF,CAAvB;AACAc,YAAAA,YAAY,GAAGE,QAAQ,CAACI,IAAxB;AACD,WAHD,CAGE,OAAOC,CAAP,EAAU;AACVC,YAAAA,OAAO,CAACC,GAAR,CAAY,oBAAZ;AACD,WANgB,CAOjB;;;AACA,cACE,CAACT,YAAD,IACA,CAACA,YAAY,CAACU,KADd,IAEA,CAACV,YAAY,CAACW,KAFd,IAGCC,CAAC,CAACC,OAAF,CAAUb,YAAY,CAACU,KAAvB,KACCpC,MAAM,GACHwC,GADH,CACO,CAAC,CADR,EACW,GADX,EAEGf,OAFH,KAEezB,MAAM,CAAC0B,YAAY,CAACe,SAAd,CAAN,CAA+BhB,OAA/B,EAPnB,EAQE;AACAC,YAAAA,YAAY,GAAG,MAAMtB,WAAW,CAAC,KAAKI,KAAL,CAAWI,GAAZ,CAAhC;AACD;;AACD,eAAKJ,KAAL,CAAWH,iBAAX,CAA6B,KAAKG,KAAL,CAAWI,GAAxC,EAA6Cc,YAA7C;AACD;;AAED,cAAMW,KAAK,GAAG,MAAMpC,iBAAiB,CAAC,KAAKO,KAAL,CAAWI,GAAZ,EAAiB;AACpD8B,UAAAA,WAAW,EAAE,KAAKlC,KAAL,CAAWmC,KAD4B;AAEpDC,UAAAA,YAAY,EAAE,KAAKpC,KAAL,CAAWqC,MAF2B;AAGpDnB,UAAAA;AAHoD,SAAjB,CAArC;AAKA,cAAMoB,YAAY,GAAG5C,eAAe,CAACmC,KAAK,CAACM,KAAP,EAAcN,KAAK,CAACQ,MAApB,EAA4B,KAAKrC,KAAL,CAAWmC,KAAvC,EAA8C,KAAKnC,KAAL,CAAWqC,MAAzD,CAApC;AAEA,cAAM;AAAEtB,UAAAA,KAAK,EAAEwB,aAAT;AAAwBC,UAAAA,GAAG,EAAEC;AAA7B,YAA6CZ,KAAnD;AACA,cAAM;AAAEa,UAAAA,MAAM,EAAEC,WAAV;AAAuBC,UAAAA,MAAvB;AAA+BT,UAAAA,KAA/B;AAAsCE,UAAAA;AAAtC,YAAiDC,YAAvD;;AAEA,YAAIC,aAAa,CAACM,CAAd,GAAkBF,WAAW,CAAC5B,KAAZ,CAAkB8B,CAAxC,EAA2C;AACzC;AACAD,UAAAA,MAAM,CAACC,CAAP,GAAW,CAACC,IAAI,CAACC,GAAL,CAASR,aAAa,CAACM,CAAd,GAAkB,KAAK7C,KAAL,CAAWqC,MAAX,GAAoB,KAAKW,aAApD,EAAmE,CAAnE,CAAZ,CAFyC,CAE0C;AACpF,SAHD,MAGO,IAAIP,WAAW,CAACI,CAAZ,GAAgBF,WAAW,CAACH,GAAZ,CAAgBK,CAApC,EAAuC;AAC5C;AACAD,UAAAA,MAAM,CAACC,CAAP,GAAW,CAACC,IAAI,CAACC,GAAL,CAASN,WAAW,CAACI,CAAZ,GAAgB,KAAK7C,KAAL,CAAWqC,MAAX,GAAoB,KAAKW,aAAzC,GAAyD,KAAKhD,KAAL,CAAWqC,MAA7E,EAAqF,CAArF,CAAZ,CAF4C,CAEyD;AACtG;;AAED,YAAIE,aAAa,CAACU,CAAd,GAAkBN,WAAW,CAAC5B,KAAZ,CAAkBkC,CAAxC,EAA2C;AACzC;AACAL,UAAAA,MAAM,CAACK,CAAP,GAAW,CAACH,IAAI,CAACC,GAAL,CAASR,aAAa,CAACU,CAAd,GAAkB,KAAKjD,KAAL,CAAWmC,KAAX,GAAmB,KAAKa,aAAnD,EAAkE,CAAlE,CAAZ,CAFyC,CAEyC;AACnF,SAHD,MAGO,IAAIP,WAAW,CAACQ,CAAZ,GAAgBN,WAAW,CAACH,GAAZ,CAAgBS,CAApC,EAAuC;AAC5C;AACAL,UAAAA,MAAM,CAACK,CAAP,GAAW,CAACH,IAAI,CAACC,GAAL,CAASN,WAAW,CAACQ,CAAZ,GAAgB,KAAKjD,KAAL,CAAWmC,KAAX,GAAmB,KAAKa,aAAxC,GAAwD,KAAKhD,KAAL,CAAWmC,KAA5E,EAAmF,CAAnF,CAAZ,CAF4C,CAEuD;AACpG;;AAED,aAAK5B,QAAL,CAAc;AACZ2C,UAAAA,UAAU,EAAE;AACVf,YAAAA,KADU;AAEVE,YAAAA,MAFU;AAGVc,YAAAA,GAAG,EAAEP,MAAM,CAACC,CAHF;AAIVO,YAAAA,IAAI,EAAER,MAAM,CAACK;AAJH,WADA;AAOZI,UAAAA,WAAW,EAAE,KAAKrD,KAAL,CAAWI;AAPZ,SAAd;AAUA,cAAMkD,OAAO,GAAG9D,MAAM,GAAGyB,OAAT,EAAhB;;AACA,YAAIqC,OAAO,GAAGtC,SAAV,GAAsB,GAA1B,EAA+B;AAC7B3B,UAAAA,QAAQ,CAACqB,MAAT,CAAgB,KAAKL,KAAL,CAAWM,UAA3B,EAAuC;AACrCC,YAAAA,OAAO,EAAE,CAD4B;AAErCC,YAAAA,QAAQ,EAAE,CAF2B;AAGrCC,YAAAA,eAAe,EAAE;AAHoB,WAAvC,EAIGC,KAJH;AAKD;AACF,OA3ED,CA2EE,OAAOU,CAAP,EAAU;AACV,aAAKlB,QAAL,CAAc;AACZ8C,UAAAA,WAAW,EAAE,KAAKrD,KAAL,CAAWI;AADZ,SAAd;AAGD;AACF,KA3HkB;;AAGjB,SAAK4C,aAAL,GAAqB,KAAKhD,KAAL,CAAWgD,aAAX,IAA4B,GAAjD;AAEA,SAAK3C,KAAL,GAAa;AACX6C,MAAAA,UAAU,EAAE;AACVf,QAAAA,KAAK,EAAE,KAAKnC,KAAL,CAAWmC,KADR;AAEVE,QAAAA,MAAM,EAAE,KAAKrC,KAAL,CAAWqC;AAFT,OADD;AAKX1B,MAAAA,UAAU,EAAE,IAAItB,QAAQ,CAACkE,KAAb,CAAmB,GAAnB,CALD;AAMXF,MAAAA,WAAW,EAAE1D,MAAM,CAAC,KAAKK,KAAL,CAAWI,GAAZ;AANR,KAAb;AAQD;;AAEDoD,EAAAA,iBAAiB,GAAG;AAClB,SAAKC,aAAL;AACD;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAAY;AAC5B,QAAIA,SAAS,CAACvD,GAAV,KAAkB,KAAKJ,KAAL,CAAWI,GAA7B,IAAoCuD,SAAS,CAACtB,MAAV,KAAqB,KAAKrC,KAAL,CAAWqC,MAApE,IAA8EsB,SAAS,CAACxB,KAAV,KAAoB,KAAKnC,KAAL,CAAWmC,KAAjH,EAAwH;AACtH,WAAKsB,aAAL;AACD;AACF;;AAsGDG,EAAAA,MAAM,GAAG;AACP,wBACE,oBAAC,IAAD;AACE,MAAA,KAAK,EAAE,CACLC,MAAM,CAACC,SADF,EAEL;AACE3B,QAAAA,KAAK,EAAE,KAAKnC,KAAL,CAAWmC,KADpB;AAEEE,QAAAA,MAAM,EAAE,KAAKrC,KAAL,CAAWqC;AAFrB,OAFK,EAML,KAAKrC,KAAL,CAAW+D,KANN;AADT,oBAUE,oBAAC,QAAD,CAAU,KAAV;AACE,MAAA,UAAU,EAAE,KAAK1D,KAAL,CAAWM,UADzB;AAEE,MAAA,MAAM,EAAE;AAAEP,QAAAA,GAAG,EAAE,KAAKC,KAAL,CAAWgD;AAAlB,OAFV;AAGE,MAAA,KAAK,EAAE,CAACQ,MAAM,CAAChC,KAAR,EAAe,KAAKxB,KAAL,CAAW6C,UAA1B,CAHT;AAIE,MAAA,MAAM,EAAE,KAAKc;AAJf,MAVF,EAgBG,KAAKhE,KAAL,CAAWiE,QAhBd,CADF;AAoBD;;AAnJqC;;AAsJxC,MAAMJ,MAAM,GAAGvE,UAAU,CAAC4E,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AACTK,IAAAA,QAAQ,EAAE;AADD,GADoB;AAI/BtC,EAAAA,KAAK,EAAE;AACLuC,IAAAA,QAAQ,EAAE,UADL;AAELjB,IAAAA,GAAG,EAAE,CAFA;AAGLC,IAAAA,IAAI,EAAE,CAHD;AAILiB,IAAAA,UAAU,EAAE;AAJP;AAJwB,CAAlB,CAAf;;AAYA,MAAMC,eAAe,GAAGjE,KAAK,IAAI;AAC/B,SAAO;AACLc,IAAAA,cAAc,EAAEd,KAAK,CAACkE,KAAN,CAAYC;AADvB,GAAP;AAGD,CAJD;;AAMA,MAAMC,eAAe,GAAGlF,OAAO,CAAC+E,eAAD,EAAkB;AAAEzE,EAAAA;AAAF,CAAlB,CAAP,CAAgDC,eAAhD,CAAxB;AACA,SAAS2E,eAAe,IAAI3E,eAA5B","sourcesContent":["import React, { Component } from 'react';\nimport { View, Animated, StyleSheet } from 'react-native';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { findLandmarkRange, getScaledOffset, get300, detectFaces } from '../helper';\nimport { saveImagePosition } from '../actions';\n\nclass AutoOffsetImage extends Component {\n constructor(props) {\n super(props);\n\n this.paddingFactor = this.props.paddingFactor || 0.1;\n\n this.state = {\n imageStyle: {\n width: this.props.width,\n height: this.props.height,\n },\n blurRadius: new Animated.Value(100),\n imageSource: get300(this.props.uri),\n };\n }\n\n componentDidMount() {\n this.positionImage();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.uri !== this.props.uri || prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this.positionImage();\n }\n }\n\n onLoad = event => {\n if (event.nativeEvent.source.uri === this.props.uri && !this.state.imageLoaded) {\n //unblur\n this.setState({\n imageLoaded: true,\n });\n Animated.sequence([\n Animated.delay(200),\n Animated.timing(this.state.blurRadius, {\n toValue: 0,\n duration: 500,\n useNativeDriver: false,\n }),\n ]).start();\n }\n };\n\n positionImage = async () => {\n try {\n const startTime = moment().valueOf();\n\n let cachedValues;\n // check local cache\n if (this.props.imagePositions && this.props.imagePositions[this.props.uri]) {\n cachedValues = this.props.imagePositions[this.props.uri];\n }\n // check remote cache\n if (!cachedValues) {\n try {\n const response = await stringActions.getString('plussSpace', `imagefaces_${encodeURIComponent(this.props.uri)}`);\n cachedValues = response.data;\n } catch (e) {\n console.log('errored from cache');\n }\n // run face detection locally\n if (\n !cachedValues ||\n !cachedValues.faces ||\n !cachedValues.image ||\n (_.isEmpty(cachedValues.faces) &&\n moment()\n .add(-1, 'w')\n .valueOf() > moment(cachedValues.timestamp).valueOf())\n ) {\n cachedValues = await detectFaces(this.props.uri);\n }\n this.props.saveImagePosition(this.props.uri, cachedValues);\n }\n\n const image = await findLandmarkRange(this.props.uri, {\n targetWidth: this.props.width,\n targetHeight: this.props.height,\n cachedValues,\n });\n const scaledOffset = getScaledOffset(image.width, image.height, this.props.width, this.props.height);\n\n const { start: landmarkStart, end: landmarkEnd } = image;\n const { bounds: imageBounds, offset, width, height } = scaledOffset;\n\n if (landmarkStart.y < imageBounds.start.y) {\n // move up\n offset.y = -Math.max(landmarkStart.y - this.props.height * this.paddingFactor, 0); // move top to 5% above start of landmark\n } else if (landmarkEnd.y > imageBounds.end.y) {\n // move down\n offset.y = -Math.max(landmarkEnd.y + this.props.height * this.paddingFactor - this.props.height, 0); // move bottom to 5% below end of landmark\n }\n\n if (landmarkStart.x < imageBounds.start.x) {\n // move right\n offset.x = -Math.max(landmarkStart.x - this.props.width * this.paddingFactor, 0); // move left edge to 5% left of start of landmark\n } else if (landmarkEnd.x > imageBounds.end.x) {\n // move left\n offset.x = -Math.max(landmarkEnd.x + this.props.width * this.paddingFactor - this.props.width, 0); // move right edge to 5% left of end of landmark\n }\n\n this.setState({\n imageStyle: {\n width,\n height,\n top: offset.y,\n left: offset.x,\n },\n imageSource: this.props.uri,\n });\n\n const endTime = moment().valueOf();\n if (endTime - startTime < 500) {\n Animated.timing(this.state.blurRadius, {\n toValue: 0,\n duration: 0,\n useNativeDriver: false,\n }).start();\n }\n } catch (e) {\n this.setState({\n imageSource: this.props.uri,\n });\n }\n };\n\n render() {\n return (\n <View\n style={[\n styles.container,\n {\n width: this.props.width,\n height: this.props.height,\n },\n this.props.style,\n ]}\n >\n <Animated.Image\n blurRadius={this.state.blurRadius}\n source={{ uri: this.state.imageSource }}\n style={[styles.image, this.state.imageStyle]}\n onLoad={this.onLoad}\n />\n {this.props.children}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n image: {\n position: 'absolute',\n top: 0,\n left: 0,\n resizeMode: 'cover',\n },\n});\n\nconst mapStateToProps = state => {\n return {\n imagePositions: state.media.positions,\n };\n};\n\nconst autoOffsetImage = connect(mapStateToProps, { saveImagePosition })(AutoOffsetImage);\nexport { autoOffsetImage as AutoOffsetImage };\n"]}
|
|
@@ -9,6 +9,7 @@ import { Icon } from 'react-native-elements';
|
|
|
9
9
|
import { getPluralS, getThumb300, get1400, getSiteSettingFromState, getFirstName, getPluralOptions } from '../helper';
|
|
10
10
|
import { getMainBrandingColourFromState, TEXT_DARKEST, BG_GREY, TEXT_LIGHT, LINEGREY } from '../colours';
|
|
11
11
|
import { reactionActions, notificationActions } from '../apis';
|
|
12
|
+
import { blockUser, unblockUser } from '../actions';
|
|
12
13
|
import { ConfirmPopup } from './ConfirmPopup';
|
|
13
14
|
import { ProfilePic } from './ProfilePic';
|
|
14
15
|
import { ImagePopup } from './ImagePopup';
|
|
@@ -53,6 +54,46 @@ class CommentSection extends Component {
|
|
|
53
54
|
});
|
|
54
55
|
});
|
|
55
56
|
|
|
57
|
+
_defineProperty(this, "onPressBlockUser", c => {
|
|
58
|
+
this.setState({
|
|
59
|
+
commentToBlock: c
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
_defineProperty(this, "onPressConfirmBlock", () => {
|
|
64
|
+
const userId = this.state.commentToBlock.UserId;
|
|
65
|
+
this.props.blockUser(userId);
|
|
66
|
+
this.setState({
|
|
67
|
+
commentToBlock: null
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
_defineProperty(this, "onPressCancelBlock", () => {
|
|
72
|
+
this.setState({
|
|
73
|
+
commentToBlock: null
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
_defineProperty(this, "onPressUnblockUser", c => {
|
|
78
|
+
this.setState({
|
|
79
|
+
commentToUnblock: c
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
_defineProperty(this, "onPressConfirmUnblock", () => {
|
|
84
|
+
const userId = this.state.commentToUnblock.UserId;
|
|
85
|
+
this.props.unblockUser(userId);
|
|
86
|
+
this.setState({
|
|
87
|
+
commentToUnblock: null
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
_defineProperty(this, "onPressCancelUnblock", () => {
|
|
92
|
+
this.setState({
|
|
93
|
+
commentToUnblock: null
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
56
97
|
_defineProperty(this, "onPressConfirmReport", () => {
|
|
57
98
|
const commentId = this.state.commentToReport.Id;
|
|
58
99
|
this.setState({
|
|
@@ -197,7 +238,15 @@ class CommentSection extends Component {
|
|
|
197
238
|
return this.state.commentsLoading;
|
|
198
239
|
});
|
|
199
240
|
|
|
200
|
-
_defineProperty(this, "
|
|
241
|
+
_defineProperty(this, "isUserBlocked", c => {
|
|
242
|
+
return _.includes(this.props.blockedUsers, c.UserId);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
_defineProperty(this, "canBlockComment", c => {
|
|
246
|
+
return this.props.user.uid !== c.UserId;
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
_defineProperty(this, "renderReplyText", (c, isUserBlocked) => {
|
|
201
250
|
if (this.props.threadId || this.props.hideReplyButton) {
|
|
202
251
|
return null;
|
|
203
252
|
}
|
|
@@ -214,7 +263,7 @@ class CommentSection extends Component {
|
|
|
214
263
|
style: [styles.commentRepliesText, {
|
|
215
264
|
color: this.props.colourBrandingMain
|
|
216
265
|
}]
|
|
217
|
-
}, `Reply to ${getFirstName(c.User ? c.User.displayName : 'comment')}`);
|
|
266
|
+
}, `Reply to ${getFirstName(!isUserBlocked && c.User ? c.User.displayName : 'comment')}`);
|
|
218
267
|
} else {
|
|
219
268
|
// existing replies
|
|
220
269
|
const profilePics = _.take(_.uniqBy(threadComments, c => c.UserId), 3);
|
|
@@ -401,6 +450,32 @@ class CommentSection extends Component {
|
|
|
401
450
|
});
|
|
402
451
|
}
|
|
403
452
|
|
|
453
|
+
renderCommentBlockConfirm() {
|
|
454
|
+
return /*#__PURE__*/React.createElement(ConfirmPopup, {
|
|
455
|
+
visible: !!this.state.commentToBlock,
|
|
456
|
+
onConfirm: this.onPressConfirmBlock,
|
|
457
|
+
onCancel: this.onPressCancelBlock,
|
|
458
|
+
onClose: this.onPressCancelBlock,
|
|
459
|
+
text: "Are you sure you want to block this user?",
|
|
460
|
+
extraContent: /*#__PURE__*/React.createElement(Text, {
|
|
461
|
+
style: styles.commentReportText
|
|
462
|
+
}, "You will no longer see comments made by this user")
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
renderCommentUnblockConfirm() {
|
|
467
|
+
return /*#__PURE__*/React.createElement(ConfirmPopup, {
|
|
468
|
+
visible: !!this.state.commentToUnblock,
|
|
469
|
+
onConfirm: this.onPressConfirmUnblock,
|
|
470
|
+
onCancel: this.onPressCancelUnblock,
|
|
471
|
+
onClose: this.onPressCancelUnblock,
|
|
472
|
+
text: "Are you sure you want to unblock this user?",
|
|
473
|
+
extraContent: /*#__PURE__*/React.createElement(Text, {
|
|
474
|
+
style: styles.commentReportText
|
|
475
|
+
}, "You will once again see comments made by this user")
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
|
|
404
479
|
renderCommentReportStatus() {
|
|
405
480
|
const {
|
|
406
481
|
commentReportedStatus
|
|
@@ -414,7 +489,7 @@ class CommentSection extends Component {
|
|
|
414
489
|
style: styles.commentReportText
|
|
415
490
|
}, isSuccess ? 'We will review the comment within 24 hours' : 'There was a problem reporting the comment please try again later'),
|
|
416
491
|
hideNo: true,
|
|
417
|
-
yesText: '
|
|
492
|
+
yesText: 'Done'
|
|
418
493
|
});
|
|
419
494
|
}
|
|
420
495
|
|
|
@@ -435,13 +510,14 @@ class CommentSection extends Component {
|
|
|
435
510
|
}
|
|
436
511
|
|
|
437
512
|
renderComment(c) {
|
|
513
|
+
const isUserBlocked = this.isUserBlocked(c);
|
|
438
514
|
return /*#__PURE__*/React.createElement(View, {
|
|
439
515
|
style: styles.comment,
|
|
440
516
|
key: c.Id
|
|
441
517
|
}, /*#__PURE__*/React.createElement(View, {
|
|
442
518
|
style: styles.commentFlex
|
|
443
519
|
}, /*#__PURE__*/React.createElement(ProfilePic, {
|
|
444
|
-
ProfilePic: c.User.profilePic,
|
|
520
|
+
ProfilePic: isUserBlocked ? null : c.User.profilePic,
|
|
445
521
|
Diameter: 40,
|
|
446
522
|
style: styles.commentProfilePic
|
|
447
523
|
}), /*#__PURE__*/React.createElement(View, {
|
|
@@ -468,21 +544,47 @@ class CommentSection extends Component {
|
|
|
468
544
|
name: "flag",
|
|
469
545
|
type: "font-awesome",
|
|
470
546
|
iconStyle: styles.commentButtonIcon
|
|
471
|
-
}))), /*#__PURE__*/React.createElement(
|
|
547
|
+
}))), !this.props.disableFlag && this.canBlockComment(c) && (isUserBlocked ? /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
548
|
+
style: {
|
|
549
|
+
marginRight: 8
|
|
550
|
+
},
|
|
551
|
+
onPress: this.onPressUnblockUser.bind(this, c)
|
|
552
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
553
|
+
style: [styles.commentButtonContainer, {
|
|
554
|
+
backgroundColor: this.props.colourBrandingMain
|
|
555
|
+
}]
|
|
556
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
557
|
+
name: "user-plus",
|
|
558
|
+
type: "font-awesome",
|
|
559
|
+
iconStyle: styles.commentButtonIcon
|
|
560
|
+
}))) : /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
561
|
+
style: {
|
|
562
|
+
marginRight: 8
|
|
563
|
+
},
|
|
564
|
+
onPress: this.onPressBlockUser.bind(this, c)
|
|
565
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
566
|
+
style: [styles.commentButtonContainer, {
|
|
567
|
+
backgroundColor: this.props.colourBrandingMain
|
|
568
|
+
}]
|
|
569
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
570
|
+
name: "user-times",
|
|
571
|
+
type: "font-awesome",
|
|
572
|
+
iconStyle: styles.commentButtonIcon
|
|
573
|
+
})))), /*#__PURE__*/React.createElement(Text, {
|
|
472
574
|
style: [styles.commentName, {
|
|
473
575
|
fontSize: this.getAdjustedSize(13)
|
|
474
576
|
}]
|
|
475
|
-
}, c.User.displayName)), !_.isEmpty(c.Comment) && /*#__PURE__*/React.createElement(Text, {
|
|
577
|
+
}, isUserBlocked ? '[blocked user]' : c.User.displayName)), !_.isEmpty(c.Comment) && /*#__PURE__*/React.createElement(Text, {
|
|
476
578
|
style: [styles.commentText, {
|
|
477
579
|
fontSize: this.getAdjustedSize(13)
|
|
478
580
|
}]
|
|
479
|
-
}, c.Comment), this.renderCommentImage(c))), /*#__PURE__*/React.createElement(View, {
|
|
581
|
+
}, isUserBlocked ? '[hidden]' : c.Comment), !isUserBlocked && this.renderCommentImage(c))), /*#__PURE__*/React.createElement(View, {
|
|
480
582
|
style: styles.commentBottom
|
|
481
583
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
482
584
|
style: [styles.commentTime, {
|
|
483
585
|
fontSize: this.getAdjustedSize(13)
|
|
484
586
|
}]
|
|
485
|
-
}, moment.utc(c.Timestamp).local().format('D MMM • h:mma')), this.renderReplyText(c)));
|
|
587
|
+
}, moment.utc(c.Timestamp).local().format('D MMM • h:mma')), this.renderReplyText(c, isUserBlocked)));
|
|
486
588
|
}
|
|
487
589
|
|
|
488
590
|
renderMute() {
|
|
@@ -623,7 +725,7 @@ class CommentSection extends Component {
|
|
|
623
725
|
|
|
624
726
|
return /*#__PURE__*/React.createElement(View, {
|
|
625
727
|
style: [styles.commentSectionOuter, this.props.style]
|
|
626
|
-
}, this.renderComments(), this.renderReportLoading(), this.renderCommentDeleteConfirm(), this.renderCommentReportConfirm(), this.renderCommentReportStatus(), this.renderCommentImagePopup());
|
|
728
|
+
}, this.renderComments(), this.renderReportLoading(), this.renderCommentDeleteConfirm(), this.renderCommentReportConfirm(), this.renderCommentBlockConfirm(), this.renderCommentUnblockConfirm(), this.renderCommentReportStatus(), this.renderCommentImagePopup());
|
|
627
729
|
}
|
|
628
730
|
|
|
629
731
|
}
|
|
@@ -775,11 +877,15 @@ const mapStateToProps = state => {
|
|
|
775
877
|
return {
|
|
776
878
|
colourBrandingMain: getMainBrandingColourFromState(state),
|
|
777
879
|
user: state.user,
|
|
778
|
-
notificationsForComments: getSiteSettingFromState(state, 'NotificationsForComments', false)
|
|
880
|
+
notificationsForComments: getSiteSettingFromState(state, 'NotificationsForComments', false),
|
|
881
|
+
blockedUsers: state.userSettings.blockedUsers || []
|
|
779
882
|
};
|
|
780
883
|
};
|
|
781
884
|
|
|
782
|
-
const commentSection = connect(mapStateToProps, {
|
|
885
|
+
const commentSection = connect(mapStateToProps, {
|
|
886
|
+
blockUser,
|
|
887
|
+
unblockUser
|
|
888
|
+
}, null, {
|
|
783
889
|
forwardRef: true
|
|
784
890
|
})(CommentSection);
|
|
785
891
|
export { commentSection as CommentSection };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CommentSection.js"],"names":["React","Component","View","Text","TouchableOpacity","Image","StyleSheet","_","moment","connect","Icon","getPluralS","getThumb300","get1400","getSiteSettingFromState","getFirstName","getPluralOptions","getMainBrandingColourFromState","TEXT_DARKEST","BG_GREY","TEXT_LIGHT","LINEGREY","reactionActions","notificationActions","ConfirmPopup","ProfilePic","ImagePopup","InlineButton","Spinner","Services","CommentSection","constructor","props","c","setState","commentToDelete","removeComment","state","Id","then","res","console","log","newComments","filter","comments","commentToReport","commentId","reportLoading","reportComment","commentReportedStatus","catch","error","comment","navigation","navigate","threadId","entityType","entityId","processing","data","muteEntity","muteExpiry","Expiry","unmuteEntity","actual","duration","diff","asHours","Math","abs","ceil","notificationsForComments","getEntityNotificationSetting","muteLoaded","commentsLoading","hideReplyButton","threadComments","innerC","ParentId","content","isEmpty","styles","commentRepliesText","color","colourBrandingMain","User","displayName","profilePics","take","uniqBy","UserId","multiReplyContainer","map","i","marginRight","profilePic","marginLeft","length","commentReplies","onOpenThread","addingComment","componentDidMount","getNotificationSate","includes","user","hidden","getComments","componentWillUnmount","loadTimer","clearTimeout","onPressCommentImage","image","imagePopupSource","imagePopupOpen","onGoToAdd","commentReply","focusInput","getAdjustedSize","size","scaleFont","fontScale","commentsLoadStarted","current","loadingStarted","loadComments","minTime","maxBy","Timestamp","sortBy","concat","onCommentsLoaded","loadingCompleted","live","setTimeout","refreshFrequency","startedAddingComment","commentAdded","push","onCommentAdded","canRemoveComment","uid","permissions","adminPermission","closeCommentGallery","renderCommentDeleteConfirm","onPressConfirmDelete","onPressCancelDelete","renderCommentReportConfirm","onPressConfirmReport","onPressCancelReport","commentReportText","renderCommentReportStatus","isSuccess","onPressConfirmReportStatus","renderCommentImage","commentImageContainer","bind","commentImage","uri","renderComment","commentFlex","commentProfilePic","commentBlock","commentTitleRow","onPressDeleteComment","commentButtonContainer","backgroundColor","commentButtonIcon","disableFlag","onPressReportComment","commentName","fontSize","Comment","commentText","commentBottom","commentTime","utc","local","format","renderReplyText","renderMute","muteSpinnerContainer","isMuted","hours","getMuteRemaining","mutedFor","muteContainer","mutedForText","onUnmute","onMute","borderColor","muteButton","muteButtonInner","muteButtonIcon","muteButtonText","renderComments","commentSection","isNil","placeHolder","commentsEmpty","source","reverseOrder","reverse","showReplies","commentSectionTitleRow","alignItems","hideAddComment","goToText","commentCount","renderCommentImagePopup","renderReportLoading","reportLoadingContainer","render","commentSectionOuter","style","create","flex","paddingHorizontal","paddingVertical","borderTopColor","borderTopWidth","fontFamily","marginTop","flexDirection","borderRadius","padding","width","height","justifyContent","textAlign","paddingLeft","marginBottom","borderWidth","mapStateToProps","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image, StyleSheet } from 'react-native';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { connect } from 'react-redux';\nimport { Icon } from 'react-native-elements';\nimport { getPluralS, getThumb300, get1400, getSiteSettingFromState, getFirstName, getPluralOptions } from '../helper';\nimport { getMainBrandingColourFromState, TEXT_DARKEST, BG_GREY, TEXT_LIGHT, LINEGREY } from '../colours';\nimport { reactionActions, notificationActions } from '../apis';\nimport { ConfirmPopup } from './ConfirmPopup';\nimport { ProfilePic } from './ProfilePic';\nimport { ImagePopup } from './ImagePopup';\nimport { InlineButton } from './InlineButton';\nimport { Spinner } from './Spinner';\nimport { Services } from '../config';\n\nclass CommentSection extends Component {\n constructor(props) {\n super(props);\n this.state = {\n commentsLoading: false,\n comments: [],\n addingComment: false,\n commentToDelete: null,\n commentToReport: null,\n commentReportedStatus: null,\n reportLoading: false,\n processing: false,\n muteExpiry: null,\n muteLoaded: false,\n };\n }\n\n componentDidMount() {\n this.getNotificationSate();\n\n if (!_.includes(this.props.user.hidden, 'viewComment')) {\n this.getComments();\n }\n }\n\n componentWillUnmount() {\n if (this.loadTimer) {\n clearTimeout(this.loadTimer);\n }\n }\n\n onPressDeleteComment = c => {\n this.setState({ commentToDelete: c });\n };\n\n onPressConfirmDelete = () => {\n reactionActions.removeComment(this.state.commentToDelete.Id).then(res => {\n console.log('deleted');\n });\n const newComments = _.filter(this.state.comments, c => {\n return c.Id !== this.state.commentToDelete.Id;\n });\n this.setState({\n comments: newComments,\n commentToDelete: null,\n });\n };\n\n onPressCancelDelete = () => {\n this.setState({ commentToDelete: null });\n };\n\n onPressReportComment = c => {\n this.setState({ commentToReport: c });\n };\n\n onPressConfirmReport = () => {\n const commentId = this.state.commentToReport.Id;\n this.setState({ reportLoading: true, commentToReport: null }, () => {\n reactionActions\n .reportComment(commentId)\n .then(res => {\n this.setState({ commentReportedStatus: 'success', reportLoading: false });\n })\n .catch(error => {\n console.log('reportComment', error);\n this.setState({ commentReportedStatus: 'fail', reportLoading: false });\n });\n });\n };\n\n onPressCancelReport = () => {\n this.setState({ commentToReport: null });\n };\n\n onPressConfirmReportStatus = () => {\n this.setState({ commentReportedStatus: null });\n };\n\n onPressCommentImage(image) {\n this.setState({\n imagePopupSource: [image],\n imagePopupOpen: true,\n });\n }\n\n onGoToAdd() {\n this.props.commentReply.focusInput();\n }\n\n onOpenThread = comment => {\n Services.navigation.navigate('thread', { ...this.props, threadId: comment.Id });\n };\n\n onMute = () => {\n const { entityType, entityId } = this.props;\n this.setState({ processing: true }, async () => {\n try {\n const { data } = await notificationActions.muteEntity(entityType, entityId);\n // console.log('onMute', data);\n const muteExpiry = moment(data.Expiry);\n this.setState({ muteExpiry, processing: false });\n } catch (error) {\n console.error('onMute', error);\n this.setState({ processing: false });\n }\n });\n };\n\n onUnmute = () => {\n const { entityType, entityId } = this.props;\n this.setState({ processing: true }, async () => {\n try {\n const { data } = await notificationActions.unmuteEntity(entityType, entityId);\n // console.log('onUnmute', data);\n this.setState({ muteExpiry: null, processing: false });\n } catch (error) {\n console.error('onUnmute', error);\n this.setState({ processing: false });\n }\n });\n };\n\n isMuted = () => {\n const { muteExpiry } = this.state;\n return muteExpiry && moment() <= muteExpiry;\n };\n\n getMuteRemaining = () => {\n const { muteExpiry } = this.state;\n const actual = muteExpiry ? moment.duration(muteExpiry.diff(moment())).asHours() : 0;\n return Math.abs(Math.ceil(actual));\n };\n\n getNotificationSate = () => {\n const { processing } = this.state;\n const { entityType, entityId, notificationsForComments } = this.props;\n if (processing || !notificationsForComments) return;\n\n this.setState({ processing: true }, async () => {\n try {\n const { data } = await notificationActions.getEntityNotificationSetting(entityType, entityId);\n // console.log('getNotificationSate', data);\n const muteExpiry = data ? moment(data.Expiry) : null;\n this.setState({ muteExpiry, muteLoaded: true, processing: false });\n } catch (error) {\n console.error('getNotificationSate', error);\n this.setState({ processing: false });\n }\n });\n };\n\n getAdjustedSize(size) {\n if (this.props.scaleFont) {\n return size + this.props.user.fontScale;\n }\n return size;\n }\n\n getComments() {\n if (!this.state.commentsLoadStarted) {\n this.setState({\n commentsLoadStarted: true,\n commentsLoading: true,\n });\n this.props.commentReply?.current?.loadingStarted();\n\n this.loadComments();\n }\n }\n\n isEmpty() {\n return _.isEmpty(this.state.comments);\n }\n\n loadComments() {\n const minTime = this.isEmpty()\n ? 0\n : _.maxBy(this.state.comments, c => {\n return c.Timestamp;\n }).Timestamp;\n reactionActions.getComments(this.props.entityId, this.props.entityType, minTime).then(res => {\n this.setState(\n {\n comments: _.sortBy(\n _.uniqBy(\n _.filter(_.concat(this.state.comments, res.data), c => {\n if (!this.props.threadId) {\n return true;\n }\n return c.Id === this.props.threadId || c.ParentId === this.props.threadId;\n }),\n c => {\n return c.Id;\n },\n ),\n 'Timestamp',\n ),\n commentsLoading: false,\n },\n () => {\n if (this.props.onCommentsLoaded) {\n this.props.onCommentsLoaded(this.state.comments.length);\n }\n },\n );\n //if (this.props.commentReply) {\n this.props.commentReply?.current?.loadingCompleted();\n //}\n if (this.props.live) {\n this.loadTimer = setTimeout(() => {\n this.loadComments();\n }, this.props.refreshFrequency || 2000);\n }\n });\n }\n\n isLoading = () => {\n return this.state.commentsLoading;\n };\n\n startedAddingComment() {\n this.setState({\n addingComment: true,\n });\n }\n\n commentAdded(comment) {\n const newComments = this.state.comments;\n newComments.push(comment);\n this.setState(\n {\n addingComment: false,\n comments: newComments,\n },\n () => {\n if (this.props.onCommentAdded) {\n this.props.onCommentAdded();\n }\n },\n );\n }\n\n canRemoveComment(c) {\n if (this.props.user.uid === c.UserId) {\n return true;\n }\n return _.includes(this.props.user.permissions, this.props.adminPermission);\n }\n\n closeCommentGallery() {\n this.setState({\n imagePopupSource: [],\n imagePopupOpen: false,\n });\n }\n\n renderCommentDeleteConfirm() {\n return (\n <ConfirmPopup\n visible={!!this.state.commentToDelete}\n onConfirm={this.onPressConfirmDelete}\n onCancel={this.onPressCancelDelete}\n onClose={this.onPressCancelDelete}\n text=\"Are you sure you want to delete this comment?\"\n />\n );\n }\n\n renderCommentReportConfirm() {\n return (\n <ConfirmPopup\n visible={!!this.state.commentToReport}\n onConfirm={this.onPressConfirmReport}\n onCancel={this.onPressCancelReport}\n onClose={this.onPressCancelReport}\n text=\"Are you sure you want to report this comment?\"\n extraContent={<Text style={styles.commentReportText}>This comment will be reported to our team and considered for deletion</Text>}\n />\n );\n }\n\n renderCommentReportStatus() {\n const { commentReportedStatus } = this.state;\n const isSuccess = commentReportedStatus === 'success';\n return (\n <ConfirmPopup\n visible={!!commentReportedStatus}\n onConfirm={this.onPressConfirmReportStatus}\n text={isSuccess ? 'Thank you for reporting' : 'Unable to report'}\n extraContent={\n <Text style={styles.commentReportText}>\n {isSuccess ? 'We will review the comment within 24 hours' : 'There was a problem reporting the comment please try again later'}\n </Text>\n }\n hideNo\n yesText={'Back to Article'}\n />\n );\n }\n\n renderCommentImage(c) {\n if (_.isEmpty(c.Image)) {\n return null;\n }\n return (\n <TouchableOpacity style={styles.commentImageContainer} onPress={this.onPressCommentImage.bind(this, get1400(c.Image))}>\n <Image style={styles.commentImage} source={{ uri: getThumb300(c.Image) }} />\n </TouchableOpacity>\n );\n }\n\n renderReplyText = c => {\n if (this.props.threadId || this.props.hideReplyButton) {\n return null;\n }\n\n const threadComments = _.filter(this.state.comments, innerC => {\n return innerC.ParentId === c.Id;\n });\n\n let content = null;\n\n if (_.isEmpty(threadComments)) {\n // no replies\n content = (\n <Text style={[styles.commentRepliesText, { color: this.props.colourBrandingMain }]}>{`Reply to ${getFirstName(\n c.User ? c.User.displayName : 'comment',\n )}`}</Text>\n );\n } else {\n // existing replies\n const profilePics = _.take(\n _.uniqBy(threadComments, c => c.UserId),\n 3,\n );\n content = (\n <View style={styles.multiReplyContainer}>\n {profilePics.map((c, i) => {\n return <ProfilePic style={{ marginRight: -10 }} Diameter={20} ProfilePic={c.User.profilePic} />;\n })}\n <Text style={[styles.commentRepliesText, { marginLeft: 20, color: this.props.colourBrandingMain }]}>{`${\n threadComments.length\n } repl${getPluralOptions(threadComments.length, 'y', 'ies')}`}</Text>\n </View>\n );\n }\n\n return (\n <View style={styles.commentReplies}>\n <TouchableOpacity\n onPress={() => {\n this.onOpenThread(c);\n }}\n >\n {content}\n </TouchableOpacity>\n </View>\n );\n };\n\n renderComment(c) {\n return (\n <View style={styles.comment} key={c.Id}>\n <View style={styles.commentFlex}>\n <ProfilePic ProfilePic={c.User.profilePic} Diameter={40} style={styles.commentProfilePic} />\n <View style={styles.commentBlock}>\n <View style={styles.commentTitleRow}>\n {this.canRemoveComment(c) ? (\n <TouchableOpacity onPress={this.onPressDeleteComment.bind(this, c)}>\n <View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"trash\" type=\"font-awesome\" iconStyle={styles.commentButtonIcon} />\n </View>\n </TouchableOpacity>\n ) : (\n !this.props.disableFlag && (\n <TouchableOpacity onPress={this.onPressReportComment.bind(this, c)}>\n <View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"flag\" type=\"font-awesome\" iconStyle={styles.commentButtonIcon} />\n </View>\n </TouchableOpacity>\n )\n )}\n <Text style={[styles.commentName, { fontSize: this.getAdjustedSize(13) }]}>{c.User.displayName}</Text>\n </View>\n {!_.isEmpty(c.Comment) && <Text style={[styles.commentText, { fontSize: this.getAdjustedSize(13) }]}>{c.Comment}</Text>}\n {this.renderCommentImage(c)}\n </View>\n </View>\n <View style={styles.commentBottom}>\n <Text style={[styles.commentTime, { fontSize: this.getAdjustedSize(13) }]}>\n {moment\n .utc(c.Timestamp)\n .local()\n .format('D MMM • h:mma')}\n </Text>\n {this.renderReplyText(c)}\n </View>\n </View>\n );\n }\n\n renderMute() {\n const { notificationsForComments } = this.props;\n const { muteLoaded, muteExpiry, processing } = this.state;\n if (!notificationsForComments || !muteLoaded) return null;\n\n if (processing)\n return (\n <View style={styles.muteSpinnerContainer}>\n <Spinner size={'small'} color={this.props.colourBrandingMain} />\n </View>\n );\n\n const isMuted = this.isMuted();\n const hours = this.getMuteRemaining();\n const mutedFor = `Muted for ${hours} hour${getPluralS(hours)}`;\n // console.log(muteExpiry.format('DD MMM YYYY hh:mm a'));\n\n return (\n <View style={styles.muteContainer}>\n {isMuted && muteExpiry ? <Text style={[{ color: this.props.colourBrandingMain }, styles.mutedForText]}>{mutedFor}</Text> : null}\n <InlineButton\n onPress={isMuted ? this.onUnmute : this.onMute}\n color=\"#fff\"\n style={[{ borderColor: this.props.colourBrandingMain }, styles.muteButton]}\n disabled={processing}\n disabledOpacity\n noText\n >\n <View style={styles.muteButtonInner}>\n <Icon\n name={isMuted ? 'bell-o' : 'bell-slash-o'}\n type={'font-awesome'}\n iconStyle={[{ color: this.props.colourBrandingMain }, styles.muteButtonIcon]}\n />\n <Text style={[{ color: this.props.colourBrandingMain }, styles.muteButtonText]}>{isMuted ? 'Unmute' : 'Mute'}</Text>\n </View>\n </InlineButton>\n </View>\n );\n }\n\n renderComments() {\n if (this.state.commentsLoading) {\n return (\n <View style={styles.commentSection}>\n <Spinner color={this.props.colourBrandingMain} />\n </View>\n );\n }\n if (this.isEmpty() && !this.state.addingComment) {\n if (_.includes(this.props.user.hidden, 'addComment')) {\n return null;\n }\n if (!_.isNil(this.props.placeHolder) && _.isEmpty(this.props.placeHolder)) return null;\n return (\n <View style={styles.commentSection}>\n <Text style={[styles.commentsEmpty, { fontSize: this.getAdjustedSize(15) }]}>\n {_.isNil(this.props.placeHolder) ? 'Be the first to add a comment!' : this.props.placeHolder}\n </Text>\n </View>\n );\n }\n let source = [...this.state.comments];\n if (this.props.reverseOrder) {\n source = source.reverse();\n }\n if (!this.props.showReplies && !this.props.threadId) {\n source = _.filter(source, c => {\n return !c.ParentId;\n });\n }\n return (\n <View style={styles.commentSection}>\n {!this.isEmpty() && (\n <View style={styles.commentSectionTitleRow}>\n <View style={{ alignItems: 'flex-end' }}>\n {this.renderMute()}\n {!this.props.hideAddComment && this.state.comments.length > 2 && (\n <TouchableOpacity onPress={this.onGoToAdd.bind(this)}>\n <Text style={[styles.goToText, { color: this.props.colourBrandingMain }]}>Add a comment</Text>\n </TouchableOpacity>\n )}\n </View>\n <Text style={[styles.commentCount, { fontSize: this.getAdjustedSize(15) }]}>\n {this.state.comments.length}\n {` comment${getPluralS(this.state.comments.length)}`}\n </Text>\n </View>\n )}\n {this.props.reverseOrder && this.state.addingComment && <Spinner color={this.props.colourBrandingMain} />}\n {source.map(c => {\n return this.renderComment(c);\n })}\n {!this.props.reverseOrder && this.state.addingComment && <Spinner color={this.props.colourBrandingMain} />}\n </View>\n );\n }\n\n renderCommentImagePopup() {\n return (\n <ImagePopup\n visible={this.state.imagePopupOpen}\n images={this.state.imagePopupSource}\n onClose={this.closeCommentGallery.bind(this)}\n ref=\"commentImagePopup\"\n />\n );\n }\n\n renderReportLoading() {\n if (!this.state.reportLoading) return null;\n return (\n <View style={styles.reportLoadingContainer}>\n <Spinner color={this.props.colourBrandingMain} />\n </View>\n );\n }\n\n render() {\n if (_.includes(this.props.user.hidden, 'viewComment')) {\n return null;\n }\n return (\n <View style={[styles.commentSectionOuter, this.props.style]}>\n {this.renderComments()}\n {this.renderReportLoading()}\n {this.renderCommentDeleteConfirm()}\n {this.renderCommentReportConfirm()}\n {this.renderCommentReportStatus()}\n {this.renderCommentImagePopup()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n commentSectionOuter: {\n flex: 1,\n paddingHorizontal: 16,\n },\n commentSection: {\n flex: 1,\n paddingVertical: 12,\n borderTopColor: LINEGREY,\n borderTopWidth: 1,\n },\n commentCount: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n flex: 1,\n marginTop: 4,\n },\n comment: {\n marginTop: 16,\n },\n commentFlex: {\n flexDirection: 'row',\n },\n commentProfilePic: {\n marginRight: 8,\n },\n commentBlock: {\n flex: 1,\n backgroundColor: BG_GREY,\n borderRadius: 5,\n padding: 8,\n },\n commentTitleRow: {\n flexDirection: 'row-reverse',\n alignItems: 'center',\n },\n commentButtonContainer: {\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n },\n commentButtonIcon: {\n fontSize: 13,\n color: '#fff',\n },\n commentName: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n flex: 1,\n },\n commentText: {\n marginTop: 8,\n fontFamily: 'sf-regular',\n color: TEXT_DARKEST,\n },\n commentBottom: {\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n commentTime: {\n fontFamily: 'sf-regular',\n marginTop: 4,\n color: TEXT_LIGHT,\n textAlign: 'right',\n },\n commentReplies: {\n flex: 1,\n paddingLeft: 48,\n },\n commentRepliesText: {\n fontFamily: 'sf-semibold',\n fontSize: 15,\n },\n multiReplyContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 4,\n },\n commentImageContainer: {\n marginTop: 8,\n width: 60,\n height: 60,\n },\n commentImage: {\n width: 60,\n height: 60,\n borderRadius: 2,\n },\n commentsEmpty: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n },\n commentSectionTitleRow: {\n flexDirection: 'row-reverse',\n },\n commentReportText: {\n fontFamily: 'sf-regular',\n fontSize: 14,\n paddingHorizontal: 22,\n textAlign: 'center',\n },\n reportLoadingContainer: {\n paddingVertical: 10,\n },\n goToText: {\n marginTop: 4,\n },\n muteSpinnerContainer: {\n width: 100,\n marginBottom: 6,\n },\n muteContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginBottom: 6,\n },\n mutedForText: {\n fontFamily: 'sf-semibold',\n fontSize: 13,\n marginRight: 8,\n },\n muteButton: {\n borderWidth: 1,\n paddingHorizontal: 8,\n },\n muteButtonInner: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n muteButtonIcon: {\n fontSize: 14,\n },\n muteButtonText: {\n fontFamily: 'sf-semibold',\n fontSize: 14,\n marginLeft: 6,\n },\n});\n\nconst mapStateToProps = state => {\n return {\n colourBrandingMain: getMainBrandingColourFromState(state),\n user: state.user,\n notificationsForComments: getSiteSettingFromState(state, 'NotificationsForComments', false),\n };\n};\n\nconst commentSection = connect(mapStateToProps, {}, null, { forwardRef: true })(CommentSection);\nexport { commentSection as CommentSection };\n"]}
|
|
1
|
+
{"version":3,"sources":["CommentSection.js"],"names":["React","Component","View","Text","TouchableOpacity","Image","StyleSheet","_","moment","connect","Icon","getPluralS","getThumb300","get1400","getSiteSettingFromState","getFirstName","getPluralOptions","getMainBrandingColourFromState","TEXT_DARKEST","BG_GREY","TEXT_LIGHT","LINEGREY","reactionActions","notificationActions","blockUser","unblockUser","ConfirmPopup","ProfilePic","ImagePopup","InlineButton","Spinner","Services","CommentSection","constructor","props","c","setState","commentToDelete","removeComment","state","Id","then","res","console","log","newComments","filter","comments","commentToReport","commentToBlock","userId","UserId","commentToUnblock","commentId","reportLoading","reportComment","commentReportedStatus","catch","error","comment","navigation","navigate","threadId","entityType","entityId","processing","data","muteEntity","muteExpiry","Expiry","unmuteEntity","actual","duration","diff","asHours","Math","abs","ceil","notificationsForComments","getEntityNotificationSetting","muteLoaded","commentsLoading","includes","blockedUsers","user","uid","isUserBlocked","hideReplyButton","threadComments","innerC","ParentId","content","isEmpty","styles","commentRepliesText","color","colourBrandingMain","User","displayName","profilePics","take","uniqBy","multiReplyContainer","map","i","marginRight","profilePic","marginLeft","length","commentReplies","onOpenThread","addingComment","componentDidMount","getNotificationSate","hidden","getComments","componentWillUnmount","loadTimer","clearTimeout","onPressCommentImage","image","imagePopupSource","imagePopupOpen","onGoToAdd","commentReply","focusInput","getAdjustedSize","size","scaleFont","fontScale","commentsLoadStarted","current","loadingStarted","loadComments","minTime","maxBy","Timestamp","sortBy","concat","onCommentsLoaded","loadingCompleted","live","setTimeout","refreshFrequency","startedAddingComment","commentAdded","push","onCommentAdded","canRemoveComment","permissions","adminPermission","closeCommentGallery","renderCommentDeleteConfirm","onPressConfirmDelete","onPressCancelDelete","renderCommentReportConfirm","onPressConfirmReport","onPressCancelReport","commentReportText","renderCommentBlockConfirm","onPressConfirmBlock","onPressCancelBlock","renderCommentUnblockConfirm","onPressConfirmUnblock","onPressCancelUnblock","renderCommentReportStatus","isSuccess","onPressConfirmReportStatus","renderCommentImage","commentImageContainer","bind","commentImage","uri","renderComment","commentFlex","commentProfilePic","commentBlock","commentTitleRow","onPressDeleteComment","commentButtonContainer","backgroundColor","commentButtonIcon","disableFlag","onPressReportComment","canBlockComment","onPressUnblockUser","onPressBlockUser","commentName","fontSize","Comment","commentText","commentBottom","commentTime","utc","local","format","renderReplyText","renderMute","muteSpinnerContainer","isMuted","hours","getMuteRemaining","mutedFor","muteContainer","mutedForText","onUnmute","onMute","borderColor","muteButton","muteButtonInner","muteButtonIcon","muteButtonText","renderComments","commentSection","isNil","placeHolder","commentsEmpty","source","reverseOrder","reverse","showReplies","commentSectionTitleRow","alignItems","hideAddComment","goToText","commentCount","renderCommentImagePopup","renderReportLoading","reportLoadingContainer","render","commentSectionOuter","style","create","flex","paddingHorizontal","paddingVertical","borderTopColor","borderTopWidth","fontFamily","marginTop","flexDirection","borderRadius","padding","width","height","justifyContent","textAlign","paddingLeft","marginBottom","borderWidth","mapStateToProps","userSettings","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image, StyleSheet } from 'react-native';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { connect } from 'react-redux';\nimport { Icon } from 'react-native-elements';\nimport { getPluralS, getThumb300, get1400, getSiteSettingFromState, getFirstName, getPluralOptions } from '../helper';\nimport { getMainBrandingColourFromState, TEXT_DARKEST, BG_GREY, TEXT_LIGHT, LINEGREY } from '../colours';\nimport { reactionActions, notificationActions } from '../apis';\nimport { blockUser, unblockUser } from '../actions';\nimport { ConfirmPopup } from './ConfirmPopup';\nimport { ProfilePic } from './ProfilePic';\nimport { ImagePopup } from './ImagePopup';\nimport { InlineButton } from './InlineButton';\nimport { Spinner } from './Spinner';\nimport { Services } from '../config';\n\nclass CommentSection extends Component {\n constructor(props) {\n super(props);\n this.state = {\n commentsLoading: false,\n comments: [],\n addingComment: false,\n commentToDelete: null,\n commentToReport: null,\n commentReportedStatus: null,\n reportLoading: false,\n processing: false,\n muteExpiry: null,\n muteLoaded: false,\n };\n }\n\n componentDidMount() {\n this.getNotificationSate();\n\n if (!_.includes(this.props.user.hidden, 'viewComment')) {\n this.getComments();\n }\n }\n\n componentWillUnmount() {\n if (this.loadTimer) {\n clearTimeout(this.loadTimer);\n }\n }\n\n onPressDeleteComment = c => {\n this.setState({ commentToDelete: c });\n };\n\n onPressConfirmDelete = () => {\n reactionActions.removeComment(this.state.commentToDelete.Id).then(res => {\n console.log('deleted');\n });\n const newComments = _.filter(this.state.comments, c => {\n return c.Id !== this.state.commentToDelete.Id;\n });\n this.setState({\n comments: newComments,\n commentToDelete: null,\n });\n };\n\n onPressCancelDelete = () => {\n this.setState({ commentToDelete: null });\n };\n\n onPressReportComment = c => {\n this.setState({ commentToReport: c });\n };\n\n onPressBlockUser = c => {\n this.setState({ commentToBlock: c });\n };\n\n onPressConfirmBlock = () => {\n const userId = this.state.commentToBlock.UserId;\n this.props.blockUser(userId);\n this.setState({ commentToBlock: null });\n };\n\n onPressCancelBlock = () => {\n this.setState({ commentToBlock: null });\n };\n\n onPressUnblockUser = c => {\n this.setState({ commentToUnblock: c });\n };\n\n onPressConfirmUnblock = () => {\n const userId = this.state.commentToUnblock.UserId;\n this.props.unblockUser(userId);\n this.setState({ commentToUnblock: null });\n };\n\n onPressCancelUnblock = () => {\n this.setState({ commentToUnblock: null });\n };\n\n onPressConfirmReport = () => {\n const commentId = this.state.commentToReport.Id;\n this.setState({ reportLoading: true, commentToReport: null }, () => {\n reactionActions\n .reportComment(commentId)\n .then(res => {\n this.setState({ commentReportedStatus: 'success', reportLoading: false });\n })\n .catch(error => {\n console.log('reportComment', error);\n this.setState({ commentReportedStatus: 'fail', reportLoading: false });\n });\n });\n };\n\n onPressCancelReport = () => {\n this.setState({ commentToReport: null });\n };\n\n onPressConfirmReportStatus = () => {\n this.setState({ commentReportedStatus: null });\n };\n\n onPressCommentImage(image) {\n this.setState({\n imagePopupSource: [image],\n imagePopupOpen: true,\n });\n }\n\n onGoToAdd() {\n this.props.commentReply.focusInput();\n }\n\n onOpenThread = comment => {\n Services.navigation.navigate('thread', { ...this.props, threadId: comment.Id });\n };\n\n onMute = () => {\n const { entityType, entityId } = this.props;\n this.setState({ processing: true }, async () => {\n try {\n const { data } = await notificationActions.muteEntity(entityType, entityId);\n // console.log('onMute', data);\n const muteExpiry = moment(data.Expiry);\n this.setState({ muteExpiry, processing: false });\n } catch (error) {\n console.error('onMute', error);\n this.setState({ processing: false });\n }\n });\n };\n\n onUnmute = () => {\n const { entityType, entityId } = this.props;\n this.setState({ processing: true }, async () => {\n try {\n const { data } = await notificationActions.unmuteEntity(entityType, entityId);\n // console.log('onUnmute', data);\n this.setState({ muteExpiry: null, processing: false });\n } catch (error) {\n console.error('onUnmute', error);\n this.setState({ processing: false });\n }\n });\n };\n\n isMuted = () => {\n const { muteExpiry } = this.state;\n return muteExpiry && moment() <= muteExpiry;\n };\n\n getMuteRemaining = () => {\n const { muteExpiry } = this.state;\n const actual = muteExpiry ? moment.duration(muteExpiry.diff(moment())).asHours() : 0;\n return Math.abs(Math.ceil(actual));\n };\n\n getNotificationSate = () => {\n const { processing } = this.state;\n const { entityType, entityId, notificationsForComments } = this.props;\n if (processing || !notificationsForComments) return;\n\n this.setState({ processing: true }, async () => {\n try {\n const { data } = await notificationActions.getEntityNotificationSetting(entityType, entityId);\n // console.log('getNotificationSate', data);\n const muteExpiry = data ? moment(data.Expiry) : null;\n this.setState({ muteExpiry, muteLoaded: true, processing: false });\n } catch (error) {\n console.error('getNotificationSate', error);\n this.setState({ processing: false });\n }\n });\n };\n\n getAdjustedSize(size) {\n if (this.props.scaleFont) {\n return size + this.props.user.fontScale;\n }\n return size;\n }\n\n getComments() {\n if (!this.state.commentsLoadStarted) {\n this.setState({\n commentsLoadStarted: true,\n commentsLoading: true,\n });\n this.props.commentReply?.current?.loadingStarted();\n\n this.loadComments();\n }\n }\n\n isEmpty() {\n return _.isEmpty(this.state.comments);\n }\n\n loadComments() {\n const minTime = this.isEmpty()\n ? 0\n : _.maxBy(this.state.comments, c => {\n return c.Timestamp;\n }).Timestamp;\n reactionActions.getComments(this.props.entityId, this.props.entityType, minTime).then(res => {\n this.setState(\n {\n comments: _.sortBy(\n _.uniqBy(\n _.filter(_.concat(this.state.comments, res.data), c => {\n if (!this.props.threadId) {\n return true;\n }\n return c.Id === this.props.threadId || c.ParentId === this.props.threadId;\n }),\n c => {\n return c.Id;\n },\n ),\n 'Timestamp',\n ),\n commentsLoading: false,\n },\n () => {\n if (this.props.onCommentsLoaded) {\n this.props.onCommentsLoaded(this.state.comments.length);\n }\n },\n );\n //if (this.props.commentReply) {\n this.props.commentReply?.current?.loadingCompleted();\n //}\n if (this.props.live) {\n this.loadTimer = setTimeout(() => {\n this.loadComments();\n }, this.props.refreshFrequency || 2000);\n }\n });\n }\n\n isLoading = () => {\n return this.state.commentsLoading;\n };\n\n startedAddingComment() {\n this.setState({\n addingComment: true,\n });\n }\n\n commentAdded(comment) {\n const newComments = this.state.comments;\n newComments.push(comment);\n this.setState(\n {\n addingComment: false,\n comments: newComments,\n },\n () => {\n if (this.props.onCommentAdded) {\n this.props.onCommentAdded();\n }\n },\n );\n }\n\n isUserBlocked = c => {\n return _.includes(this.props.blockedUsers, c.UserId);\n };\n\n canBlockComment = c => {\n return this.props.user.uid !== c.UserId;\n };\n\n canRemoveComment(c) {\n if (this.props.user.uid === c.UserId) {\n return true;\n }\n return _.includes(this.props.user.permissions, this.props.adminPermission);\n }\n\n closeCommentGallery() {\n this.setState({\n imagePopupSource: [],\n imagePopupOpen: false,\n });\n }\n\n renderCommentDeleteConfirm() {\n return (\n <ConfirmPopup\n visible={!!this.state.commentToDelete}\n onConfirm={this.onPressConfirmDelete}\n onCancel={this.onPressCancelDelete}\n onClose={this.onPressCancelDelete}\n text=\"Are you sure you want to delete this comment?\"\n />\n );\n }\n\n renderCommentReportConfirm() {\n return (\n <ConfirmPopup\n visible={!!this.state.commentToReport}\n onConfirm={this.onPressConfirmReport}\n onCancel={this.onPressCancelReport}\n onClose={this.onPressCancelReport}\n text=\"Are you sure you want to report this comment?\"\n extraContent={<Text style={styles.commentReportText}>This comment will be reported to our team and considered for deletion</Text>}\n />\n );\n }\n\n renderCommentBlockConfirm() {\n return (\n <ConfirmPopup\n visible={!!this.state.commentToBlock}\n onConfirm={this.onPressConfirmBlock}\n onCancel={this.onPressCancelBlock}\n onClose={this.onPressCancelBlock}\n text=\"Are you sure you want to block this user?\"\n extraContent={<Text style={styles.commentReportText}>You will no longer see comments made by this user</Text>}\n />\n );\n }\n\n renderCommentUnblockConfirm() {\n return (\n <ConfirmPopup\n visible={!!this.state.commentToUnblock}\n onConfirm={this.onPressConfirmUnblock}\n onCancel={this.onPressCancelUnblock}\n onClose={this.onPressCancelUnblock}\n text=\"Are you sure you want to unblock this user?\"\n extraContent={<Text style={styles.commentReportText}>You will once again see comments made by this user</Text>}\n />\n );\n }\n\n renderCommentReportStatus() {\n const { commentReportedStatus } = this.state;\n const isSuccess = commentReportedStatus === 'success';\n return (\n <ConfirmPopup\n visible={!!commentReportedStatus}\n onConfirm={this.onPressConfirmReportStatus}\n text={isSuccess ? 'Thank you for reporting' : 'Unable to report'}\n extraContent={\n <Text style={styles.commentReportText}>\n {isSuccess ? 'We will review the comment within 24 hours' : 'There was a problem reporting the comment please try again later'}\n </Text>\n }\n hideNo\n yesText={'Done'}\n />\n );\n }\n\n renderCommentImage(c) {\n if (_.isEmpty(c.Image)) {\n return null;\n }\n return (\n <TouchableOpacity style={styles.commentImageContainer} onPress={this.onPressCommentImage.bind(this, get1400(c.Image))}>\n <Image style={styles.commentImage} source={{ uri: getThumb300(c.Image) }} />\n </TouchableOpacity>\n );\n }\n\n renderReplyText = (c, isUserBlocked) => {\n if (this.props.threadId || this.props.hideReplyButton) {\n return null;\n }\n\n const threadComments = _.filter(this.state.comments, innerC => {\n return innerC.ParentId === c.Id;\n });\n\n let content = null;\n\n if (_.isEmpty(threadComments)) {\n // no replies\n content = (\n <Text style={[styles.commentRepliesText, { color: this.props.colourBrandingMain }]}>{`Reply to ${getFirstName(\n !isUserBlocked && c.User ? c.User.displayName : 'comment',\n )}`}</Text>\n );\n } else {\n // existing replies\n const profilePics = _.take(\n _.uniqBy(threadComments, c => c.UserId),\n 3,\n );\n content = (\n <View style={styles.multiReplyContainer}>\n {profilePics.map((c, i) => {\n return <ProfilePic style={{ marginRight: -10 }} Diameter={20} ProfilePic={c.User.profilePic} />;\n })}\n <Text style={[styles.commentRepliesText, { marginLeft: 20, color: this.props.colourBrandingMain }]}>{`${\n threadComments.length\n } repl${getPluralOptions(threadComments.length, 'y', 'ies')}`}</Text>\n </View>\n );\n }\n\n return (\n <View style={styles.commentReplies}>\n <TouchableOpacity\n onPress={() => {\n this.onOpenThread(c);\n }}\n >\n {content}\n </TouchableOpacity>\n </View>\n );\n };\n\n renderComment(c) {\n const isUserBlocked = this.isUserBlocked(c);\n return (\n <View style={styles.comment} key={c.Id}>\n <View style={styles.commentFlex}>\n <ProfilePic ProfilePic={isUserBlocked ? null : c.User.profilePic} Diameter={40} style={styles.commentProfilePic} />\n <View style={styles.commentBlock}>\n <View style={styles.commentTitleRow}>\n {this.canRemoveComment(c) ? (\n <TouchableOpacity onPress={this.onPressDeleteComment.bind(this, c)}>\n <View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"trash\" type=\"font-awesome\" iconStyle={styles.commentButtonIcon} />\n </View>\n </TouchableOpacity>\n ) : (\n !this.props.disableFlag && (\n <TouchableOpacity onPress={this.onPressReportComment.bind(this, c)}>\n <View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"flag\" type=\"font-awesome\" iconStyle={styles.commentButtonIcon} />\n </View>\n </TouchableOpacity>\n )\n )}\n {!this.props.disableFlag &&\n this.canBlockComment(c) &&\n (isUserBlocked ? (\n <TouchableOpacity style={{ marginRight: 8 }} onPress={this.onPressUnblockUser.bind(this, c)}>\n <View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"user-plus\" type=\"font-awesome\" iconStyle={styles.commentButtonIcon} />\n </View>\n </TouchableOpacity>\n ) : (\n <TouchableOpacity style={{ marginRight: 8 }} onPress={this.onPressBlockUser.bind(this, c)}>\n <View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"user-times\" type=\"font-awesome\" iconStyle={styles.commentButtonIcon} />\n </View>\n </TouchableOpacity>\n ))}\n <Text style={[styles.commentName, { fontSize: this.getAdjustedSize(13) }]}>\n {isUserBlocked ? '[blocked user]' : c.User.displayName}\n </Text>\n </View>\n {!_.isEmpty(c.Comment) && (\n <Text style={[styles.commentText, { fontSize: this.getAdjustedSize(13) }]}>{isUserBlocked ? '[hidden]' : c.Comment}</Text>\n )}\n {!isUserBlocked && this.renderCommentImage(c)}\n </View>\n </View>\n <View style={styles.commentBottom}>\n <Text style={[styles.commentTime, { fontSize: this.getAdjustedSize(13) }]}>\n {moment\n .utc(c.Timestamp)\n .local()\n .format('D MMM • h:mma')}\n </Text>\n {this.renderReplyText(c, isUserBlocked)}\n </View>\n </View>\n );\n }\n\n renderMute() {\n const { notificationsForComments } = this.props;\n const { muteLoaded, muteExpiry, processing } = this.state;\n if (!notificationsForComments || !muteLoaded) return null;\n\n if (processing)\n return (\n <View style={styles.muteSpinnerContainer}>\n <Spinner size={'small'} color={this.props.colourBrandingMain} />\n </View>\n );\n\n const isMuted = this.isMuted();\n const hours = this.getMuteRemaining();\n const mutedFor = `Muted for ${hours} hour${getPluralS(hours)}`;\n // console.log(muteExpiry.format('DD MMM YYYY hh:mm a'));\n\n return (\n <View style={styles.muteContainer}>\n {isMuted && muteExpiry ? <Text style={[{ color: this.props.colourBrandingMain }, styles.mutedForText]}>{mutedFor}</Text> : null}\n <InlineButton\n onPress={isMuted ? this.onUnmute : this.onMute}\n color=\"#fff\"\n style={[{ borderColor: this.props.colourBrandingMain }, styles.muteButton]}\n disabled={processing}\n disabledOpacity\n noText\n >\n <View style={styles.muteButtonInner}>\n <Icon\n name={isMuted ? 'bell-o' : 'bell-slash-o'}\n type={'font-awesome'}\n iconStyle={[{ color: this.props.colourBrandingMain }, styles.muteButtonIcon]}\n />\n <Text style={[{ color: this.props.colourBrandingMain }, styles.muteButtonText]}>{isMuted ? 'Unmute' : 'Mute'}</Text>\n </View>\n </InlineButton>\n </View>\n );\n }\n\n renderComments() {\n if (this.state.commentsLoading) {\n return (\n <View style={styles.commentSection}>\n <Spinner color={this.props.colourBrandingMain} />\n </View>\n );\n }\n if (this.isEmpty() && !this.state.addingComment) {\n if (_.includes(this.props.user.hidden, 'addComment')) {\n return null;\n }\n if (!_.isNil(this.props.placeHolder) && _.isEmpty(this.props.placeHolder)) return null;\n return (\n <View style={styles.commentSection}>\n <Text style={[styles.commentsEmpty, { fontSize: this.getAdjustedSize(15) }]}>\n {_.isNil(this.props.placeHolder) ? 'Be the first to add a comment!' : this.props.placeHolder}\n </Text>\n </View>\n );\n }\n let source = [...this.state.comments];\n if (this.props.reverseOrder) {\n source = source.reverse();\n }\n if (!this.props.showReplies && !this.props.threadId) {\n source = _.filter(source, c => {\n return !c.ParentId;\n });\n }\n return (\n <View style={styles.commentSection}>\n {!this.isEmpty() && (\n <View style={styles.commentSectionTitleRow}>\n <View style={{ alignItems: 'flex-end' }}>\n {this.renderMute()}\n {!this.props.hideAddComment && this.state.comments.length > 2 && (\n <TouchableOpacity onPress={this.onGoToAdd.bind(this)}>\n <Text style={[styles.goToText, { color: this.props.colourBrandingMain }]}>Add a comment</Text>\n </TouchableOpacity>\n )}\n </View>\n <Text style={[styles.commentCount, { fontSize: this.getAdjustedSize(15) }]}>\n {this.state.comments.length}\n {` comment${getPluralS(this.state.comments.length)}`}\n </Text>\n </View>\n )}\n {this.props.reverseOrder && this.state.addingComment && <Spinner color={this.props.colourBrandingMain} />}\n {source.map(c => {\n return this.renderComment(c);\n })}\n {!this.props.reverseOrder && this.state.addingComment && <Spinner color={this.props.colourBrandingMain} />}\n </View>\n );\n }\n\n renderCommentImagePopup() {\n return (\n <ImagePopup\n visible={this.state.imagePopupOpen}\n images={this.state.imagePopupSource}\n onClose={this.closeCommentGallery.bind(this)}\n ref=\"commentImagePopup\"\n />\n );\n }\n\n renderReportLoading() {\n if (!this.state.reportLoading) return null;\n return (\n <View style={styles.reportLoadingContainer}>\n <Spinner color={this.props.colourBrandingMain} />\n </View>\n );\n }\n\n render() {\n if (_.includes(this.props.user.hidden, 'viewComment')) {\n return null;\n }\n return (\n <View style={[styles.commentSectionOuter, this.props.style]}>\n {this.renderComments()}\n {this.renderReportLoading()}\n {this.renderCommentDeleteConfirm()}\n {this.renderCommentReportConfirm()}\n {this.renderCommentBlockConfirm()}\n {this.renderCommentUnblockConfirm()}\n {this.renderCommentReportStatus()}\n {this.renderCommentImagePopup()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n commentSectionOuter: {\n flex: 1,\n paddingHorizontal: 16,\n },\n commentSection: {\n flex: 1,\n paddingVertical: 12,\n borderTopColor: LINEGREY,\n borderTopWidth: 1,\n },\n commentCount: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n flex: 1,\n marginTop: 4,\n },\n comment: {\n marginTop: 16,\n },\n commentFlex: {\n flexDirection: 'row',\n },\n commentProfilePic: {\n marginRight: 8,\n },\n commentBlock: {\n flex: 1,\n backgroundColor: BG_GREY,\n borderRadius: 5,\n padding: 8,\n },\n commentTitleRow: {\n flexDirection: 'row-reverse',\n alignItems: 'center',\n },\n commentButtonContainer: {\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n },\n commentButtonIcon: {\n fontSize: 13,\n color: '#fff',\n },\n commentName: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n flex: 1,\n },\n commentText: {\n marginTop: 8,\n fontFamily: 'sf-regular',\n color: TEXT_DARKEST,\n },\n commentBottom: {\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n commentTime: {\n fontFamily: 'sf-regular',\n marginTop: 4,\n color: TEXT_LIGHT,\n textAlign: 'right',\n },\n commentReplies: {\n flex: 1,\n paddingLeft: 48,\n },\n commentRepliesText: {\n fontFamily: 'sf-semibold',\n fontSize: 15,\n },\n multiReplyContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 4,\n },\n commentImageContainer: {\n marginTop: 8,\n width: 60,\n height: 60,\n },\n commentImage: {\n width: 60,\n height: 60,\n borderRadius: 2,\n },\n commentsEmpty: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n },\n commentSectionTitleRow: {\n flexDirection: 'row-reverse',\n },\n commentReportText: {\n fontFamily: 'sf-regular',\n fontSize: 14,\n paddingHorizontal: 22,\n textAlign: 'center',\n },\n reportLoadingContainer: {\n paddingVertical: 10,\n },\n goToText: {\n marginTop: 4,\n },\n muteSpinnerContainer: {\n width: 100,\n marginBottom: 6,\n },\n muteContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginBottom: 6,\n },\n mutedForText: {\n fontFamily: 'sf-semibold',\n fontSize: 13,\n marginRight: 8,\n },\n muteButton: {\n borderWidth: 1,\n paddingHorizontal: 8,\n },\n muteButtonInner: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n muteButtonIcon: {\n fontSize: 14,\n },\n muteButtonText: {\n fontFamily: 'sf-semibold',\n fontSize: 14,\n marginLeft: 6,\n },\n});\n\nconst mapStateToProps = state => {\n return {\n colourBrandingMain: getMainBrandingColourFromState(state),\n user: state.user,\n notificationsForComments: getSiteSettingFromState(state, 'NotificationsForComments', false),\n blockedUsers: state.userSettings.blockedUsers || [],\n };\n};\n\nconst commentSection = connect(mapStateToProps, { blockUser, unblockUser }, null, { forwardRef: true })(CommentSection);\nexport { commentSection as CommentSection };\n"]}
|
|
@@ -48,7 +48,7 @@ export { default as ImageUploadProgress } from './ImageUploadProgress';
|
|
|
48
48
|
export { default as UserListing } from './UserListing';
|
|
49
49
|
export { default as PlussChat } from './PlussChat';
|
|
50
50
|
export { default as PositionedImage } from './PositionedImage';
|
|
51
|
-
export
|
|
51
|
+
export * from './AutoOffsetImage';
|
|
52
52
|
export { default as FormattedText } from './FormattedText';
|
|
53
53
|
export { default as MediaPlayer } from './MediaPlayer';
|
|
54
54
|
export { default as AudienceSelectorPage } from './AudienceSelectorPage';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.js"],"names":["default","EmptyStateWidget","EmptyStateMain","LoadingStateWidget","Header","LoadingIndicator","ImageUploader","ImageUploadProgress","UserListing","PlussChat","PositionedImage","
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":["default","EmptyStateWidget","EmptyStateMain","LoadingStateWidget","Header","LoadingIndicator","ImageUploader","ImageUploadProgress","UserListing","PlussChat","PositionedImage","FormattedText","MediaPlayer","AudienceSelectorPage"],"mappings":"AAAA,cAAc,gBAAd;AACA,cAAc,uBAAd;AACA,cAAc,YAAd;AACA,cAAc,mBAAd;AACA,cAAc,iCAAd;AACA,cAAc,cAAd;AACA,cAAc,WAAd;AACA,cAAc,kBAAd;AACA,cAAc,SAAd;AACA,cAAc,cAAd;AACA,cAAc,cAAd;AACA,cAAc,gBAAd;AACA,cAAc,eAAd;AACA,cAAc,gBAAd;AACA,cAAc,qBAAd;AACA,cAAc,kBAAd;AACA,cAAc,gBAAd;AACA,cAAc,aAAd;AACA,cAAc,aAAd;AACA,cAAc,cAAd;AACA,cAAc,uBAAd;AACA,cAAc,gBAAd;AACA,cAAc,eAAd;AACA,cAAc,YAAd;AACA,cAAc,aAAd;AACA,cAAc,UAAd;AACA,cAAc,SAAd;AACA,cAAc,gBAAd;AACA,cAAc,gBAAd;AACA,cAAc,gBAAd;AACA,cAAc,gBAAd;AACA,cAAc,cAAd;AACA,cAAc,YAAd;AACA,cAAc,sBAAd;AACA,cAAc,gBAAd;AACA,cAAc,kBAAd;AACA,cAAc,mBAAd;AACA,cAAc,iBAAd;AACA,cAAc,aAAd;AACA,cAAc,4BAAd;AACA,SAASA,OAAO,IAAIC,gBAApB,QAA4C,oBAA5C;AACA,SAASD,OAAO,IAAIE,cAApB,QAA0C,kBAA1C;AACA,SAASF,OAAO,IAAIG,kBAApB,QAA8C,sBAA9C;AACA,SAASH,OAAO,IAAII,MAApB,QAAkC,UAAlC;AACA,SAASJ,OAAO,IAAIK,gBAApB,QAA4C,oBAA5C;AACA,SAASL,OAAO,IAAIM,aAApB,QAAyC,iBAAzC;AACA,SAASN,OAAO,IAAIO,mBAApB,QAA+C,uBAA/C;AACA,SAASP,OAAO,IAAIQ,WAApB,QAAuC,eAAvC;AACA,SAASR,OAAO,IAAIS,SAApB,QAAqC,aAArC;AACA,SAAST,OAAO,IAAIU,eAApB,QAA2C,mBAA3C;AACA,cAAc,mBAAd;AACA,SAASV,OAAO,IAAIW,aAApB,QAAyC,iBAAzC;AACA,SAASX,OAAO,IAAIY,WAApB,QAAuC,eAAvC;AACA,SAASZ,OAAO,IAAIa,oBAApB,QAAgD,wBAAhD","sourcesContent":["export * from './InlineButton';\nexport * from './AddToCalendarButton';\nexport * from './FormCard';\nexport * from './FormCardSection';\nexport * from './FormCardSectionOptionLauncher';\nexport * from './ProfilePic';\nexport * from './Spinner';\nexport * from './LoadingCircles';\nexport * from './Popup';\nexport * from './ImagePopup';\nexport * from './VideoPopup';\nexport * from './SharingTools';\nexport * from './MiddlePopup';\nexport * from './ConfirmPopup';\nexport * from './ConfirmationPopup';\nexport * from './CommentSection';\nexport * from './CommentReply';\nexport * from './PopupMenu';\nexport * from './AddButton';\nexport * from './Attachment';\nexport * from './GenericInputSection';\nexport * from './GenericInput';\nexport * from './RadioButton';\nexport * from './PDFPopup';\nexport * from './TextStyle';\nexport * from './Toggle';\nexport * from './Input';\nexport * from './StickyFooter';\nexport * from './CategoryTabs';\nexport * from './DropDownMenu';\nexport * from './DropDownItem';\nexport * from './BackButton';\nexport * from './Reaction';\nexport * from './TouchableSearchBar';\nexport * from './WarningPopup';\nexport * from './FontScalePopup';\nexport * from './FontScaleButton';\nexport * from './UserListPopup';\nexport * from './Reactions';\nexport * from './AudienceSelectorLauncher';\nexport { default as EmptyStateWidget } from './EmptyStateWidget';\nexport { default as EmptyStateMain } from './EmptyStateMain';\nexport { default as LoadingStateWidget } from './LoadingStateWidget';\nexport { default as Header } from './Header';\nexport { default as LoadingIndicator } from './LoadingIndicator';\nexport { default as ImageUploader } from './ImageUploader';\nexport { default as ImageUploadProgress } from './ImageUploadProgress';\nexport { default as UserListing } from './UserListing';\nexport { default as PlussChat } from './PlussChat';\nexport { default as PositionedImage } from './PositionedImage';\nexport * from './AutoOffsetImage';\nexport { default as FormattedText } from './FormattedText';\nexport { default as MediaPlayer } from './MediaPlayer';\nexport { default as AudienceSelectorPage } from './AudienceSelectorPage';\n"]}
|
|
@@ -7,6 +7,10 @@ import getScaledOffset from './getScaledOffset';
|
|
|
7
7
|
const findLandmarkRange = async (url, options) => {
|
|
8
8
|
let cachedValues;
|
|
9
9
|
|
|
10
|
+
if (options && options.cachedValues) {
|
|
11
|
+
cachedValues = options.cachedValues;
|
|
12
|
+
}
|
|
13
|
+
|
|
10
14
|
try {
|
|
11
15
|
const response = await stringActions.getString('plussSpace', `imagefaces_${encodeURIComponent(url)}`);
|
|
12
16
|
cachedValues = response.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["findLandmarkRange.js"],"names":["_","moment","stringActions","detectFaces","getScaledOffset","findLandmarkRange","url","options","cachedValues","response","getString","encodeURIComponent","data","e","console","log","faces","image","isEmpty","add","valueOf","timestamp","landmarkStartX","landmarkStartY","landmarkEndX","landmarkEndY","width","height","forEach","face","bounds","origin","x","y","faceEndX","size","faceEndY","targetWidth","targetHeight","scaleFactor","start","end"],"mappings":"AAAA,OAAOA,CAAP,MAAc,QAAd;AACA,OAAOC,MAAP,MAAmB,QAAnB;AACA,SAASC,aAAT,QAA8B,YAA9B;AACA,OAAOC,WAAP,MAAwB,eAAxB;AACA,OAAOC,eAAP,MAA4B,mBAA5B;;AAEA,MAAMC,iBAAiB,GAAG,OAAOC,GAAP,EAAYC,OAAZ,KAAwB;AAChD,MAAIC,YAAJ;;AACA,MAAI;AACF,UAAMC,QAAQ,GAAG,MAAMP,aAAa,CAACQ,SAAd,CAAwB,YAAxB,EAAuC,cAAaC,kBAAkB,CAACL,GAAD,CAAM,EAA5E,CAAvB;AACAE,IAAAA,YAAY,GAAGC,QAAQ,CAACG,IAAxB;AACD,GAHD,CAGE,OAAOC,CAAP,EAAU;AACVC,IAAAA,OAAO,CAACC,GAAR,CAAY,oBAAZ;AACD;;AACD,MACE,CAACP,YAAD,IACA,CAACA,YAAY,CAACQ,KADd,IAEA,CAACR,YAAY,CAACS,KAFd,IAGCjB,CAAC,CAACkB,OAAF,CAAUV,YAAY,CAACQ,KAAvB,KACCf,MAAM,GACHkB,GADH,CACO,CAAC,CADR,EACW,GADX,EAEGC,OAFH,KAEenB,MAAM,CAACO,YAAY,CAACa,SAAd,CAAN,CAA+BD,OAA/B,EAPnB,EAQE;AACAZ,IAAAA,YAAY,GAAG,MAAML,WAAW,CAACG,GAAD,CAAhC;AACD;;AACD,QAAM;AAAEU,IAAAA,KAAF;AAASC,IAAAA;AAAT,MAAmBT,YAAzB;AAEA,MAAIc,cAAc,GAAG,IAArB;AACA,MAAIC,cAAc,GAAG,IAArB;AACA,MAAIC,YAAY,GAAG,IAAnB;AACA,MAAIC,YAAY,GAAG,IAAnB;;AAEA,MAAIzB,CAAC,CAACkB,OAAF,CAAUF,KAAV,CAAJ,EAAsB;AACpBM,IAAAA,cAAc,GAAGL,KAAK,CAACS,KAAN,GAAc,CAA/B;AACAH,IAAAA,cAAc,GAAGN,KAAK,CAACU,MAAN,GAAe,CAAhC;AACAH,IAAAA,YAAY,GAAGP,KAAK,CAACS,KAAN,GAAc,CAA7B;AACAD,IAAAA,YAAY,GAAGR,KAAK,CAACU,MAAN,GAAe,CAA9B;AACD,GALD,MAKO;AACLX,IAAAA,KAAK,CAACY,OAAN,CAAcC,IAAI,IAAI;AACpB,YAAM;AAAEC,QAAAA;AAAF,UAAaD,IAAnB;;AAEA,UAAI,CAACP,cAAD,IAAmBQ,MAAM,CAACC,MAAP,CAAcC,CAAd,GAAkBV,cAAzC,EAAyD;AACvDA,QAAAA,cAAc,GAAGQ,MAAM,CAACC,MAAP,CAAcC,CAA/B;AACD;;AAED,UAAI,CAACT,cAAD,IAAmBO,MAAM,CAACC,MAAP,CAAcE,CAAd,GAAkBV,cAAzC,EAAyD;AACvDA,QAAAA,cAAc,GAAGO,MAAM,CAACC,MAAP,CAAcE,CAA/B;AACD;;AAED,YAAMC,QAAQ,GAAGJ,MAAM,CAACC,MAAP,CAAcC,CAAd,GAAkBF,MAAM,CAACK,IAAP,CAAYT,KAA/C;;AACA,UAAI,CAACF,YAAD,IAAiBU,QAAQ,GAAGV,YAAhC,EAA8C;AAC5CA,QAAAA,YAAY,GAAGU,QAAf;AACD;;AAED,YAAME,QAAQ,GAAGN,MAAM,CAACC,MAAP,CAAcE,CAAd,GAAkBH,MAAM,CAACK,IAAP,CAAYR,MAA/C;;AACA,UAAI,CAACF,YAAD,IAAiBS,QAAQ,GAAGT,YAAhC,EAA8C;AAC5CA,QAAAA,YAAY,GAAGW,QAAf;AACD;AACF,KApBD;AAqBD;;AAED,MAAIC,WAAW,GAAGpB,KAAK,CAACS,KAAxB;AACA,MAAIY,YAAY,GAAGrB,KAAK,CAACU,MAAzB;;AAEA,MAAIpB,OAAO,IAAIA,OAAO,CAAC8B,WAAnB,IAAkC9B,OAAO,CAAC+B,YAA9C,EAA4D;AAC1D,UAAM;AAAEC,MAAAA;AAAF,QAAkBnC,eAAe,CAACa,KAAK,CAACS,KAAP,EAAcT,KAAK,CAACU,MAApB,EAA4BpB,OAAO,CAAC8B,WAApC,EAAiD9B,OAAO,CAAC+B,YAAzD,CAAvC;AACAhB,IAAAA,cAAc,IAAIiB,WAAlB;AACAhB,IAAAA,cAAc,IAAIgB,WAAlB;AACAf,IAAAA,YAAY,IAAIe,WAAhB;AACAd,IAAAA,YAAY,IAAIc,WAAhB;AACAF,IAAAA,WAAW,GAAG9B,OAAO,CAAC8B,WAAtB;AACAC,IAAAA,YAAY,GAAG/B,OAAO,CAAC+B,YAAvB;AACD;;AAED,MAAIhB,cAAc,GAAG,CAArB,EAAwB;AACtBA,IAAAA,cAAc,GAAG,CAAjB;AACD;;AACD,MAAIC,cAAc,GAAG,CAArB,EAAwB;AACtBA,IAAAA,cAAc,GAAG,CAAjB;AACD;;AACD,MAAIC,YAAY,GAAGa,WAAnB,EAAgC;AAC9Bb,IAAAA,YAAY,GAAGa,WAAf;AACD;;AACD,MAAIZ,YAAY,GAAGa,YAAnB,EAAiC;AAC/Bb,IAAAA,YAAY,GAAGa,YAAf;AACD;;AAED,SAAO;AACLE,IAAAA,KAAK,EAAE;AACLR,MAAAA,CAAC,EAAEV,cADE;AAELW,MAAAA,CAAC,EAAEV;AAFE,KADF;AAKLkB,IAAAA,GAAG,EAAE;AACHT,MAAAA,CAAC,EAAER,YADA;AAEHS,MAAAA,CAAC,EAAER;AAFA,KALA;AASLE,IAAAA,MAAM,EAAEV,KAAK,CAACU,MATT;AAULD,IAAAA,KAAK,EAAET,KAAK,CAACS;AAVR,GAAP;AAYD,
|
|
1
|
+
{"version":3,"sources":["findLandmarkRange.js"],"names":["_","moment","stringActions","detectFaces","getScaledOffset","findLandmarkRange","url","options","cachedValues","response","getString","encodeURIComponent","data","e","console","log","faces","image","isEmpty","add","valueOf","timestamp","landmarkStartX","landmarkStartY","landmarkEndX","landmarkEndY","width","height","forEach","face","bounds","origin","x","y","faceEndX","size","faceEndY","targetWidth","targetHeight","scaleFactor","start","end"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport moment from 'moment';\nimport { stringActions } from '../../apis';\nimport detectFaces from './detectFaces';\nimport getScaledOffset from './getScaledOffset';\n\nconst findLandmarkRange = async (url, options) => {\n let cachedValues;\n if (options && options.cachedValues) {\n cachedValues = options.cachedValues;\n }\n try {\n const response = await stringActions.getString('plussSpace', `imagefaces_${encodeURIComponent(url)}`);\n cachedValues = response.data;\n } catch (e) {\n console.log('errored from cache');\n }\n if (\n !cachedValues ||\n !cachedValues.faces ||\n !cachedValues.image ||\n (_.isEmpty(cachedValues.faces) &&\n moment()\n .add(-1, 'w')\n .valueOf() > moment(cachedValues.timestamp).valueOf())\n ) {\n cachedValues = await detectFaces(url);\n }\n const { faces, image } = cachedValues;\n\n let landmarkStartX = null;\n let landmarkStartY = null;\n let landmarkEndX = null;\n let landmarkEndY = null;\n\n if (_.isEmpty(faces)) {\n landmarkStartX = image.width / 2;\n landmarkStartY = image.height / 2;\n landmarkEndX = image.width / 2;\n landmarkEndY = image.height / 2;\n } else {\n faces.forEach(face => {\n const { bounds } = face;\n\n if (!landmarkStartX || bounds.origin.x < landmarkStartX) {\n landmarkStartX = bounds.origin.x;\n }\n\n if (!landmarkStartY || bounds.origin.y < landmarkStartY) {\n landmarkStartY = bounds.origin.y;\n }\n\n const faceEndX = bounds.origin.x + bounds.size.width;\n if (!landmarkEndX || faceEndX > landmarkEndX) {\n landmarkEndX = faceEndX;\n }\n\n const faceEndY = bounds.origin.y + bounds.size.height;\n if (!landmarkEndY || faceEndX > landmarkEndY) {\n landmarkEndY = faceEndY;\n }\n });\n }\n\n let targetWidth = image.width;\n let targetHeight = image.height;\n\n if (options && options.targetWidth && options.targetHeight) {\n const { scaleFactor } = getScaledOffset(image.width, image.height, options.targetWidth, options.targetHeight);\n landmarkStartX *= scaleFactor;\n landmarkStartY *= scaleFactor;\n landmarkEndX *= scaleFactor;\n landmarkEndY *= scaleFactor;\n targetWidth = options.targetWidth;\n targetHeight = options.targetHeight;\n }\n\n if (landmarkStartX < 0) {\n landmarkStartX = 0;\n }\n if (landmarkStartY < 0) {\n landmarkStartY = 0;\n }\n if (landmarkEndX > targetWidth) {\n landmarkEndX = targetWidth;\n }\n if (landmarkEndY > targetHeight) {\n landmarkEndY = targetHeight;\n }\n\n return {\n start: {\n x: landmarkStartX,\n y: landmarkStartY,\n },\n end: {\n x: landmarkEndX,\n y: landmarkEndY,\n },\n height: image.height,\n width: image.width,\n };\n};\n\nexport default findLandmarkRange;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-core-app",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.5-beta.0",
|
|
4
4
|
"description": "Core extension package for Pluss Communities platform",
|
|
5
5
|
"main": "dist/module/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -21,36 +21,36 @@
|
|
|
21
21
|
"author": "Phillip Suh",
|
|
22
22
|
"license": "ISC",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@expo/vector-icons": "^
|
|
25
|
-
"@react-native-async-storage/async-storage": "~1.
|
|
26
|
-
"@react-native-community/netinfo": "
|
|
27
|
-
"@react-native-picker/picker": "2.
|
|
24
|
+
"@expo/vector-icons": "^13.0.0",
|
|
25
|
+
"@react-native-async-storage/async-storage": "~1.17.3",
|
|
26
|
+
"@react-native-community/netinfo": "8.2.0",
|
|
27
|
+
"@react-native-picker/picker": "2.4.0",
|
|
28
28
|
"aws-amplify": "^4.3.11",
|
|
29
29
|
"aws-amplify-react-native": "^6.0.2",
|
|
30
|
-
"expo-av": "~
|
|
31
|
-
"expo-calendar": "~10.
|
|
32
|
-
"expo-constants": "~13.
|
|
33
|
-
"expo-face-detector": "~11.
|
|
34
|
-
"expo-file-system": "~
|
|
35
|
-
"expo-image-manipulator": "~10.
|
|
36
|
-
"expo-image-picker": "~
|
|
37
|
-
"expo-linear-gradient": "~11.0
|
|
30
|
+
"expo-av": "~11.2.3",
|
|
31
|
+
"expo-calendar": "~10.2.0",
|
|
32
|
+
"expo-constants": "~13.1.1",
|
|
33
|
+
"expo-face-detector": "~11.2.0",
|
|
34
|
+
"expo-file-system": "~14.0.0",
|
|
35
|
+
"expo-image-manipulator": "~10.3.1",
|
|
36
|
+
"expo-image-picker": "~13.1.1",
|
|
37
|
+
"expo-linear-gradient": "~11.3.0",
|
|
38
38
|
"expo-media-library": "~14.0.0",
|
|
39
|
-
"expo-screen-orientation": "~4.
|
|
40
|
-
"expo-sharing": "~10.
|
|
39
|
+
"expo-screen-orientation": "~4.2.0",
|
|
40
|
+
"expo-sharing": "~10.2.0",
|
|
41
41
|
"expo-video-player": "^1.6.0",
|
|
42
42
|
"js-cookie": "^2.2.1",
|
|
43
43
|
"lodash": "^4.17.4",
|
|
44
44
|
"mime-types": "^2.1.24",
|
|
45
45
|
"moment": "^2.18.1",
|
|
46
|
-
"react": "17.0.
|
|
47
|
-
"react-native": "0.
|
|
46
|
+
"react": "17.0.2",
|
|
47
|
+
"react-native": "0.68.2",
|
|
48
48
|
"react-native-auto-height-image": "3.1.3",
|
|
49
49
|
"react-native-elements": "^0.17.0",
|
|
50
50
|
"react-native-image-zoom-viewer": "^3.0.1",
|
|
51
51
|
"react-native-iphone-x-helper": "^1.3.1",
|
|
52
52
|
"react-native-vimeo-iframe": "^1.0.4",
|
|
53
|
-
"react-native-webview": "11.
|
|
53
|
+
"react-native-webview": "11.18.1",
|
|
54
54
|
"react-native-youtube-iframe": "^2.2.1",
|
|
55
55
|
"react-redux": "^7.2.6"
|
|
56
56
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IMAGE_LIBRARY_LOADED, STOCK_IMAGES_LOADED, IMAGE_FOLDER_UPDATED } from './types';
|
|
1
|
+
import { IMAGE_LIBRARY_LOADED, STOCK_IMAGES_LOADED, IMAGE_FOLDER_UPDATED, SAVE_IMAGE_POSITION } from './types';
|
|
2
2
|
|
|
3
3
|
export const stockImagesLoaded = images => {
|
|
4
4
|
return {
|
|
@@ -20,3 +20,10 @@ export const imageFolderUpdated = folder => {
|
|
|
20
20
|
payload: folder,
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
|
+
|
|
24
|
+
export const saveImagePosition = (uri, positions) => {
|
|
25
|
+
return {
|
|
26
|
+
type: SAVE_IMAGE_POSITION,
|
|
27
|
+
payload: { uri, positions },
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BLOCK_USER, UNBLOCK_USER } from './types';
|
|
2
|
+
|
|
3
|
+
export const blockUser = userId => {
|
|
4
|
+
return {
|
|
5
|
+
type: BLOCK_USER,
|
|
6
|
+
payload: userId,
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const unblockUser = userId => {
|
|
11
|
+
return {
|
|
12
|
+
type: UNBLOCK_USER,
|
|
13
|
+
payload: userId,
|
|
14
|
+
};
|
|
15
|
+
};
|
package/src/actions/index.js
CHANGED
package/src/actions/types.js
CHANGED
|
@@ -3,6 +3,7 @@ export const CHANGE_ROLE = 'CHANGE_ROLE';
|
|
|
3
3
|
export const IMAGE_LIBRARY_LOADED = 'IMAGE_LIBRARY_LOADED';
|
|
4
4
|
export const STOCK_IMAGES_LOADED = 'STOCK_IMAGES_LOADED';
|
|
5
5
|
export const IMAGE_FOLDER_UPDATED = 'IMAGE_FOLDER_UPDATED';
|
|
6
|
+
export const SAVE_IMAGE_POSITION = 'SAVE_IMAGE_POSITION';
|
|
6
7
|
export const LOAD_FOLLOWERS = 'LOAD_FOLLOWERS';
|
|
7
8
|
export const ADD_FOLLOWER = 'ADD_FOLLOWER';
|
|
8
9
|
export const REMOVE_FOLLOWER = 'REMOVE_FOLLOWER';
|
|
@@ -11,3 +12,5 @@ export const LOADED_RESIDENTS = 'LOADED_RESIDENTS';
|
|
|
11
12
|
export const LOADED_LINKED_USERS = 'LOADED_LINKED_USERS';
|
|
12
13
|
export const LOADED_LINKED_TO_USERS = 'LOADED_LINKED_TO_USERS';
|
|
13
14
|
export const UPDATE_USER_STATE = 'UPDATE_USER_STATE';
|
|
15
|
+
export const BLOCK_USER = 'BLOCK_USER';
|
|
16
|
+
export const UNBLOCK_USER = 'UNBLOCK_USER';
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
2
|
import { View, Animated, StyleSheet } from 'react-native';
|
|
3
|
+
import { connect } from 'react-redux';
|
|
3
4
|
import moment from 'moment';
|
|
4
|
-
import { findLandmarkRange, getScaledOffset, get300 } from '../helper';
|
|
5
|
+
import { findLandmarkRange, getScaledOffset, get300, detectFaces } from '../helper';
|
|
6
|
+
import { saveImagePosition } from '../actions';
|
|
5
7
|
|
|
6
8
|
class AutoOffsetImage extends Component {
|
|
7
9
|
constructor(props) {
|
|
@@ -49,7 +51,40 @@ class AutoOffsetImage extends Component {
|
|
|
49
51
|
positionImage = async () => {
|
|
50
52
|
try {
|
|
51
53
|
const startTime = moment().valueOf();
|
|
52
|
-
|
|
54
|
+
|
|
55
|
+
let cachedValues;
|
|
56
|
+
// check local cache
|
|
57
|
+
if (this.props.imagePositions && this.props.imagePositions[this.props.uri]) {
|
|
58
|
+
cachedValues = this.props.imagePositions[this.props.uri];
|
|
59
|
+
}
|
|
60
|
+
// check remote cache
|
|
61
|
+
if (!cachedValues) {
|
|
62
|
+
try {
|
|
63
|
+
const response = await stringActions.getString('plussSpace', `imagefaces_${encodeURIComponent(this.props.uri)}`);
|
|
64
|
+
cachedValues = response.data;
|
|
65
|
+
} catch (e) {
|
|
66
|
+
console.log('errored from cache');
|
|
67
|
+
}
|
|
68
|
+
// run face detection locally
|
|
69
|
+
if (
|
|
70
|
+
!cachedValues ||
|
|
71
|
+
!cachedValues.faces ||
|
|
72
|
+
!cachedValues.image ||
|
|
73
|
+
(_.isEmpty(cachedValues.faces) &&
|
|
74
|
+
moment()
|
|
75
|
+
.add(-1, 'w')
|
|
76
|
+
.valueOf() > moment(cachedValues.timestamp).valueOf())
|
|
77
|
+
) {
|
|
78
|
+
cachedValues = await detectFaces(this.props.uri);
|
|
79
|
+
}
|
|
80
|
+
this.props.saveImagePosition(this.props.uri, cachedValues);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const image = await findLandmarkRange(this.props.uri, {
|
|
84
|
+
targetWidth: this.props.width,
|
|
85
|
+
targetHeight: this.props.height,
|
|
86
|
+
cachedValues,
|
|
87
|
+
});
|
|
53
88
|
const scaledOffset = getScaledOffset(image.width, image.height, this.props.width, this.props.height);
|
|
54
89
|
|
|
55
90
|
const { start: landmarkStart, end: landmarkEnd } = image;
|
|
@@ -82,7 +117,7 @@ class AutoOffsetImage extends Component {
|
|
|
82
117
|
});
|
|
83
118
|
|
|
84
119
|
const endTime = moment().valueOf();
|
|
85
|
-
if (endTime - startTime <
|
|
120
|
+
if (endTime - startTime < 500) {
|
|
86
121
|
Animated.timing(this.state.blurRadius, {
|
|
87
122
|
toValue: 0,
|
|
88
123
|
duration: 0,
|
|
@@ -132,4 +167,11 @@ const styles = StyleSheet.create({
|
|
|
132
167
|
},
|
|
133
168
|
});
|
|
134
169
|
|
|
135
|
-
|
|
170
|
+
const mapStateToProps = state => {
|
|
171
|
+
return {
|
|
172
|
+
imagePositions: state.media.positions,
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const autoOffsetImage = connect(mapStateToProps, { saveImagePosition })(AutoOffsetImage);
|
|
177
|
+
export { autoOffsetImage as AutoOffsetImage };
|
|
@@ -7,6 +7,7 @@ import { Icon } from 'react-native-elements';
|
|
|
7
7
|
import { getPluralS, getThumb300, get1400, getSiteSettingFromState, getFirstName, getPluralOptions } from '../helper';
|
|
8
8
|
import { getMainBrandingColourFromState, TEXT_DARKEST, BG_GREY, TEXT_LIGHT, LINEGREY } from '../colours';
|
|
9
9
|
import { reactionActions, notificationActions } from '../apis';
|
|
10
|
+
import { blockUser, unblockUser } from '../actions';
|
|
10
11
|
import { ConfirmPopup } from './ConfirmPopup';
|
|
11
12
|
import { ProfilePic } from './ProfilePic';
|
|
12
13
|
import { ImagePopup } from './ImagePopup';
|
|
@@ -70,6 +71,34 @@ class CommentSection extends Component {
|
|
|
70
71
|
this.setState({ commentToReport: c });
|
|
71
72
|
};
|
|
72
73
|
|
|
74
|
+
onPressBlockUser = c => {
|
|
75
|
+
this.setState({ commentToBlock: c });
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
onPressConfirmBlock = () => {
|
|
79
|
+
const userId = this.state.commentToBlock.UserId;
|
|
80
|
+
this.props.blockUser(userId);
|
|
81
|
+
this.setState({ commentToBlock: null });
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
onPressCancelBlock = () => {
|
|
85
|
+
this.setState({ commentToBlock: null });
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
onPressUnblockUser = c => {
|
|
89
|
+
this.setState({ commentToUnblock: c });
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
onPressConfirmUnblock = () => {
|
|
93
|
+
const userId = this.state.commentToUnblock.UserId;
|
|
94
|
+
this.props.unblockUser(userId);
|
|
95
|
+
this.setState({ commentToUnblock: null });
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
onPressCancelUnblock = () => {
|
|
99
|
+
this.setState({ commentToUnblock: null });
|
|
100
|
+
};
|
|
101
|
+
|
|
73
102
|
onPressConfirmReport = () => {
|
|
74
103
|
const commentId = this.state.commentToReport.Id;
|
|
75
104
|
this.setState({ reportLoading: true, commentToReport: null }, () => {
|
|
@@ -257,6 +286,14 @@ class CommentSection extends Component {
|
|
|
257
286
|
);
|
|
258
287
|
}
|
|
259
288
|
|
|
289
|
+
isUserBlocked = c => {
|
|
290
|
+
return _.includes(this.props.blockedUsers, c.UserId);
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
canBlockComment = c => {
|
|
294
|
+
return this.props.user.uid !== c.UserId;
|
|
295
|
+
};
|
|
296
|
+
|
|
260
297
|
canRemoveComment(c) {
|
|
261
298
|
if (this.props.user.uid === c.UserId) {
|
|
262
299
|
return true;
|
|
@@ -296,6 +333,32 @@ class CommentSection extends Component {
|
|
|
296
333
|
);
|
|
297
334
|
}
|
|
298
335
|
|
|
336
|
+
renderCommentBlockConfirm() {
|
|
337
|
+
return (
|
|
338
|
+
<ConfirmPopup
|
|
339
|
+
visible={!!this.state.commentToBlock}
|
|
340
|
+
onConfirm={this.onPressConfirmBlock}
|
|
341
|
+
onCancel={this.onPressCancelBlock}
|
|
342
|
+
onClose={this.onPressCancelBlock}
|
|
343
|
+
text="Are you sure you want to block this user?"
|
|
344
|
+
extraContent={<Text style={styles.commentReportText}>You will no longer see comments made by this user</Text>}
|
|
345
|
+
/>
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
renderCommentUnblockConfirm() {
|
|
350
|
+
return (
|
|
351
|
+
<ConfirmPopup
|
|
352
|
+
visible={!!this.state.commentToUnblock}
|
|
353
|
+
onConfirm={this.onPressConfirmUnblock}
|
|
354
|
+
onCancel={this.onPressCancelUnblock}
|
|
355
|
+
onClose={this.onPressCancelUnblock}
|
|
356
|
+
text="Are you sure you want to unblock this user?"
|
|
357
|
+
extraContent={<Text style={styles.commentReportText}>You will once again see comments made by this user</Text>}
|
|
358
|
+
/>
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
|
|
299
362
|
renderCommentReportStatus() {
|
|
300
363
|
const { commentReportedStatus } = this.state;
|
|
301
364
|
const isSuccess = commentReportedStatus === 'success';
|
|
@@ -310,7 +373,7 @@ class CommentSection extends Component {
|
|
|
310
373
|
</Text>
|
|
311
374
|
}
|
|
312
375
|
hideNo
|
|
313
|
-
yesText={'
|
|
376
|
+
yesText={'Done'}
|
|
314
377
|
/>
|
|
315
378
|
);
|
|
316
379
|
}
|
|
@@ -326,7 +389,7 @@ class CommentSection extends Component {
|
|
|
326
389
|
);
|
|
327
390
|
}
|
|
328
391
|
|
|
329
|
-
renderReplyText = c => {
|
|
392
|
+
renderReplyText = (c, isUserBlocked) => {
|
|
330
393
|
if (this.props.threadId || this.props.hideReplyButton) {
|
|
331
394
|
return null;
|
|
332
395
|
}
|
|
@@ -341,7 +404,7 @@ class CommentSection extends Component {
|
|
|
341
404
|
// no replies
|
|
342
405
|
content = (
|
|
343
406
|
<Text style={[styles.commentRepliesText, { color: this.props.colourBrandingMain }]}>{`Reply to ${getFirstName(
|
|
344
|
-
c.User ? c.User.displayName : 'comment',
|
|
407
|
+
!isUserBlocked && c.User ? c.User.displayName : 'comment',
|
|
345
408
|
)}`}</Text>
|
|
346
409
|
);
|
|
347
410
|
} else {
|
|
@@ -376,10 +439,11 @@ class CommentSection extends Component {
|
|
|
376
439
|
};
|
|
377
440
|
|
|
378
441
|
renderComment(c) {
|
|
442
|
+
const isUserBlocked = this.isUserBlocked(c);
|
|
379
443
|
return (
|
|
380
444
|
<View style={styles.comment} key={c.Id}>
|
|
381
445
|
<View style={styles.commentFlex}>
|
|
382
|
-
<ProfilePic ProfilePic={c.User.profilePic} Diameter={40} style={styles.commentProfilePic} />
|
|
446
|
+
<ProfilePic ProfilePic={isUserBlocked ? null : c.User.profilePic} Diameter={40} style={styles.commentProfilePic} />
|
|
383
447
|
<View style={styles.commentBlock}>
|
|
384
448
|
<View style={styles.commentTitleRow}>
|
|
385
449
|
{this.canRemoveComment(c) ? (
|
|
@@ -397,10 +461,29 @@ class CommentSection extends Component {
|
|
|
397
461
|
</TouchableOpacity>
|
|
398
462
|
)
|
|
399
463
|
)}
|
|
400
|
-
|
|
464
|
+
{!this.props.disableFlag &&
|
|
465
|
+
this.canBlockComment(c) &&
|
|
466
|
+
(isUserBlocked ? (
|
|
467
|
+
<TouchableOpacity style={{ marginRight: 8 }} onPress={this.onPressUnblockUser.bind(this, c)}>
|
|
468
|
+
<View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>
|
|
469
|
+
<Icon name="user-plus" type="font-awesome" iconStyle={styles.commentButtonIcon} />
|
|
470
|
+
</View>
|
|
471
|
+
</TouchableOpacity>
|
|
472
|
+
) : (
|
|
473
|
+
<TouchableOpacity style={{ marginRight: 8 }} onPress={this.onPressBlockUser.bind(this, c)}>
|
|
474
|
+
<View style={[styles.commentButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>
|
|
475
|
+
<Icon name="user-times" type="font-awesome" iconStyle={styles.commentButtonIcon} />
|
|
476
|
+
</View>
|
|
477
|
+
</TouchableOpacity>
|
|
478
|
+
))}
|
|
479
|
+
<Text style={[styles.commentName, { fontSize: this.getAdjustedSize(13) }]}>
|
|
480
|
+
{isUserBlocked ? '[blocked user]' : c.User.displayName}
|
|
481
|
+
</Text>
|
|
401
482
|
</View>
|
|
402
|
-
{!_.isEmpty(c.Comment) &&
|
|
403
|
-
|
|
483
|
+
{!_.isEmpty(c.Comment) && (
|
|
484
|
+
<Text style={[styles.commentText, { fontSize: this.getAdjustedSize(13) }]}>{isUserBlocked ? '[hidden]' : c.Comment}</Text>
|
|
485
|
+
)}
|
|
486
|
+
{!isUserBlocked && this.renderCommentImage(c)}
|
|
404
487
|
</View>
|
|
405
488
|
</View>
|
|
406
489
|
<View style={styles.commentBottom}>
|
|
@@ -410,7 +493,7 @@ class CommentSection extends Component {
|
|
|
410
493
|
.local()
|
|
411
494
|
.format('D MMM • h:mma')}
|
|
412
495
|
</Text>
|
|
413
|
-
{this.renderReplyText(c)}
|
|
496
|
+
{this.renderReplyText(c, isUserBlocked)}
|
|
414
497
|
</View>
|
|
415
498
|
</View>
|
|
416
499
|
);
|
|
@@ -544,6 +627,8 @@ class CommentSection extends Component {
|
|
|
544
627
|
{this.renderReportLoading()}
|
|
545
628
|
{this.renderCommentDeleteConfirm()}
|
|
546
629
|
{this.renderCommentReportConfirm()}
|
|
630
|
+
{this.renderCommentBlockConfirm()}
|
|
631
|
+
{this.renderCommentUnblockConfirm()}
|
|
547
632
|
{this.renderCommentReportStatus()}
|
|
548
633
|
{this.renderCommentImagePopup()}
|
|
549
634
|
</View>
|
|
@@ -699,8 +784,9 @@ const mapStateToProps = state => {
|
|
|
699
784
|
colourBrandingMain: getMainBrandingColourFromState(state),
|
|
700
785
|
user: state.user,
|
|
701
786
|
notificationsForComments: getSiteSettingFromState(state, 'NotificationsForComments', false),
|
|
787
|
+
blockedUsers: state.userSettings.blockedUsers || [],
|
|
702
788
|
};
|
|
703
789
|
};
|
|
704
790
|
|
|
705
|
-
const commentSection = connect(mapStateToProps, {}, null, { forwardRef: true })(CommentSection);
|
|
791
|
+
const commentSection = connect(mapStateToProps, { blockUser, unblockUser }, null, { forwardRef: true })(CommentSection);
|
|
706
792
|
export { commentSection as CommentSection };
|
package/src/components/index.js
CHANGED
|
@@ -48,7 +48,7 @@ export { default as ImageUploadProgress } from './ImageUploadProgress';
|
|
|
48
48
|
export { default as UserListing } from './UserListing';
|
|
49
49
|
export { default as PlussChat } from './PlussChat';
|
|
50
50
|
export { default as PositionedImage } from './PositionedImage';
|
|
51
|
-
export
|
|
51
|
+
export * from './AutoOffsetImage';
|
|
52
52
|
export { default as FormattedText } from './FormattedText';
|
|
53
53
|
export { default as MediaPlayer } from './MediaPlayer';
|
|
54
54
|
export { default as AudienceSelectorPage } from './AudienceSelectorPage';
|
|
@@ -6,6 +6,9 @@ import getScaledOffset from './getScaledOffset';
|
|
|
6
6
|
|
|
7
7
|
const findLandmarkRange = async (url, options) => {
|
|
8
8
|
let cachedValues;
|
|
9
|
+
if (options && options.cachedValues) {
|
|
10
|
+
cachedValues = options.cachedValues;
|
|
11
|
+
}
|
|
9
12
|
try {
|
|
10
13
|
const response = await stringActions.getString('plussSpace', `imagefaces_${encodeURIComponent(url)}`);
|
|
11
14
|
cachedValues = response.data;
|