@plusscommunities/pluss-core-app 8.0.27-beta.0 → 8.0.28
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/package.json +1 -1
- package/src/components/react-native-expo-image-cropper/ExpoImageManipulator.js +21 -22
- package/dist/module/actions/FollowerActions.js +0 -34
- package/dist/module/actions/FollowerActions.js.map +0 -1
- package/dist/module/actions/MediaActions.js +0 -29
- package/dist/module/actions/MediaActions.js.map +0 -1
- package/dist/module/actions/ResidentActions.js +0 -26
- package/dist/module/actions/ResidentActions.js.map +0 -1
- package/dist/module/actions/UserActions.js +0 -223
- package/dist/module/actions/UserActions.js.map +0 -1
- package/dist/module/actions/UserSettingsActions.js +0 -14
- package/dist/module/actions/UserSettingsActions.js.map +0 -1
- package/dist/module/actions/index.js +0 -6
- package/dist/module/actions/index.js.map +0 -1
- package/dist/module/actions/types.js +0 -17
- package/dist/module/actions/types.js.map +0 -1
- package/dist/module/apis/analyticsActions.js +0 -20
- package/dist/module/apis/analyticsActions.js.map +0 -1
- package/dist/module/apis/contactActions.js +0 -27
- package/dist/module/apis/contactActions.js.map +0 -1
- package/dist/module/apis/eventActions.js +0 -161
- package/dist/module/apis/eventActions.js.map +0 -1
- package/dist/module/apis/fileActions.js +0 -93
- package/dist/module/apis/fileActions.js.map +0 -1
- package/dist/module/apis/followerActions.js +0 -38
- package/dist/module/apis/followerActions.js.map +0 -1
- package/dist/module/apis/index.js +0 -13
- package/dist/module/apis/index.js.map +0 -1
- package/dist/module/apis/notificationActions.js +0 -60
- package/dist/module/apis/notificationActions.js.map +0 -1
- package/dist/module/apis/profileActions.js +0 -14
- package/dist/module/apis/profileActions.js.map +0 -1
- package/dist/module/apis/reactionActions.js +0 -76
- package/dist/module/apis/reactionActions.js.map +0 -1
- package/dist/module/apis/settingActions.js +0 -22
- package/dist/module/apis/settingActions.js.map +0 -1
- package/dist/module/apis/stringActions.js +0 -30
- package/dist/module/apis/stringActions.js.map +0 -1
- package/dist/module/apis/typeActions.js +0 -15
- package/dist/module/apis/typeActions.js.map +0 -1
- package/dist/module/apis/userActions.js +0 -104
- package/dist/module/apis/userActions.js.map +0 -1
- package/dist/module/assets/icons/fontawesome/fa-brands-400.ttf +0 -0
- package/dist/module/assets/icons/fontawesome/fa-light-300.ttf +0 -0
- package/dist/module/assets/icons/fontawesome/fa-regular-400.ttf +0 -0
- package/dist/module/assets/icons/fontawesome/fa-solid-900.ttf +0 -0
- package/dist/module/assets/icons/fontawesome/fa-thin-100.ttf +0 -0
- package/dist/module/assets/icons/fontawesome/fa7-glyphmap.json +0 -4205
- package/dist/module/assets/icons/reactions/heart.png +0 -0
- package/dist/module/assets/icons/reactions/party.png +0 -0
- package/dist/module/assets/icons/reactions/sad.png +0 -0
- package/dist/module/assets/icons/reactions/smile.png +0 -0
- package/dist/module/colours.js +0 -165
- package/dist/module/colours.js.map +0 -1
- package/dist/module/components/AddButton.js +0 -43
- package/dist/module/components/AddButton.js.map +0 -1
- package/dist/module/components/AddToCalendarButton.js +0 -225
- package/dist/module/components/AddToCalendarButton.js.map +0 -1
- package/dist/module/components/Attachment.js +0 -55
- package/dist/module/components/Attachment.js.map +0 -1
- package/dist/module/components/AudienceSelectorLauncher.js +0 -64
- package/dist/module/components/AudienceSelectorLauncher.js.map +0 -1
- package/dist/module/components/AudienceSelectorPage.js +0 -351
- package/dist/module/components/AudienceSelectorPage.js.map +0 -1
- package/dist/module/components/AutoOffsetImage.js +0 -184
- package/dist/module/components/AutoOffsetImage.js.map +0 -1
- package/dist/module/components/BackButton.js +0 -58
- package/dist/module/components/BackButton.js.map +0 -1
- package/dist/module/components/CalendarPopup.js +0 -126
- package/dist/module/components/CalendarPopup.js.map +0 -1
- package/dist/module/components/CategoryTabs.js +0 -155
- package/dist/module/components/CategoryTabs.js.map +0 -1
- package/dist/module/components/CommentReply.js +0 -334
- package/dist/module/components/CommentReply.js.map +0 -1
- package/dist/module/components/CommentSection.js +0 -823
- package/dist/module/components/CommentSection.js.map +0 -1
- package/dist/module/components/ConfirmPopup.js +0 -109
- package/dist/module/components/ConfirmPopup.js.map +0 -1
- package/dist/module/components/ConfirmationPopup.js +0 -72
- package/dist/module/components/ConfirmationPopup.js.map +0 -1
- package/dist/module/components/DocumentUploader.js +0 -253
- package/dist/module/components/DocumentUploader.js.map +0 -1
- package/dist/module/components/DropDownItem.js +0 -75
- package/dist/module/components/DropDownItem.js.map +0 -1
- package/dist/module/components/DropDownMenu.js +0 -41
- package/dist/module/components/DropDownMenu.js.map +0 -1
- package/dist/module/components/EmptyStateMain.js +0 -51
- package/dist/module/components/EmptyStateMain.js.map +0 -1
- package/dist/module/components/EmptyStateWidget.js +0 -48
- package/dist/module/components/EmptyStateWidget.js.map +0 -1
- package/dist/module/components/FontScaleButton.js +0 -37
- package/dist/module/components/FontScaleButton.js.map +0 -1
- package/dist/module/components/FontScalePopup.js +0 -76
- package/dist/module/components/FontScalePopup.js.map +0 -1
- package/dist/module/components/Forbidden.js +0 -58
- package/dist/module/components/Forbidden.js.map +0 -1
- package/dist/module/components/FormCard.js +0 -25
- package/dist/module/components/FormCard.js.map +0 -1
- package/dist/module/components/FormCardSection.js +0 -214
- package/dist/module/components/FormCardSection.js.map +0 -1
- package/dist/module/components/FormCardSectionOptionLauncher.js +0 -73
- package/dist/module/components/FormCardSectionOptionLauncher.js.map +0 -1
- package/dist/module/components/FormattedText.js +0 -133
- package/dist/module/components/FormattedText.js.map +0 -1
- package/dist/module/components/GenericInput.js +0 -151
- package/dist/module/components/GenericInput.js.map +0 -1
- package/dist/module/components/GenericInputSection.js +0 -173
- package/dist/module/components/GenericInputSection.js.map +0 -1
- package/dist/module/components/Header.js +0 -459
- package/dist/module/components/Header.js.map +0 -1
- package/dist/module/components/Icon.js +0 -109
- package/dist/module/components/Icon.js.map +0 -1
- package/dist/module/components/ImagePopup.js +0 -400
- package/dist/module/components/ImagePopup.js.map +0 -1
- package/dist/module/components/ImageUploadProgress.js +0 -69
- package/dist/module/components/ImageUploadProgress.js.map +0 -1
- package/dist/module/components/ImageUploader.js +0 -831
- package/dist/module/components/ImageUploader.js.map +0 -1
- package/dist/module/components/InlineButton.js +0 -66
- package/dist/module/components/InlineButton.js.map +0 -1
- package/dist/module/components/Input.js +0 -156
- package/dist/module/components/Input.js.map +0 -1
- package/dist/module/components/LoadingCircles.js +0 -219
- package/dist/module/components/LoadingCircles.js.map +0 -1
- package/dist/module/components/LoadingIndicator.js +0 -86
- package/dist/module/components/LoadingIndicator.js.map +0 -1
- package/dist/module/components/LoadingStateWidget.js +0 -46
- package/dist/module/components/LoadingStateWidget.js.map +0 -1
- package/dist/module/components/MediaPlayer.js +0 -407
- package/dist/module/components/MediaPlayer.js.map +0 -1
- package/dist/module/components/MiddlePopup.js +0 -49
- package/dist/module/components/MiddlePopup.js.map +0 -1
- package/dist/module/components/PDFPopup.js +0 -203
- package/dist/module/components/PDFPopup.js.map +0 -1
- package/dist/module/components/PlussChat.js +0 -1078
- package/dist/module/components/PlussChat.js.map +0 -1
- package/dist/module/components/PlussChatMessage.js +0 -299
- package/dist/module/components/PlussChatMessage.js.map +0 -1
- package/dist/module/components/PlussChatTime.js +0 -59
- package/dist/module/components/PlussChatTime.js.map +0 -1
- package/dist/module/components/Popup.js +0 -126
- package/dist/module/components/Popup.js.map +0 -1
- package/dist/module/components/PopupMenu.js +0 -120
- package/dist/module/components/PopupMenu.js.map +0 -1
- package/dist/module/components/PositionedImage.js +0 -313
- package/dist/module/components/PositionedImage.js.map +0 -1
- package/dist/module/components/ProfilePic.js +0 -105
- package/dist/module/components/ProfilePic.js.map +0 -1
- package/dist/module/components/RadioButton.js +0 -78
- package/dist/module/components/RadioButton.js.map +0 -1
- package/dist/module/components/Reaction.js +0 -117
- package/dist/module/components/Reaction.js.map +0 -1
- package/dist/module/components/Reactions.js +0 -71
- package/dist/module/components/Reactions.js.map +0 -1
- package/dist/module/components/SharingTools.js +0 -189
- package/dist/module/components/SharingTools.js.map +0 -1
- package/dist/module/components/Spinner.js +0 -22
- package/dist/module/components/Spinner.js.map +0 -1
- package/dist/module/components/StickyFooter.js +0 -34
- package/dist/module/components/StickyFooter.js.map +0 -1
- package/dist/module/components/Text.js +0 -57
- package/dist/module/components/Text.js.map +0 -1
- package/dist/module/components/TickIcon.js +0 -24
- package/dist/module/components/TickIcon.js.map +0 -1
- package/dist/module/components/Toggle.js +0 -66
- package/dist/module/components/Toggle.js.map +0 -1
- package/dist/module/components/TouchableSearchBar.js +0 -68
- package/dist/module/components/TouchableSearchBar.js.map +0 -1
- package/dist/module/components/UserListPopup.js +0 -136
- package/dist/module/components/UserListPopup.js.map +0 -1
- package/dist/module/components/UserListing.js +0 -268
- package/dist/module/components/UserListing.js.map +0 -1
- package/dist/module/components/VideoPopup.js +0 -113
- package/dist/module/components/VideoPopup.js.map +0 -1
- package/dist/module/components/WarningPopup.js +0 -85
- package/dist/module/components/WarningPopup.js.map +0 -1
- package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js +0 -289
- package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js.map +0 -1
- package/dist/module/components/expo-image-picker-multiple/ImageTile.js +0 -117
- package/dist/module/components/expo-image-picker-multiple/ImageTile.js.map +0 -1
- package/dist/module/components/index.js +0 -60
- package/dist/module/components/index.js.map +0 -1
- package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js +0 -415
- package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js.map +0 -1
- package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js +0 -387
- package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js.map +0 -1
- package/dist/module/config.js +0 -27
- package/dist/module/config.js.map +0 -1
- package/dist/module/constants.js +0 -18
- package/dist/module/constants.js.map +0 -1
- package/dist/module/helper.js +0 -424
- package/dist/module/helper.js.map +0 -1
- package/dist/module/index.js +0 -13
- package/dist/module/index.js.map +0 -1
- package/dist/module/js/images/detectFaces.js +0 -31
- package/dist/module/js/images/detectFaces.js.map +0 -1
- package/dist/module/js/images/findLandmarkRange.js +0 -93
- package/dist/module/js/images/findLandmarkRange.js.map +0 -1
- package/dist/module/js/images/getScaledOffset.js +0 -81
- package/dist/module/js/images/getScaledOffset.js.map +0 -1
- package/dist/module/js/site/getSiteLevelFromState.js +0 -29
- package/dist/module/js/site/getSiteLevelFromState.js.map +0 -1
- package/dist/module/js/site/isTVEnabled.js +0 -10
- package/dist/module/js/site/isTVEnabled.js.map +0 -1
- package/dist/module/session.js +0 -58
- package/dist/module/session.js.map +0 -1
- package/dist/module/styles.js +0 -67
- package/dist/module/styles.js.map +0 -1
- package/dist/module/withNavigationFocus.js +0 -30
- package/dist/module/withNavigationFocus.js.map +0 -1
package/dist/module/helper.js
DELETED
|
@@ -1,424 +0,0 @@
|
|
|
1
|
-
import _ from "lodash";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { Platform, StatusBar, Dimensions } from "react-native";
|
|
4
|
-
import { Text } from "./components";
|
|
5
|
-
import Constants from "expo-constants";
|
|
6
|
-
import Config from "./config";
|
|
7
|
-
import { LINEGREY } from "./colours";
|
|
8
|
-
import { getSessionTokenAWS } from "./session";
|
|
9
|
-
|
|
10
|
-
// seperated files to export
|
|
11
|
-
import detectFaces from "./js/images/detectFaces";
|
|
12
|
-
import findLandmarkRange from "./js/images/findLandmarkRange";
|
|
13
|
-
import getScaledOffset from "./js/images/getScaledOffset";
|
|
14
|
-
import getSiteLevelFromState from "./js/site/getSiteLevelFromState";
|
|
15
|
-
import isTVEnabled from "./js/site/isTVEnabled";
|
|
16
|
-
const TIMESTAMP_FORMAT = "D MMM • h:mma";
|
|
17
|
-
const DATE_FORMAT = "D MMM YYYY";
|
|
18
|
-
const getUrl = (baseAction, action, query) => {
|
|
19
|
-
const {
|
|
20
|
-
baseAPIUrl,
|
|
21
|
-
baseStage
|
|
22
|
-
} = Config.env;
|
|
23
|
-
let queryPart = "";
|
|
24
|
-
if (query) {
|
|
25
|
-
_.keys(query).forEach((key, index) => {
|
|
26
|
-
queryPart += `${index === 0 ? "?" : "&"}${key}=${encodeURIComponent(query[key])}`;
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
return `${baseAPIUrl}/${baseAction}-${baseStage}/${action}${queryPart}`;
|
|
30
|
-
};
|
|
31
|
-
const getAuthTokenHeader = () => {
|
|
32
|
-
return new Promise((resolve, reject) => {
|
|
33
|
-
getSessionTokenAWS().then(idToken => {
|
|
34
|
-
resolve(`Bearer ${idToken}`);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
const getShadowStyle = () => {
|
|
39
|
-
if (Platform.OS === "ios") {
|
|
40
|
-
return {
|
|
41
|
-
shadowColor: "#000",
|
|
42
|
-
shadowOffset: {
|
|
43
|
-
width: 0,
|
|
44
|
-
height: 1
|
|
45
|
-
},
|
|
46
|
-
shadowOpacity: 0.1,
|
|
47
|
-
shadowRadius: 3,
|
|
48
|
-
backgroundColor: "#fff"
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return {
|
|
52
|
-
borderColor: LINEGREY,
|
|
53
|
-
backgroundColor: "#fff",
|
|
54
|
-
elevation: 8
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
const StatusBarHeight = size => {
|
|
58
|
-
return getStatusBarHeight() + size;
|
|
59
|
-
};
|
|
60
|
-
const getStatusBarHeight = () => {
|
|
61
|
-
return Platform.OS === "ios" ? Constants.statusBarHeight : StatusBar.currentHeight;
|
|
62
|
-
};
|
|
63
|
-
const getSiteSettingFromState = (state, key, defaultValue) => {
|
|
64
|
-
if (state && state.user && state.user.siteSettings && !_.isUndefined(state.user.siteSettings[key])) {
|
|
65
|
-
return state.user.siteSettings[key];
|
|
66
|
-
}
|
|
67
|
-
return defaultValue || null;
|
|
68
|
-
};
|
|
69
|
-
const getValueOrDefault = (value, def) => {
|
|
70
|
-
return !_.isUndefined(value) ? value : def;
|
|
71
|
-
};
|
|
72
|
-
const getExtension = url => {
|
|
73
|
-
if (!url) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
const fileSplit = url.split(".");
|
|
77
|
-
return fileSplit[fileSplit.length - 1].toLowerCase();
|
|
78
|
-
};
|
|
79
|
-
const getFileName = (url, noExtension) => {
|
|
80
|
-
if (!url) {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
const fileSplit = url.split("/");
|
|
84
|
-
const name = fileSplit[fileSplit.length - 1].toLowerCase();
|
|
85
|
-
if (!noExtension) {
|
|
86
|
-
return name;
|
|
87
|
-
}
|
|
88
|
-
return name.split(".")[0];
|
|
89
|
-
};
|
|
90
|
-
const isVideo = url => {
|
|
91
|
-
const extension = getExtension(url);
|
|
92
|
-
return ["mov", "mp4"].includes(extension);
|
|
93
|
-
};
|
|
94
|
-
const isVideoUrl = url => {
|
|
95
|
-
const urlToCheck = getValidUrl(url);
|
|
96
|
-
if (isVideo(urlToCheck)) {
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
if (isYoutube(urlToCheck)) {
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
if (isVimeo(urlToCheck)) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
return false;
|
|
106
|
-
};
|
|
107
|
-
const isStockImage = url => {
|
|
108
|
-
return url.indexOf("https://pluss60-dev-uploads.s3.ap-southeast-2.amazonaws.com/uploads/library") !== -1;
|
|
109
|
-
};
|
|
110
|
-
const getThumb300 = url => {
|
|
111
|
-
if (!url) {
|
|
112
|
-
return url;
|
|
113
|
-
}
|
|
114
|
-
if (isVideo(url)) {
|
|
115
|
-
return "https://pluss60-demo-uploads.s3.ap-southeast-2.amazonaws.com/uploads/users/ap-southeast-2:97769b56-25ec-41c0-a73c-6c2c4140f629/public/9d0bbec64614b1ed654a03f7e7/movie.jpg";
|
|
116
|
-
}
|
|
117
|
-
if (url.indexOf("https://plussprdstorage.blob.core.windows.net/") !== -1) {
|
|
118
|
-
return url.replace("https://plussprdstorage.blob.core.windows.net/", "https://plusscdn.azureedge.net/");
|
|
119
|
-
}
|
|
120
|
-
if (url.indexOf("https://plusscdn.azureedge.net/") !== -1) {
|
|
121
|
-
return url.replace("/uploads/", "/uploads-thumb/").replace("/general/", "/general300/").replace("/uploads1400/", "/uploads-thumb/").replace("/general1400/", "/general300/");
|
|
122
|
-
}
|
|
123
|
-
if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {
|
|
124
|
-
const extension = getExtension(url);
|
|
125
|
-
let urlToUse = url;
|
|
126
|
-
if (extension !== "jpg") {
|
|
127
|
-
urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;
|
|
128
|
-
}
|
|
129
|
-
return urlToUse.replace("/1400/", "/thumb300/").replace("/uploads/", "/thumb300/");
|
|
130
|
-
}
|
|
131
|
-
return url;
|
|
132
|
-
};
|
|
133
|
-
const get1400 = url => {
|
|
134
|
-
if (!url) {
|
|
135
|
-
return url;
|
|
136
|
-
}
|
|
137
|
-
if (url.indexOf("https://plussprdstorage.blob.core.windows.net/") !== -1) {
|
|
138
|
-
return url.replace("https://plussprdstorage.blob.core.windows.net/", "https://plusscdn.azureedge.net/");
|
|
139
|
-
}
|
|
140
|
-
if (url.indexOf("https://plusscdn.azureedge.net/") !== -1) {
|
|
141
|
-
return url.replace("/uploads/", "/uploads1400/").replace("/general/", "/general1400/");
|
|
142
|
-
}
|
|
143
|
-
if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {
|
|
144
|
-
const extension = getExtension(url);
|
|
145
|
-
let urlToUse = url;
|
|
146
|
-
if (extension !== "jpg") {
|
|
147
|
-
urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;
|
|
148
|
-
}
|
|
149
|
-
return urlToUse.replace("/uploads/", "/1400/");
|
|
150
|
-
}
|
|
151
|
-
return url;
|
|
152
|
-
};
|
|
153
|
-
const get300 = url => {
|
|
154
|
-
if (!url) {
|
|
155
|
-
return url;
|
|
156
|
-
}
|
|
157
|
-
if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {
|
|
158
|
-
const extension = getExtension(url);
|
|
159
|
-
let urlToUse = url;
|
|
160
|
-
if (extension !== "jpg") {
|
|
161
|
-
urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;
|
|
162
|
-
}
|
|
163
|
-
return urlToUse.replace("/uploads/", "/300/").replace("/1400/", "/300/");
|
|
164
|
-
}
|
|
165
|
-
return url;
|
|
166
|
-
};
|
|
167
|
-
const getMimeType = url => {
|
|
168
|
-
const extension = getExtension(url);
|
|
169
|
-
switch (extension) {
|
|
170
|
-
case "mov":
|
|
171
|
-
return "video/quicktime";
|
|
172
|
-
case "mp4":
|
|
173
|
-
return "video/mp4";
|
|
174
|
-
default:
|
|
175
|
-
return "image/jpeg";
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
const getCompressed = url => {
|
|
179
|
-
if (!url || typeof url !== "string") return "";
|
|
180
|
-
return url.replace("/uploads/", "/compressed/");
|
|
181
|
-
};
|
|
182
|
-
const imageExists = url => {
|
|
183
|
-
return new Promise(resolve => {
|
|
184
|
-
fetch(url, {
|
|
185
|
-
method: "HEAD",
|
|
186
|
-
cache: "no-cache"
|
|
187
|
-
}).then(response => {
|
|
188
|
-
resolve(response.status === 200);
|
|
189
|
-
}).catch(() => {
|
|
190
|
-
resolve(false);
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
};
|
|
194
|
-
const formatTime = (hours, minutes) => {
|
|
195
|
-
const period = hours >= 12 ? "pm" : "am";
|
|
196
|
-
|
|
197
|
-
// Convert 24-hour format to 12-hour format
|
|
198
|
-
const adjustedHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;
|
|
199
|
-
|
|
200
|
-
// Ensure minutes are two digits
|
|
201
|
-
const adjustedMinutes = String(minutes).padStart(2, "0");
|
|
202
|
-
return `${adjustedHours}:${adjustedMinutes}${period}`;
|
|
203
|
-
};
|
|
204
|
-
const minutesToString = (minutes, isTimeOfDay) => {
|
|
205
|
-
const hours = Math.floor(minutes / 60);
|
|
206
|
-
const remainingMinutes = minutes % 60;
|
|
207
|
-
if (isTimeOfDay) {
|
|
208
|
-
return formatTime(hours, remainingMinutes);
|
|
209
|
-
}
|
|
210
|
-
const hoursString = hours > 1 ? `${hours} hours` : `${hours} hour`;
|
|
211
|
-
const minutesString = remainingMinutes > 1 ? `${remainingMinutes} minutes` : `${remainingMinutes} minute`;
|
|
212
|
-
if (hours && remainingMinutes) {
|
|
213
|
-
return `${hoursString} ${minutesString}`;
|
|
214
|
-
}
|
|
215
|
-
if (hours) {
|
|
216
|
-
return hoursString;
|
|
217
|
-
}
|
|
218
|
-
if (remainingMinutes) {
|
|
219
|
-
return minutesString;
|
|
220
|
-
}
|
|
221
|
-
return "0 minutes";
|
|
222
|
-
};
|
|
223
|
-
const getPluralS = count => {
|
|
224
|
-
return count === 1 ? "" : "s";
|
|
225
|
-
};
|
|
226
|
-
const getPluralOptions = (count, singular, plural) => {
|
|
227
|
-
if (count === 1) {
|
|
228
|
-
return singular;
|
|
229
|
-
}
|
|
230
|
-
return plural;
|
|
231
|
-
};
|
|
232
|
-
const isEmail = email => {
|
|
233
|
-
if (_.isEmpty(email)) {
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
|
-
const atpos = email.indexOf("@");
|
|
237
|
-
const dotpos = email.lastIndexOf(".");
|
|
238
|
-
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= email.length) {
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
return true;
|
|
242
|
-
};
|
|
243
|
-
const randomString = (name = "") => {
|
|
244
|
-
return `xxxxxxxx4xxxyxxxxxxxxxxxxx${name}`.replace(/[xy]/g, c => {
|
|
245
|
-
// eslint-disable-next-line
|
|
246
|
-
var r = Math.random() * 16 | 0,
|
|
247
|
-
v = c === "x" ? r : r & 0x3 | 0x8;
|
|
248
|
-
return v.toString(16);
|
|
249
|
-
});
|
|
250
|
-
};
|
|
251
|
-
const generateImageName = (name, source) => {
|
|
252
|
-
let result = randomString(name);
|
|
253
|
-
if (source) {
|
|
254
|
-
result += `.${_.last(source.split("."))}`;
|
|
255
|
-
}
|
|
256
|
-
return result;
|
|
257
|
-
};
|
|
258
|
-
const getSite = site => {
|
|
259
|
-
return site === "plussSpace" || site === "hq" ? Config.env.preferredSite : site;
|
|
260
|
-
};
|
|
261
|
-
const getTakeoverThumb = uri => {
|
|
262
|
-
const filename = uri.split("/").pop();
|
|
263
|
-
switch (filename) {
|
|
264
|
-
default:
|
|
265
|
-
return {
|
|
266
|
-
uri
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
const getTakeoverImage = uri => {
|
|
271
|
-
const filename = uri.split("/").pop();
|
|
272
|
-
switch (filename) {
|
|
273
|
-
default:
|
|
274
|
-
return {
|
|
275
|
-
uri
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
const getImageSource = (uri, isThumb) => {
|
|
280
|
-
if (uri == null) return null;
|
|
281
|
-
if (isThumb) return getTakeoverThumb(uri);
|
|
282
|
-
return getTakeoverImage(uri);
|
|
283
|
-
};
|
|
284
|
-
const getFirstName = name => {
|
|
285
|
-
if (_.isEmpty(name)) {
|
|
286
|
-
return name;
|
|
287
|
-
}
|
|
288
|
-
return name.split(" ")[0];
|
|
289
|
-
};
|
|
290
|
-
const usersToSearchResult = (contacts, excludedUserIds) => {
|
|
291
|
-
let result = [];
|
|
292
|
-
contacts.forEach(user => {
|
|
293
|
-
result.push({
|
|
294
|
-
displayName: user.displayName,
|
|
295
|
-
id: user.objectID || user.id || user.ID || user.userId || user.Id,
|
|
296
|
-
profilePic: user.profilePic || user.photoURL || null,
|
|
297
|
-
unit: user.unit
|
|
298
|
-
});
|
|
299
|
-
});
|
|
300
|
-
result = _.reject(result, contact => {
|
|
301
|
-
return _.includes(excludedUserIds, contact.id);
|
|
302
|
-
});
|
|
303
|
-
return result;
|
|
304
|
-
};
|
|
305
|
-
const searchUsers = (source, term) => {
|
|
306
|
-
if (_.isEmpty(term)) {
|
|
307
|
-
return source;
|
|
308
|
-
}
|
|
309
|
-
return _.filter(source, user => {
|
|
310
|
-
const split = user.displayName.split(" ");
|
|
311
|
-
return _.some(split, part => {
|
|
312
|
-
return part.toLowerCase().indexOf(term.toLowerCase()) === 0;
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
};
|
|
316
|
-
const getTabSettingsFromState = state => {
|
|
317
|
-
const tabSettings = state.user && state.user.interface || getSiteSettingFromState(state, "TabSettings", null);
|
|
318
|
-
return tabSettings;
|
|
319
|
-
};
|
|
320
|
-
const getEnabledTabsFromState = state => {
|
|
321
|
-
const tabSettings = getTabSettingsFromState(state);
|
|
322
|
-
return tabSettings ? tabSettings.filter(tab => tab.isEnabled) : [];
|
|
323
|
-
};
|
|
324
|
-
const getReactions = () => {
|
|
325
|
-
return [{
|
|
326
|
-
key: "heart",
|
|
327
|
-
icon: require("./assets/icons/reactions/heart.png")
|
|
328
|
-
}, {
|
|
329
|
-
key: "smile",
|
|
330
|
-
icon: require("./assets/icons/reactions/smile.png")
|
|
331
|
-
}, {
|
|
332
|
-
key: "sad",
|
|
333
|
-
icon: require("./assets/icons/reactions/sad.png")
|
|
334
|
-
}, {
|
|
335
|
-
key: "party",
|
|
336
|
-
icon: require("./assets/icons/reactions/party.png")
|
|
337
|
-
}];
|
|
338
|
-
};
|
|
339
|
-
const hasReacted = (reactions, userId) => {
|
|
340
|
-
return _.some(reactions, r => {
|
|
341
|
-
return !!r[userId];
|
|
342
|
-
});
|
|
343
|
-
};
|
|
344
|
-
const isTablet = () => {
|
|
345
|
-
return Dimensions.get("screen").width > 600;
|
|
346
|
-
};
|
|
347
|
-
const isVimeo = url => {
|
|
348
|
-
if (_.isEmpty(url)) {
|
|
349
|
-
return false;
|
|
350
|
-
}
|
|
351
|
-
if (url.indexOf("https://vimeo.com/") === 0) {
|
|
352
|
-
return true;
|
|
353
|
-
}
|
|
354
|
-
if (url.indexOf("https://player.vimeo.com/video/") === 0) {
|
|
355
|
-
return true;
|
|
356
|
-
}
|
|
357
|
-
};
|
|
358
|
-
const getVimeoEmbed = url => {
|
|
359
|
-
if (_.isEmpty(url)) {
|
|
360
|
-
return "";
|
|
361
|
-
}
|
|
362
|
-
if (url.indexOf("https://vimeo.com/") === 0) {
|
|
363
|
-
const vimeoId = "lol"; //TODO
|
|
364
|
-
return `https://player.vimeo.com/video/${vimeoId}`;
|
|
365
|
-
}
|
|
366
|
-
return url; //TODO
|
|
367
|
-
};
|
|
368
|
-
const isYoutube = url => {
|
|
369
|
-
if (_.isUndefined(url) || _.isEmpty(url)) {
|
|
370
|
-
return false;
|
|
371
|
-
}
|
|
372
|
-
const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
|
|
373
|
-
const match = url.match(regExp);
|
|
374
|
-
if (match && match[2].length === 11) {
|
|
375
|
-
return true;
|
|
376
|
-
}
|
|
377
|
-
return false;
|
|
378
|
-
};
|
|
379
|
-
const getYoutubeEmbed = url => {
|
|
380
|
-
const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
|
|
381
|
-
const match = url.match(regExp);
|
|
382
|
-
return `https://www.youtube.com/embed/${match[2]}?autoplay=0`;
|
|
383
|
-
};
|
|
384
|
-
const getValidUrl = (url = "") => {
|
|
385
|
-
let newUrl = decodeURIComponent(url);
|
|
386
|
-
newUrl = newUrl.trim().replace(/\s/g, "");
|
|
387
|
-
if (/^(:\/\/)/.test(newUrl)) {
|
|
388
|
-
return `https${newUrl}`;
|
|
389
|
-
}
|
|
390
|
-
if (!/^(f|ht)tps?:\/\//i.test(newUrl)) {
|
|
391
|
-
return `https://${newUrl}`;
|
|
392
|
-
}
|
|
393
|
-
return newUrl;
|
|
394
|
-
};
|
|
395
|
-
const getUserPreview = user => {
|
|
396
|
-
return {
|
|
397
|
-
id: user.uid,
|
|
398
|
-
displayName: user.displayName,
|
|
399
|
-
profilePic: user.profilePic || null
|
|
400
|
-
};
|
|
401
|
-
};
|
|
402
|
-
const allowComments = canComment => {
|
|
403
|
-
if (canComment === false) {
|
|
404
|
-
return false;
|
|
405
|
-
}
|
|
406
|
-
if (canComment === true) {
|
|
407
|
-
return true;
|
|
408
|
-
}
|
|
409
|
-
return Config.env.defaultAllowComments;
|
|
410
|
-
};
|
|
411
|
-
const toParagraphed = (text, style) => {
|
|
412
|
-
if (!text) {
|
|
413
|
-
return text;
|
|
414
|
-
}
|
|
415
|
-
const textSplit = text.split("\n");
|
|
416
|
-
return _.map(textSplit, (t, i) => {
|
|
417
|
-
return /*#__PURE__*/React.createElement(Text, {
|
|
418
|
-
key: `paragraph_${i}`,
|
|
419
|
-
style: style
|
|
420
|
-
}, t);
|
|
421
|
-
});
|
|
422
|
-
};
|
|
423
|
-
export { TIMESTAMP_FORMAT, DATE_FORMAT, getUrl, getAuthTokenHeader, getShadowStyle, StatusBarHeight, getStatusBarHeight, getSiteSettingFromState, getValueOrDefault, getExtension, getFileName, isVideo, get300, getThumb300, get1400, getMimeType, getCompressed, imageExists, getPluralS, getPluralOptions, isEmail, formatTime, minutesToString, randomString, generateImageName, getSite, getImageSource, getFirstName, usersToSearchResult, searchUsers, getEnabledTabsFromState, getReactions, hasReacted, isTablet, isYoutube, getYoutubeEmbed, getValidUrl, getUserPreview, allowComments, toParagraphed, isVideoUrl, detectFaces, findLandmarkRange, getScaledOffset, getSiteLevelFromState, isTVEnabled };
|
|
424
|
-
//# sourceMappingURL=helper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_","React","Platform","StatusBar","Dimensions","Text","Constants","Config","LINEGREY","getSessionTokenAWS","detectFaces","findLandmarkRange","getScaledOffset","getSiteLevelFromState","isTVEnabled","TIMESTAMP_FORMAT","DATE_FORMAT","getUrl","baseAction","action","query","baseAPIUrl","baseStage","env","queryPart","keys","forEach","key","index","encodeURIComponent","getAuthTokenHeader","Promise","resolve","reject","then","idToken","getShadowStyle","OS","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","backgroundColor","borderColor","elevation","StatusBarHeight","size","getStatusBarHeight","statusBarHeight","currentHeight","getSiteSettingFromState","state","defaultValue","user","siteSettings","isUndefined","getValueOrDefault","value","def","getExtension","url","fileSplit","split","length","toLowerCase","getFileName","noExtension","name","isVideo","extension","includes","isVideoUrl","urlToCheck","getValidUrl","isYoutube","isVimeo","isStockImage","indexOf","getThumb300","replace","baseUploadsUrl","urlToUse","substring","get1400","get300","getMimeType","getCompressed","imageExists","fetch","method","cache","response","status","catch","formatTime","hours","minutes","period","adjustedHours","adjustedMinutes","String","padStart","minutesToString","isTimeOfDay","Math","floor","remainingMinutes","hoursString","minutesString","getPluralS","count","getPluralOptions","singular","plural","isEmail","email","isEmpty","atpos","dotpos","lastIndexOf","randomString","c","r","random","v","toString","generateImageName","source","result","last","getSite","site","preferredSite","getTakeoverThumb","uri","filename","pop","getTakeoverImage","getImageSource","isThumb","getFirstName","usersToSearchResult","contacts","excludedUserIds","push","displayName","id","objectID","ID","userId","Id","profilePic","photoURL","unit","contact","searchUsers","term","filter","some","part","getTabSettingsFromState","tabSettings","interface","getEnabledTabsFromState","tab","isEnabled","getReactions","icon","require","hasReacted","reactions","isTablet","get","getVimeoEmbed","vimeoId","regExp","match","getYoutubeEmbed","newUrl","decodeURIComponent","trim","test","getUserPreview","uid","allowComments","canComment","defaultAllowComments","toParagraphed","text","style","textSplit","map","t","i","createElement"],"sources":["helper.js"],"sourcesContent":["import _ from \"lodash\";\nimport React from \"react\";\nimport { Platform, StatusBar, Dimensions } from \"react-native\";\nimport { Text } from \"./components\";\nimport Constants from \"expo-constants\";\nimport Config from \"./config\";\nimport { LINEGREY } from \"./colours\";\nimport { getSessionTokenAWS } from \"./session\";\n\n// seperated files to export\nimport detectFaces from \"./js/images/detectFaces\";\nimport findLandmarkRange from \"./js/images/findLandmarkRange\";\nimport getScaledOffset from \"./js/images/getScaledOffset\";\n\nimport getSiteLevelFromState from \"./js/site/getSiteLevelFromState\";\nimport isTVEnabled from \"./js/site/isTVEnabled\";\n\nconst TIMESTAMP_FORMAT = \"D MMM • h:mma\";\nconst DATE_FORMAT = \"D MMM YYYY\";\n\nconst getUrl = (baseAction, action, query) => {\n\tconst { baseAPIUrl, baseStage } = Config.env;\n\tlet queryPart = \"\";\n\tif (query) {\n\t\t_.keys(query).forEach((key, index) => {\n\t\t\tqueryPart += `${index === 0 ? \"?\" : \"&\"}${key}=${encodeURIComponent(query[key])}`;\n\t\t});\n\t}\n\treturn `${baseAPIUrl}/${baseAction}-${baseStage}/${action}${queryPart}`;\n};\n\nconst getAuthTokenHeader = () => {\n\treturn new Promise((resolve, reject) => {\n\t\tgetSessionTokenAWS().then((idToken) => {\n\t\t\tresolve(`Bearer ${idToken}`);\n\t\t});\n\t});\n};\n\nconst getShadowStyle = () => {\n\tif (Platform.OS === \"ios\") {\n\t\treturn {\n\t\t\tshadowColor: \"#000\",\n\t\t\tshadowOffset: {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 1,\n\t\t\t},\n\t\t\tshadowOpacity: 0.1,\n\t\t\tshadowRadius: 3,\n\t\t\tbackgroundColor: \"#fff\",\n\t\t};\n\t}\n\treturn {\n\t\tborderColor: LINEGREY,\n\t\tbackgroundColor: \"#fff\",\n\t\televation: 8,\n\t};\n};\n\nconst StatusBarHeight = (size) => {\n\treturn getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n\treturn Platform.OS === \"ios\"\n\t\t? Constants.statusBarHeight\n\t\t: StatusBar.currentHeight;\n};\n\nconst getSiteSettingFromState = (state, key, defaultValue) => {\n\tif (\n\t\tstate &&\n\t\tstate.user &&\n\t\tstate.user.siteSettings &&\n\t\t!_.isUndefined(state.user.siteSettings[key])\n\t) {\n\t\treturn state.user.siteSettings[key];\n\t}\n\treturn defaultValue || null;\n};\n\nconst getValueOrDefault = (value, def) => {\n\treturn !_.isUndefined(value) ? value : def;\n};\n\nconst getExtension = (url) => {\n\tif (!url) {\n\t\treturn null;\n\t}\n\tconst fileSplit = url.split(\".\");\n\treturn fileSplit[fileSplit.length - 1].toLowerCase();\n};\n\nconst getFileName = (url, noExtension) => {\n\tif (!url) {\n\t\treturn null;\n\t}\n\tconst fileSplit = url.split(\"/\");\n\tconst name = fileSplit[fileSplit.length - 1].toLowerCase();\n\tif (!noExtension) {\n\t\treturn name;\n\t}\n\treturn name.split(\".\")[0];\n};\n\nconst isVideo = (url) => {\n\tconst extension = getExtension(url);\n\treturn [\"mov\", \"mp4\"].includes(extension);\n};\n\nconst isVideoUrl = (url) => {\n\tconst urlToCheck = getValidUrl(url);\n\tif (isVideo(urlToCheck)) {\n\t\treturn true;\n\t}\n\tif (isYoutube(urlToCheck)) {\n\t\treturn true;\n\t}\n\tif (isVimeo(urlToCheck)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nconst isStockImage = (url) => {\n\treturn (\n\t\turl.indexOf(\n\t\t\t\"https://pluss60-dev-uploads.s3.ap-southeast-2.amazonaws.com/uploads/library\",\n\t\t) !== -1\n\t);\n};\n\nconst getThumb300 = (url) => {\n\tif (!url) {\n\t\treturn url;\n\t}\n\tif (isVideo(url)) {\n\t\treturn \"https://pluss60-demo-uploads.s3.ap-southeast-2.amazonaws.com/uploads/users/ap-southeast-2:97769b56-25ec-41c0-a73c-6c2c4140f629/public/9d0bbec64614b1ed654a03f7e7/movie.jpg\";\n\t}\n\tif (url.indexOf(\"https://plussprdstorage.blob.core.windows.net/\") !== -1) {\n\t\treturn url.replace(\n\t\t\t\"https://plussprdstorage.blob.core.windows.net/\",\n\t\t\t\"https://plusscdn.azureedge.net/\",\n\t\t);\n\t}\n\tif (url.indexOf(\"https://plusscdn.azureedge.net/\") !== -1) {\n\t\treturn url\n\t\t\t.replace(\"/uploads/\", \"/uploads-thumb/\")\n\t\t\t.replace(\"/general/\", \"/general300/\")\n\t\t\t.replace(\"/uploads1400/\", \"/uploads-thumb/\")\n\t\t\t.replace(\"/general1400/\", \"/general300/\");\n\t}\n\tif (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n\t\tconst extension = getExtension(url);\n\t\tlet urlToUse = url;\n\t\tif (extension !== \"jpg\") {\n\t\t\turlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n\t\t}\n\t\treturn urlToUse\n\t\t\t.replace(\"/1400/\", \"/thumb300/\")\n\t\t\t.replace(\"/uploads/\", \"/thumb300/\");\n\t}\n\treturn url;\n};\n\nconst get1400 = (url) => {\n\tif (!url) {\n\t\treturn url;\n\t}\n\tif (url.indexOf(\"https://plussprdstorage.blob.core.windows.net/\") !== -1) {\n\t\treturn url.replace(\n\t\t\t\"https://plussprdstorage.blob.core.windows.net/\",\n\t\t\t\"https://plusscdn.azureedge.net/\",\n\t\t);\n\t}\n\tif (url.indexOf(\"https://plusscdn.azureedge.net/\") !== -1) {\n\t\treturn url\n\t\t\t.replace(\"/uploads/\", \"/uploads1400/\")\n\t\t\t.replace(\"/general/\", \"/general1400/\");\n\t}\n\tif (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n\t\tconst extension = getExtension(url);\n\t\tlet urlToUse = url;\n\t\tif (extension !== \"jpg\") {\n\t\t\turlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n\t\t}\n\t\treturn urlToUse.replace(\"/uploads/\", \"/1400/\");\n\t}\n\treturn url;\n};\n\nconst get300 = (url) => {\n\tif (!url) {\n\t\treturn url;\n\t}\n\tif (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n\t\tconst extension = getExtension(url);\n\t\tlet urlToUse = url;\n\t\tif (extension !== \"jpg\") {\n\t\t\turlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n\t\t}\n\t\treturn urlToUse.replace(\"/uploads/\", \"/300/\").replace(\"/1400/\", \"/300/\");\n\t}\n\treturn url;\n};\n\nconst getMimeType = (url) => {\n\tconst extension = getExtension(url);\n\tswitch (extension) {\n\t\tcase \"mov\":\n\t\t\treturn \"video/quicktime\";\n\t\tcase \"mp4\":\n\t\t\treturn \"video/mp4\";\n\t\tdefault:\n\t\t\treturn \"image/jpeg\";\n\t}\n};\n\nconst getCompressed = (url) => {\n\tif (!url || typeof url !== \"string\") return \"\";\n\treturn url.replace(\"/uploads/\", \"/compressed/\");\n};\n\nconst imageExists = (url) => {\n\treturn new Promise((resolve) => {\n\t\tfetch(url, { method: \"HEAD\", cache: \"no-cache\" })\n\t\t\t.then((response) => {\n\t\t\t\tresolve(response.status === 200);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tresolve(false);\n\t\t\t});\n\t});\n};\n\nconst formatTime = (hours, minutes) => {\n\tconst period = hours >= 12 ? \"pm\" : \"am\";\n\n\t// Convert 24-hour format to 12-hour format\n\tconst adjustedHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;\n\n\t// Ensure minutes are two digits\n\tconst adjustedMinutes = String(minutes).padStart(2, \"0\");\n\n\treturn `${adjustedHours}:${adjustedMinutes}${period}`;\n};\n\nconst minutesToString = (minutes, isTimeOfDay) => {\n\tconst hours = Math.floor(minutes / 60);\n\tconst remainingMinutes = minutes % 60;\n\n\tif (isTimeOfDay) {\n\t\treturn formatTime(hours, remainingMinutes);\n\t}\n\n\tconst hoursString = hours > 1 ? `${hours} hours` : `${hours} hour`;\n\tconst minutesString =\n\t\tremainingMinutes > 1\n\t\t\t? `${remainingMinutes} minutes`\n\t\t\t: `${remainingMinutes} minute`;\n\n\tif (hours && remainingMinutes) {\n\t\treturn `${hoursString} ${minutesString}`;\n\t}\n\tif (hours) {\n\t\treturn hoursString;\n\t}\n\tif (remainingMinutes) {\n\t\treturn minutesString;\n\t}\n\treturn \"0 minutes\";\n};\n\nconst getPluralS = (count) => {\n\treturn count === 1 ? \"\" : \"s\";\n};\n\nconst getPluralOptions = (count, singular, plural) => {\n\tif (count === 1) {\n\t\treturn singular;\n\t}\n\treturn plural;\n};\n\nconst isEmail = (email) => {\n\tif (_.isEmpty(email)) {\n\t\treturn false;\n\t}\n\tconst atpos = email.indexOf(\"@\");\n\tconst dotpos = email.lastIndexOf(\".\");\n\tif (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= email.length) {\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nconst randomString = (name = \"\") => {\n\treturn `xxxxxxxx4xxxyxxxxxxxxxxxxx${name}`.replace(/[xy]/g, (c) => {\n\t\t// eslint-disable-next-line\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === \"x\" ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst generateImageName = (name, source) => {\n\tlet result = randomString(name);\n\tif (source) {\n\t\tresult += `.${_.last(source.split(\".\"))}`;\n\t}\n\treturn result;\n};\n\nconst getSite = (site) => {\n\treturn site === \"plussSpace\" || site === \"hq\"\n\t\t? Config.env.preferredSite\n\t\t: site;\n};\n\nconst getTakeoverThumb = (uri) => {\n\tconst filename = uri.split(\"/\").pop();\n\tswitch (filename) {\n\t\tdefault:\n\t\t\treturn { uri };\n\t}\n};\n\nconst getTakeoverImage = (uri) => {\n\tconst filename = uri.split(\"/\").pop();\n\tswitch (filename) {\n\t\tdefault:\n\t\t\treturn { uri };\n\t}\n};\n\nconst getImageSource = (uri, isThumb) => {\n\tif (uri == null) return null;\n\tif (isThumb) return getTakeoverThumb(uri);\n\treturn getTakeoverImage(uri);\n};\n\nconst getFirstName = (name) => {\n\tif (_.isEmpty(name)) {\n\t\treturn name;\n\t}\n\treturn name.split(\" \")[0];\n};\n\nconst usersToSearchResult = (contacts, excludedUserIds) => {\n\tlet result = [];\n\tcontacts.forEach((user) => {\n\t\tresult.push({\n\t\t\tdisplayName: user.displayName,\n\t\t\tid: user.objectID || user.id || user.ID || user.userId || user.Id,\n\t\t\tprofilePic: user.profilePic || user.photoURL || null,\n\t\t\tunit: user.unit,\n\t\t});\n\t});\n\tresult = _.reject(result, (contact) => {\n\t\treturn _.includes(excludedUserIds, contact.id);\n\t});\n\treturn result;\n};\n\nconst searchUsers = (source, term) => {\n\tif (_.isEmpty(term)) {\n\t\treturn source;\n\t}\n\treturn _.filter(source, (user) => {\n\t\tconst split = user.displayName.split(\" \");\n\t\treturn _.some(split, (part) => {\n\t\t\treturn part.toLowerCase().indexOf(term.toLowerCase()) === 0;\n\t\t});\n\t});\n};\n\nconst getTabSettingsFromState = (state) => {\n\tconst tabSettings =\n\t\t(state.user && state.user.interface) ||\n\t\tgetSiteSettingFromState(state, \"TabSettings\", null);\n\treturn tabSettings;\n};\n\nconst getEnabledTabsFromState = (state) => {\n\tconst tabSettings = getTabSettingsFromState(state);\n\treturn tabSettings ? tabSettings.filter((tab) => tab.isEnabled) : [];\n};\n\nconst getReactions = () => {\n\treturn [\n\t\t{\n\t\t\tkey: \"heart\",\n\t\t\ticon: require(\"./assets/icons/reactions/heart.png\"),\n\t\t},\n\t\t{\n\t\t\tkey: \"smile\",\n\t\t\ticon: require(\"./assets/icons/reactions/smile.png\"),\n\t\t},\n\t\t{\n\t\t\tkey: \"sad\",\n\t\t\ticon: require(\"./assets/icons/reactions/sad.png\"),\n\t\t},\n\t\t{\n\t\t\tkey: \"party\",\n\t\t\ticon: require(\"./assets/icons/reactions/party.png\"),\n\t\t},\n\t];\n};\n\nconst hasReacted = (reactions, userId) => {\n\treturn _.some(reactions, (r) => {\n\t\treturn !!r[userId];\n\t});\n};\n\nconst isTablet = () => {\n\treturn Dimensions.get(\"screen\").width > 600;\n};\n\nconst isVimeo = (url) => {\n\tif (_.isEmpty(url)) {\n\t\treturn false;\n\t}\n\tif (url.indexOf(\"https://vimeo.com/\") === 0) {\n\t\treturn true;\n\t}\n\tif (url.indexOf(\"https://player.vimeo.com/video/\") === 0) {\n\t\treturn true;\n\t}\n};\n\nconst getVimeoEmbed = (url) => {\n\tif (_.isEmpty(url)) {\n\t\treturn \"\";\n\t}\n\tif (url.indexOf(\"https://vimeo.com/\") === 0) {\n\t\tconst vimeoId = \"lol\"; //TODO\n\t\treturn `https://player.vimeo.com/video/${vimeoId}`;\n\t}\n\treturn url; //TODO\n};\n\nconst isYoutube = (url) => {\n\tif (_.isUndefined(url) || _.isEmpty(url)) {\n\t\treturn false;\n\t}\n\tconst regExp =\n\t\t/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/;\n\tconst match = url.match(regExp);\n\tif (match && match[2].length === 11) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nconst getYoutubeEmbed = (url) => {\n\tconst regExp =\n\t\t/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/;\n\tconst match = url.match(regExp);\n\treturn `https://www.youtube.com/embed/${match[2]}?autoplay=0`;\n};\n\nconst getValidUrl = (url = \"\") => {\n\tlet newUrl = decodeURIComponent(url);\n\tnewUrl = newUrl.trim().replace(/\\s/g, \"\");\n\n\tif (/^(:\\/\\/)/.test(newUrl)) {\n\t\treturn `https${newUrl}`;\n\t}\n\tif (!/^(f|ht)tps?:\\/\\//i.test(newUrl)) {\n\t\treturn `https://${newUrl}`;\n\t}\n\n\treturn newUrl;\n};\n\nconst getUserPreview = (user) => {\n\treturn {\n\t\tid: user.uid,\n\t\tdisplayName: user.displayName,\n\t\tprofilePic: user.profilePic || null,\n\t};\n};\n\nconst allowComments = (canComment) => {\n\tif (canComment === false) {\n\t\treturn false;\n\t}\n\tif (canComment === true) {\n\t\treturn true;\n\t}\n\treturn Config.env.defaultAllowComments;\n};\n\nconst toParagraphed = (text, style) => {\n\tif (!text) {\n\t\treturn text;\n\t}\n\tconst textSplit = text.split(\"\\n\");\n\treturn _.map(textSplit, (t, i) => {\n\t\treturn (\n\t\t\t<Text key={`paragraph_${i}`} style={style}>\n\t\t\t\t{t}\n\t\t\t</Text>\n\t\t);\n\t});\n};\n\nexport {\n\tTIMESTAMP_FORMAT,\n\tDATE_FORMAT,\n\tgetUrl,\n\tgetAuthTokenHeader,\n\tgetShadowStyle,\n\tStatusBarHeight,\n\tgetStatusBarHeight,\n\tgetSiteSettingFromState,\n\tgetValueOrDefault,\n\tgetExtension,\n\tgetFileName,\n\tisVideo,\n\tget300,\n\tgetThumb300,\n\tget1400,\n\tgetMimeType,\n\tgetCompressed,\n\timageExists,\n\tgetPluralS,\n\tgetPluralOptions,\n\tisEmail,\n\tformatTime,\n\tminutesToString,\n\trandomString,\n\tgenerateImageName,\n\tgetSite,\n\tgetImageSource,\n\tgetFirstName,\n\tusersToSearchResult,\n\tsearchUsers,\n\tgetEnabledTabsFromState,\n\tgetReactions,\n\thasReacted,\n\tisTablet,\n\tisYoutube,\n\tgetYoutubeEmbed,\n\tgetValidUrl,\n\tgetUserPreview,\n\tallowComments,\n\ttoParagraphed,\n\tisVideoUrl,\n\tdetectFaces,\n\tfindLandmarkRange,\n\tgetScaledOffset,\n\tgetSiteLevelFromState,\n\tisTVEnabled,\n};\n"],"mappings":"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","ignoreList":[]}
|
package/dist/module/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import Config from "./config";
|
|
2
|
-
import Styles from "./styles";
|
|
3
|
-
import * as Session from "./session";
|
|
4
|
-
import * as Helper from "./helper";
|
|
5
|
-
import * as Colours from "./colours";
|
|
6
|
-
import * as Actions from "./actions";
|
|
7
|
-
import * as ActionTypes from "./actions/types";
|
|
8
|
-
import * as Apis from "./apis";
|
|
9
|
-
import * as Components from "./components";
|
|
10
|
-
import * as Constants from "./constants";
|
|
11
|
-
import { withNavigationFocus } from "./withNavigationFocus";
|
|
12
|
-
export { Config, Styles, Session, Helper, Colours, Actions, ActionTypes, Apis, Components, Constants, withNavigationFocus };
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
package/dist/module/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["Config","Styles","Session","Helper","Colours","Actions","ActionTypes","Apis","Components","Constants","withNavigationFocus"],"sources":["index.js"],"sourcesContent":["import Config from \"./config\";\nimport Styles from \"./styles\";\nimport * as Session from \"./session\";\nimport * as Helper from \"./helper\";\nimport * as Colours from \"./colours\";\nimport * as Actions from \"./actions\";\nimport * as ActionTypes from \"./actions/types\";\nimport * as Apis from \"./apis\";\nimport * as Components from \"./components\";\nimport * as Constants from \"./constants\";\nimport { withNavigationFocus } from \"./withNavigationFocus\";\n\nexport {\n\tConfig,\n\tStyles,\n\tSession,\n\tHelper,\n\tColours,\n\tActions,\n\tActionTypes,\n\tApis,\n\tComponents,\n\tConstants,\n\twithNavigationFocus,\n};\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,UAAU;AAC7B,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,WAAW,MAAM,iBAAiB;AAC9C,OAAO,KAAKC,IAAI,MAAM,QAAQ;AAC9B,OAAO,KAAKC,UAAU,MAAM,cAAc;AAC1C,OAAO,KAAKC,SAAS,MAAM,aAAa;AACxC,SAASC,mBAAmB,QAAQ,uBAAuB;AAE3D,SACCV,MAAM,EACNC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,OAAO,EACPC,OAAO,EACPC,WAAW,EACXC,IAAI,EACJC,UAAU,EACVC,SAAS,EACTC,mBAAmB","ignoreList":[]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { stringActions } from "../../apis";
|
|
2
|
-
import moment from "moment";
|
|
3
|
-
import { File, Paths } from "expo-file-system";
|
|
4
|
-
// import * as FaceDetector from 'expo-face-detector';
|
|
5
|
-
|
|
6
|
-
const detectFaces = async remoteUrl => {
|
|
7
|
-
var _parts$;
|
|
8
|
-
// deprecated
|
|
9
|
-
|
|
10
|
-
const parts = remoteUrl.split("/").splice(-2);
|
|
11
|
-
const mediaId = parts[0];
|
|
12
|
-
const extension = ((_parts$ = parts[1]) === null || _parts$ === void 0 ? void 0 : _parts$.split(".").splice(-1)[0]) || "jpg";
|
|
13
|
-
const file = await File.downloadFileAsync(remoteUrl, new File(Paths.cache, `${mediaId}.${extension}`), {
|
|
14
|
-
idempotent: true
|
|
15
|
-
});
|
|
16
|
-
const localUrl = file.uri;
|
|
17
|
-
|
|
18
|
-
// const faces = await FaceDetector.detectFacesAsync(localUrl, {
|
|
19
|
-
// mode: FaceDetector.FaceDetectorMode.accurate,
|
|
20
|
-
// });
|
|
21
|
-
|
|
22
|
-
const faces = null;
|
|
23
|
-
if (faces && faces.image && faces.image.uri) {
|
|
24
|
-
delete faces.image.uri;
|
|
25
|
-
}
|
|
26
|
-
faces.timestamp = moment().valueOf();
|
|
27
|
-
stringActions.setString("plussSpace", `imagefaces_${encodeURIComponent(remoteUrl)}`, faces);
|
|
28
|
-
return faces;
|
|
29
|
-
};
|
|
30
|
-
export default detectFaces;
|
|
31
|
-
//# sourceMappingURL=detectFaces.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["stringActions","moment","File","Paths","detectFaces","remoteUrl","_parts$","parts","split","splice","mediaId","extension","file","downloadFileAsync","cache","idempotent","localUrl","uri","faces","image","timestamp","valueOf","setString","encodeURIComponent"],"sources":["detectFaces.js"],"sourcesContent":["import { stringActions } from \"../../apis\";\nimport moment from \"moment\";\nimport { File, Paths } from \"expo-file-system\";\n// import * as FaceDetector from 'expo-face-detector';\n\nconst detectFaces = async (remoteUrl) => {\n\t// deprecated\n\n\tconst parts = remoteUrl.split(\"/\").splice(-2);\n\tconst mediaId = parts[0];\n\tconst extension = parts[1]?.split(\".\").splice(-1)[0] || \"jpg\";\n\n\tconst file = await File.downloadFileAsync(\n\t\tremoteUrl,\n\t\tnew File(Paths.cache, `${mediaId}.${extension}`),\n\t\t{ idempotent: true },\n\t);\n\tconst localUrl = file.uri;\n\n\t// const faces = await FaceDetector.detectFacesAsync(localUrl, {\n\t// mode: FaceDetector.FaceDetectorMode.accurate,\n\t// });\n\n\tconst faces = null;\n\n\tif (faces && faces.image && faces.image.uri) {\n\t\tdelete faces.image.uri;\n\t}\n\n\tfaces.timestamp = moment().valueOf();\n\n\tstringActions.setString(\n\t\t\"plussSpace\",\n\t\t`imagefaces_${encodeURIComponent(remoteUrl)}`,\n\t\tfaces,\n\t);\n\n\treturn faces;\n};\n\nexport default detectFaces;\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,YAAY;AAC1C,OAAOC,MAAM,MAAM,QAAQ;AAC3B,SAASC,IAAI,EAAEC,KAAK,QAAQ,kBAAkB;AAC9C;;AAEA,MAAMC,WAAW,GAAG,MAAOC,SAAS,IAAK;EAAA,IAAAC,OAAA;EACxC;;EAEA,MAAMC,KAAK,GAAGF,SAAS,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;EAC7C,MAAMC,OAAO,GAAGH,KAAK,CAAC,CAAC,CAAC;EACxB,MAAMI,SAAS,GAAG,EAAAL,OAAA,GAAAC,KAAK,CAAC,CAAC,CAAC,cAAAD,OAAA,uBAARA,OAAA,CAAUE,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI,KAAK;EAE7D,MAAMG,IAAI,GAAG,MAAMV,IAAI,CAACW,iBAAiB,CACxCR,SAAS,EACT,IAAIH,IAAI,CAACC,KAAK,CAACW,KAAK,EAAE,GAAGJ,OAAO,IAAIC,SAAS,EAAE,CAAC,EAChD;IAAEI,UAAU,EAAE;EAAK,CACpB,CAAC;EACD,MAAMC,QAAQ,GAAGJ,IAAI,CAACK,GAAG;;EAEzB;EACA;EACA;;EAEA,MAAMC,KAAK,GAAG,IAAI;EAElB,IAAIA,KAAK,IAAIA,KAAK,CAACC,KAAK,IAAID,KAAK,CAACC,KAAK,CAACF,GAAG,EAAE;IAC5C,OAAOC,KAAK,CAACC,KAAK,CAACF,GAAG;EACvB;EAEAC,KAAK,CAACE,SAAS,GAAGnB,MAAM,CAAC,CAAC,CAACoB,OAAO,CAAC,CAAC;EAEpCrB,aAAa,CAACsB,SAAS,CACtB,YAAY,EACZ,cAAcC,kBAAkB,CAAClB,SAAS,CAAC,EAAE,EAC7Ca,KACD,CAAC;EAED,OAAOA,KAAK;AACb,CAAC;AAED,eAAed,WAAW","ignoreList":[]}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import _ from "lodash";
|
|
2
|
-
import moment from "moment";
|
|
3
|
-
import { stringActions } from "../../apis";
|
|
4
|
-
import detectFaces from "./detectFaces";
|
|
5
|
-
import getScaledOffset from "./getScaledOffset";
|
|
6
|
-
const findLandmarkRange = async (url, options) => {
|
|
7
|
-
let cachedValues;
|
|
8
|
-
if (options && options.cachedValues) {
|
|
9
|
-
cachedValues = options.cachedValues;
|
|
10
|
-
}
|
|
11
|
-
try {
|
|
12
|
-
const response = await stringActions.getString("plussSpace", `imagefaces_${encodeURIComponent(url)}`);
|
|
13
|
-
cachedValues = response.data;
|
|
14
|
-
} catch (e) {
|
|
15
|
-
console.log("errored from cache");
|
|
16
|
-
}
|
|
17
|
-
if (!cachedValues || !cachedValues.faces || !cachedValues.image || _.isEmpty(cachedValues.faces) && moment().add(-1, "w").valueOf() > moment(cachedValues.timestamp).valueOf()) {
|
|
18
|
-
cachedValues = await detectFaces(url);
|
|
19
|
-
}
|
|
20
|
-
const {
|
|
21
|
-
faces,
|
|
22
|
-
image
|
|
23
|
-
} = cachedValues;
|
|
24
|
-
let landmarkStartX = null;
|
|
25
|
-
let landmarkStartY = null;
|
|
26
|
-
let landmarkEndX = null;
|
|
27
|
-
let landmarkEndY = null;
|
|
28
|
-
if (_.isEmpty(faces)) {
|
|
29
|
-
landmarkStartX = image.width / 2;
|
|
30
|
-
landmarkStartY = image.height / 2;
|
|
31
|
-
landmarkEndX = image.width / 2;
|
|
32
|
-
landmarkEndY = image.height / 2;
|
|
33
|
-
} else {
|
|
34
|
-
faces.forEach(face => {
|
|
35
|
-
const {
|
|
36
|
-
bounds
|
|
37
|
-
} = face;
|
|
38
|
-
if (!landmarkStartX || bounds.origin.x < landmarkStartX) {
|
|
39
|
-
landmarkStartX = bounds.origin.x;
|
|
40
|
-
}
|
|
41
|
-
if (!landmarkStartY || bounds.origin.y < landmarkStartY) {
|
|
42
|
-
landmarkStartY = bounds.origin.y;
|
|
43
|
-
}
|
|
44
|
-
const faceEndX = bounds.origin.x + bounds.size.width;
|
|
45
|
-
if (!landmarkEndX || faceEndX > landmarkEndX) {
|
|
46
|
-
landmarkEndX = faceEndX;
|
|
47
|
-
}
|
|
48
|
-
const faceEndY = bounds.origin.y + bounds.size.height;
|
|
49
|
-
if (!landmarkEndY || faceEndX > landmarkEndY) {
|
|
50
|
-
landmarkEndY = faceEndY;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
let targetWidth = image.width;
|
|
55
|
-
let targetHeight = image.height;
|
|
56
|
-
if (options && options.targetWidth && options.targetHeight) {
|
|
57
|
-
const {
|
|
58
|
-
scaleFactor
|
|
59
|
-
} = getScaledOffset(image.width, image.height, options.targetWidth, options.targetHeight);
|
|
60
|
-
landmarkStartX *= scaleFactor;
|
|
61
|
-
landmarkStartY *= scaleFactor;
|
|
62
|
-
landmarkEndX *= scaleFactor;
|
|
63
|
-
landmarkEndY *= scaleFactor;
|
|
64
|
-
targetWidth = options.targetWidth;
|
|
65
|
-
targetHeight = options.targetHeight;
|
|
66
|
-
}
|
|
67
|
-
if (landmarkStartX < 0) {
|
|
68
|
-
landmarkStartX = 0;
|
|
69
|
-
}
|
|
70
|
-
if (landmarkStartY < 0) {
|
|
71
|
-
landmarkStartY = 0;
|
|
72
|
-
}
|
|
73
|
-
if (landmarkEndX > targetWidth) {
|
|
74
|
-
landmarkEndX = targetWidth;
|
|
75
|
-
}
|
|
76
|
-
if (landmarkEndY > targetHeight) {
|
|
77
|
-
landmarkEndY = targetHeight;
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
start: {
|
|
81
|
-
x: landmarkStartX,
|
|
82
|
-
y: landmarkStartY
|
|
83
|
-
},
|
|
84
|
-
end: {
|
|
85
|
-
x: landmarkEndX,
|
|
86
|
-
y: landmarkEndY
|
|
87
|
-
},
|
|
88
|
-
height: image.height,
|
|
89
|
-
width: image.width
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
export default findLandmarkRange;
|
|
93
|
-
//# sourceMappingURL=findLandmarkRange.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"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"],"sources":["findLandmarkRange.js"],"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\tlet cachedValues;\n\tif (options && options.cachedValues) {\n\t\tcachedValues = options.cachedValues;\n\t}\n\ttry {\n\t\tconst response = await stringActions.getString(\n\t\t\t\"plussSpace\",\n\t\t\t`imagefaces_${encodeURIComponent(url)}`,\n\t\t);\n\t\tcachedValues = response.data;\n\t} catch (e) {\n\t\tconsole.log(\"errored from cache\");\n\t}\n\tif (\n\t\t!cachedValues ||\n\t\t!cachedValues.faces ||\n\t\t!cachedValues.image ||\n\t\t(_.isEmpty(cachedValues.faces) &&\n\t\t\tmoment().add(-1, \"w\").valueOf() >\n\t\t\t\tmoment(cachedValues.timestamp).valueOf())\n\t) {\n\t\tcachedValues = await detectFaces(url);\n\t}\n\tconst { faces, image } = cachedValues;\n\n\tlet landmarkStartX = null;\n\tlet landmarkStartY = null;\n\tlet landmarkEndX = null;\n\tlet landmarkEndY = null;\n\n\tif (_.isEmpty(faces)) {\n\t\tlandmarkStartX = image.width / 2;\n\t\tlandmarkStartY = image.height / 2;\n\t\tlandmarkEndX = image.width / 2;\n\t\tlandmarkEndY = image.height / 2;\n\t} else {\n\t\tfaces.forEach((face) => {\n\t\t\tconst { bounds } = face;\n\n\t\t\tif (!landmarkStartX || bounds.origin.x < landmarkStartX) {\n\t\t\t\tlandmarkStartX = bounds.origin.x;\n\t\t\t}\n\n\t\t\tif (!landmarkStartY || bounds.origin.y < landmarkStartY) {\n\t\t\t\tlandmarkStartY = bounds.origin.y;\n\t\t\t}\n\n\t\t\tconst faceEndX = bounds.origin.x + bounds.size.width;\n\t\t\tif (!landmarkEndX || faceEndX > landmarkEndX) {\n\t\t\t\tlandmarkEndX = faceEndX;\n\t\t\t}\n\n\t\t\tconst faceEndY = bounds.origin.y + bounds.size.height;\n\t\t\tif (!landmarkEndY || faceEndX > landmarkEndY) {\n\t\t\t\tlandmarkEndY = faceEndY;\n\t\t\t}\n\t\t});\n\t}\n\n\tlet targetWidth = image.width;\n\tlet targetHeight = image.height;\n\n\tif (options && options.targetWidth && options.targetHeight) {\n\t\tconst { scaleFactor } = getScaledOffset(\n\t\t\timage.width,\n\t\t\timage.height,\n\t\t\toptions.targetWidth,\n\t\t\toptions.targetHeight,\n\t\t);\n\t\tlandmarkStartX *= scaleFactor;\n\t\tlandmarkStartY *= scaleFactor;\n\t\tlandmarkEndX *= scaleFactor;\n\t\tlandmarkEndY *= scaleFactor;\n\t\ttargetWidth = options.targetWidth;\n\t\ttargetHeight = options.targetHeight;\n\t}\n\n\tif (landmarkStartX < 0) {\n\t\tlandmarkStartX = 0;\n\t}\n\tif (landmarkStartY < 0) {\n\t\tlandmarkStartY = 0;\n\t}\n\tif (landmarkEndX > targetWidth) {\n\t\tlandmarkEndX = targetWidth;\n\t}\n\tif (landmarkEndY > targetHeight) {\n\t\tlandmarkEndY = targetHeight;\n\t}\n\n\treturn {\n\t\tstart: {\n\t\t\tx: landmarkStartX,\n\t\t\ty: landmarkStartY,\n\t\t},\n\t\tend: {\n\t\t\tx: landmarkEndX,\n\t\t\ty: landmarkEndY,\n\t\t},\n\t\theight: image.height,\n\t\twidth: image.width,\n\t};\n};\n\nexport default findLandmarkRange;\n"],"mappings":"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","ignoreList":[]}
|