diff --git a/App.js b/App.js
index 591de398..499e48a6 100644
--- a/App.js
+++ b/App.js
@@ -8,7 +8,6 @@ import * as Notifications from "expo-notifications"
import { initializeApp } from "firebase/app"
import { getDatabase, ref, push, set } from "firebase/database"
import { getAuth, signInWithEmailAndPassword } from "firebase/auth"
-import { APIKEY, MESSAGING_SENDER_ID, APP_ID, MEASUREMENT_ID, FIREBASE_PASSWORD, SERVICE_ACCOUNT_ID } from "@env"
import { Strings } from "./constants"
import * as eva from "@eva-design/eva"
import { ApplicationProvider, Icon, IconRegistry, Text } from "@ui-kitten/components"
@@ -36,15 +35,15 @@ Notifications.setNotificationHandler({
})
const firebaseConfig = {
- apiKey: APIKEY,
+ apiKey: process.env.APIKEY,
authDomain: "daily-mobile-app-notifications.firebaseapp.com",
databaseURL: "https://daily-mobile-app-notifications-default-rtdb.firebaseio.com",
projectId: "daily-mobile-app-notifications",
storageBucket: "daily-mobile-app-notifications.appspot.com",
- messagingSenderId: MESSAGING_SENDER_ID,
- appId: APP_ID,
- measurementId: MEASUREMENT_ID,
- serviceAccountId: SERVICE_ACCOUNT_ID
+ messagingSenderId: process.env.MESSAGING_SENDER_ID,
+ appId: process.env.APP_ID,
+ measurementId: process.env.MEASUREMENT_ID,
+ serviceAccountId: process.env.SERVICE_ACCOUNT_ID
}
const Stack = createStackNavigator()
@@ -58,6 +57,7 @@ export default function App() {
const colorScheme = Appearance.getColorScheme()
const [theme, setTheme] = useState(colorScheme)
const [deviceType, setDeviceType] = useState(Device.DeviceType.PHONE)
+ const [seen, setSeen] = useState(new Set())
const toggleTheme = () => {
const next = theme === "light" ? "dark" : "light"
@@ -129,31 +129,50 @@ export default function App() {
}
}
+ const sectionOptions = ({ route }) => ({
+ headerTitle: () => {decode(route.params.category.name).replace('\'', '\u{2019}')},
+ headerTitleStyle: { fontFamily: "MinionProBold" },
+ headerTintColor: bread[theme]["color-primary-500"]
+ })
+
+ const authorOptions = ({ route }) => ({
+ headerTitle: () => {route.params.name},
+ headerTitleStyle: { fontFamily: "MinionProBold" },
+ headerTintColor: bread[theme]["color-primary-500"]
+ })
+
const searchHeaderOptions = {
headerTintColor: bread[theme]["color-primary-500"]
}
+ var events = []
+ let app
+ let auth
+ let db
+ if (Object.keys(firebaseConfig).length > 0) {
+ app = initializeApp(firebaseConfig)
+ auth = getAuth(app)
+ db = getDatabase(app)
+ }
+
useEffect(() => {
// Loads fonts from static resource.
Font.loadAsync(minion).then(() => setFontsLoaded(true))
- registerForPushNotificationsAsync().then(token => {
- setExpoPushToken(token)
- if (Object.keys(firebaseConfig).length > 0) {
- const app = initializeApp(firebaseConfig)
- const db = getDatabase(app)
- var matches = expoPushToken.match(/\[(.*?)\]/)
- if (matches) {
+
+ if (Object.keys(firebaseConfig).length > 0) {
+ registerForPushNotificationsAsync().then(token => {
+ setExpoPushToken(token)
+ var matches = token?.match(/\[(.*?)\]/)
+
+ if (matches) {
var submatch = matches[1]
- const auth = getAuth(app)
- signInWithEmailAndPassword(auth, "tech@stanforddaily.com", FIREBASE_PASSWORD).then((userCredential) => {
+ signInWithEmailAndPassword(auth, "tech@stanforddaily.com", process.env.FIREBASE_PASSWORD).then((userCredential) => {
const tokenRef = ref(db, "ExpoPushTokens/" + submatch, userCredential)
set(tokenRef, Date())
- }).catch((error) => {
- console.log("Could not sign in: ", error)
})
}
- }
- })
+ })
+ }
Device.getDeviceTypeAsync().then(setDeviceType)
@@ -169,8 +188,9 @@ export default function App() {
setNotification(notification)
})
- // This listener is fired whenever a user taps on or interacts with a notification (works when app is foregrounded, backgrounded or killed).
+ // This listener is fired whenever a user taps on or interacts with a notification.
responseListener.current = Notifications.addNotificationResponseReceivedListener(response => {
+ // Works when app is foregrounded, backgrounded or killed.
Model.posts().id(response.notification.request.trigger.payload.body.postID).embed().then((result) => {
navigate(Strings.post, { item: result })
})
@@ -184,7 +204,16 @@ export default function App() {
return fontsLoaded && (
-
+ {
+ const name = getActiveRouteName(e)
+ if (!(name in seen)) {
+ signInWithEmailAndPassword(auth, "tech@stanforddaily.com", process.env.FIREBASE_PASSWORD).then((userCredential) => {
+ const analyticsRef = ref(db, "Analytics/", userCredential)
+ push(analyticsRef, JSON.stringify(e)) // Still figuring out how to format as an object in Firebase.
+ })
+ events.push(e)
+ }
+ }} theme={navigatorTheme[theme]}>
@@ -204,12 +233,12 @@ export default function App() {
({ headerTitle: () => {decode(route.params.category.name).replace('\'', '\u{2019}')}, headerTitleStyle: { fontFamily: "MinionProBold" }, headerTintColor: bread[theme]["color-primary-500"] })}
+ options={sectionOptions}
/>
({ headerTitle: () => {route.params.name}, headerTitleStyle: { fontFamily: "MinionProBold" }, headerTintColor: bread[theme]["color-primary-500"] })}
+ options={authorOptions}
/>
3*groupSize} overdrag>
{_.chunk(shelfArticles, 3*groupSize).map((triplet, index) => (
-
+
{_.chunk(triplet, 3).map((group, outerIndex) => (
{group.map((item) => (
diff --git a/package.json b/package.json
index a6f0ec74..e043425a 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"expo": "^45.0.0",
"expo-av": "~11.2.3",
"expo-blur": "~11.1.0",
+ "expo-build-properties": "~0.2.0",
"expo-constants": "~13.1.1",
"expo-crypto": "~10.2.0",
"expo-dev-client": "~1.0.1",
@@ -51,7 +52,6 @@
"react-native-render-html": "^6.3.3",
"react-native-safe-area-context": "4.2.4",
"react-native-screens": "~3.11.1",
- "react-native-skeleton-content": "^1.0.24",
"react-native-snap-carousel": "^3.9.1",
"react-native-svg": "12.3.0",
"react-native-track-player": "^3.1.0",
diff --git a/screens/Author.js b/screens/Author.js
index 6e64373d..cd31f08a 100644
--- a/screens/Author.js
+++ b/screens/Author.js
@@ -24,7 +24,7 @@ export default function Author({ route, navigation }) {
const [authorDetail, setAuthorDetail] = useState(null)
const [possiblyReachedEnd, setPossiblyReachedEnd] = useState(false)
const { deviceType } = useContext(ThemeContext)
- const groupSize = deviceType === DeviceType.PHONE ? 2 : 3
+ const groupSize = deviceType === DeviceType.PHONE ? 2 : 3
useEffect(() => {
setArticlesLoading(true)
@@ -46,7 +46,7 @@ export default function Author({ route, navigation }) {
setArticlesLoading(false)
// FIXME: Add clean-up function.
- // Not all of the asynchronous tasks are being canceled, leadinfg to memory leaks.
+ // Not all of the asynchronous tasks are being canceled, leading to memory leaks.
}, [pageNumber])
diff --git a/screens/Home.js b/screens/Home.js
index c19bf949..c81223cc 100644
--- a/screens/Home.js
+++ b/screens/Home.js
@@ -64,7 +64,7 @@ export default function Home({ navigation }) {
setSeeds(articles => ({
...articles,
[value.slug]: (value.slug in articles && appendItems) ? [...articles[value.slug], ...homeSeeds] : homeSeeds
- }))
+ }))
}
const cultureMembers = _.shuffle(posts.filter(items => items.categories.includes(Sections.THE_GRIND.id) || items.categories.includes(Sections.ARTS_LIFE.id))).slice(0, 4)
@@ -88,6 +88,7 @@ export default function Home({ navigation }) {
// Retrieve second batch.
// If an infrequent section is empty after initial call, retrieve more for those categories.
+ // TODO: Add humor and logical conditions.
RSVP.hash({
posts: Model.posts().perPage(batchSize).page(2),
@@ -111,7 +112,7 @@ export default function Home({ navigation }) {
}, [pageNumber]) // Runs once at the beginning, and anytime pageNumber changes thereafter.
- return layoutLoaded && (
+ return layoutLoaded ? (
@@ -139,7 +140,7 @@ export default function Home({ navigation }) {
{/* */}
{_.chunk(articles.wildcard, groupSize)?.map((group, outerIndex) => (
-
+
{group.map((item, index) => )}
@@ -148,11 +149,20 @@ export default function Home({ navigation }) {
))}
+ ) : (
+
+
+
)
}
const styles = StyleSheet.create({
container: {
flex: 1
+ },
+ loading: {
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
}
})
\ No newline at end of file
diff --git a/screens/Post.js b/screens/Post.js
index 2f4ca642..88abce69 100644
--- a/screens/Post.js
+++ b/screens/Post.js
@@ -1,5 +1,5 @@
import React, { useContext, useEffect, useState } from "react"
-import { ActivityIndicator, Appearance, Dimensions, LayoutAnimation, PixelRatio, Platform, StatusBar, StyleSheet, useColorScheme, View, UIManager } from "react-native"
+import { ActivityIndicator, Appearance, Dimensions, LayoutAnimation, PixelRatio, Platform, StatusBar, StyleSheet, useColorScheme, View, UIManager, Linking } from "react-native"
import { Icon, Text, useTheme } from "@ui-kitten/components"
import { ImageHeaderScrollView, TriggeringView } from "react-native-image-header-scroll-view"
import { Spacing } from "../constants"
@@ -40,6 +40,24 @@ export default function Post({ route, navigation }) {
const headerHeight = useHeaderHeight()
const contentEdgeInset = deviceType === Device.DeviceType.PHONE ? 14 : 56
+ const openArticleIfPresent = (url) => {
+ const pruned = url.slice(-1) === "/" ? url.slice(0, -1) : url
+ const preSlug = pruned.split("/")
+ const slug = (preSlug[preSlug.length - 1])
+
+ // Hopefully this doesn't take too long to load. Might have to preload.
+
+ if (url.match(/stanforddaily.com\/\d{4}\/\d{2}\/\d{2}\/(.*)/)) {
+ Model.posts().slug(slug).embed().then(result => {
+ if (result.length > 0) {
+ navigation.push("Post", { article: result[0], sourceName: "Stanford Daily" })
+ }
+ }).catch(error => console.trace(error))
+ } else {
+ Linking.openURL(url)
+ }
+ }
+
const renderers = {
// Note: Chrome URL protocol causes a crash with the renderer below.
// iframe: IframeRenderer,
@@ -74,8 +92,8 @@ export default function Post({ route, navigation }) {
setCaption(decode(media.caption?.rendered).slice(3, -5))
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
})
-
-
+
+
return () => {
if (colorScheme === "light") {
StatusBar.setBarStyle("dark-content", true)
@@ -115,6 +133,7 @@ export default function Post({ route, navigation }) {
baseStyle={{ fontFamily: "MinionProRegular", fontSize: 20*fontScale, color: theme["text-basic-color"], backgroundColor: theme["background-basic-color-1"] }}
tagsStyles={{ a: { color: theme["color-primary-500"], textDecorationLine: "none" } }} // The font color is slightly off in Dark Mode.
renderers={renderers}
+ renderersProps={{ a: { onPress: (e, href) => openArticleIfPresent(href) } }}
WebView={WebView}
backgroundColor={theme["background-color-basic-2"]}
enableExperimentalMarginCollapsing
diff --git a/yarn.lock b/yarn.lock
index 2dce86a7..ec09762a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1136,13 +1136,6 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-object-assign@^7.10.4":
- version "7.16.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8"
- integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
"@babel/plugin-transform-object-super@^7.0.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"
@@ -3005,11 +2998,6 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
-abs-svg-path@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
- integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78=
-
absolute-path@^0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7"
@@ -3039,6 +3027,16 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
+ajv@^8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
+ integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
anser@^1.4.9:
version "1.4.10"
resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b"
@@ -4535,6 +4533,15 @@ expo-blur@~11.1.0:
resolved "https://registry.yarnpkg.com/expo-blur/-/expo-blur-11.1.0.tgz#21f9f0d28da1c326646c459813c9343b6da5e20f"
integrity sha512-7ClB+fIYoFXaTyY4jAMBmJmgs3Dz0EWNbpgFCC4v/sSxldg5jSbMUXLXUttnRhKRmIzPB2gufcgoOWfNwA3q7g==
+expo-build-properties@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/expo-build-properties/-/expo-build-properties-0.2.0.tgz#604514bb133f6a5d082af35f80ca706446902caa"
+ integrity sha512-9GcZ+lReZf5mjtdu1Vn7anSMMCRzoktiJ9S4DcXEJ6as36QFPsYbpEI3xrH7VrfR6i/pdysCNgYbme+IaeEIaQ==
+ dependencies:
+ "@expo/config-plugins" "~4.1.4"
+ ajv "^8.11.0"
+ semver "^7.3.5"
+
expo-constants@~13.1.0, expo-constants@~13.1.1:
version "13.1.1"
resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-13.1.1.tgz#78c26c760cc63cd5608bc4b51bd159d7339d8054"
@@ -4631,13 +4638,6 @@ expo-linear-gradient@^11.3.0:
resolved "https://registry.yarnpkg.com/expo-linear-gradient/-/expo-linear-gradient-11.3.0.tgz#855f470c9684f5b979c3c1be0ed1fe1943d57158"
integrity sha512-gm0cULqE5cTP39HZHi+eCGgQ2qMcwym92DwSzRpA5nA4Ah5oKksV+PwD7zzo6YJt3X3lgqrTYEqts9VQISCTgw==
-expo-linear-gradient@~10.0.3:
- version "10.0.3"
- resolved "https://registry.yarnpkg.com/expo-linear-gradient/-/expo-linear-gradient-10.0.3.tgz#06ad72e164f5bf36c4afcfc8ccd31138a3a78d6e"
- integrity sha512-zKkBhHvTvDywpb0y5BJDHTbxX5/2C60qW/M8uyZXKIZcTUwY7j/9Kcx0YzoNNglq7p6aQ/DWO7sM8LHr93985Q==
- dependencies:
- expo-modules-core "~0.4.4"
-
expo-manifests@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/expo-manifests/-/expo-manifests-0.3.0.tgz#724e85a4e726cb1ef775f9846c9ecb8d243a17d7"
@@ -4675,14 +4675,6 @@ expo-modules-core@0.9.2, expo-modules-core@~0.9.2:
compare-versions "^3.4.0"
invariant "^2.2.4"
-expo-modules-core@~0.4.4:
- version "0.4.10"
- resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.4.10.tgz#6c7e7e211b3056fc23a462e9faea88cc7653fe9b"
- integrity sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==
- dependencies:
- compare-versions "^3.4.0"
- invariant "^2.2.4"
-
expo-notifications@~0.15.4:
version "0.15.4"
resolved "https://registry.yarnpkg.com/expo-notifications/-/expo-notifications-0.15.4.tgz#e255927a239a1b49bf6dfe3d2d6d3fee308165e2"
@@ -4798,7 +4790,7 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-fast-deep-equal@^3.1.3:
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@@ -6106,6 +6098,11 @@ json-schema-deref-sync@^0.13.0:
traverse "~0.6.6"
valid-url "~1.0.9"
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
json5@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
@@ -6818,11 +6815,6 @@ mkdirp@~0.5.1:
dependencies:
minimist "^1.2.6"
-mockdate@^3.0.2:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-3.0.5.tgz#789be686deb3149e7df2b663d2bc4392bc3284fb"
- integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==
-
moment-timezone@^0.5.33:
version "0.5.33"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c"
@@ -6997,13 +6989,6 @@ normalize-path@^3.0.0:
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-normalize-svg-path@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c"
- integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==
- dependencies:
- svg-arc-to-cubic-bezier "^3.0.0"
-
npm-package-arg@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5"
@@ -7272,11 +7257,6 @@ parse-png@^2.1.0:
dependencies:
pngjs "^3.3.0"
-parse-svg-path@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
- integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes=
-
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -7515,6 +7495,11 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
qrcode-terminal@0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e"
@@ -7692,25 +7677,6 @@ react-native-pager-view@5.4.15:
resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-5.4.15.tgz#075fef5ae4ba6ecc37e49b6c4a24770131a2a3cc"
integrity sha512-5NssD840wFCuOL4B1ZRiRADvt+Vx2Dgify4SmAUqHXCx03yiGPnRWmFjYXyQeK6gq/8VY+gPGE4bTy9ahzBbDw==
-react-native-reanimated@~2.2.0:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.2.4.tgz#36c5d15028b0bd7d479fba5199117ac870c7a532"
- integrity sha512-Nn648MfEEnTCEiWsl1YmfkojiLyV0NMY0EiRdDRbZNfJVfxBuyqhCxI/4Jd7aBi162qpgf8XK2mByYgvF4zLrQ==
- dependencies:
- "@babel/plugin-transform-object-assign" "^7.10.4"
- fbjs "^3.0.0"
- mockdate "^3.0.2"
- string-hash-64 "^1.0.3"
-
-react-native-redash@^16.0.11:
- version "16.2.3"
- resolved "https://registry.yarnpkg.com/react-native-redash/-/react-native-redash-16.2.3.tgz#ee63e100c60f83275116e57d4e8bc79f26349db9"
- integrity sha512-vSjHA6/mBY3IpDYPish3DlG06PKNLkb/b89hw7nsDM3yxAJ7Db+yMnEL3pp2YsoYblDc3s+0+wBRlvxay4X4vQ==
- dependencies:
- abs-svg-path "^0.1.1"
- normalize-svg-path "^1.0.1"
- parse-svg-path "^0.1.2"
-
react-native-render-html@^6.3.3:
version "6.3.3"
resolved "https://registry.yarnpkg.com/react-native-render-html/-/react-native-render-html-6.3.3.tgz#3519ee4a3fb9281f2f44014c1c350dade00a9cd1"
@@ -7739,15 +7705,6 @@ react-native-screens@~3.11.1:
react-freeze "^1.0.0"
warn-once "^0.1.0"
-react-native-skeleton-content@^1.0.24:
- version "1.0.24"
- resolved "https://registry.yarnpkg.com/react-native-skeleton-content/-/react-native-skeleton-content-1.0.24.tgz#28a75519ab8c4604001801fc00b5b57177bdf0ba"
- integrity sha512-fMVWw63tf98q6RXkpZh/RTE9p4jagryZjjyn0SM9mUP2qCX4sYHn9QYLnlOni6UMuScBOoORE/hbBqF65BykPA==
- dependencies:
- expo-linear-gradient "~10.0.3"
- react-native-reanimated "~2.2.0"
- react-native-redash "^16.0.11"
-
react-native-snap-carousel@^3.9.1:
version "3.9.1"
resolved "https://registry.yarnpkg.com/react-native-snap-carousel/-/react-native-snap-carousel-3.9.1.tgz#6fd9bd8839546c2c6043a41d2035afbc6fe0443e"
@@ -8536,11 +8493,6 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
-string-hash-64@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string-hash-64/-/string-hash-64-1.0.3.tgz#0deb56df58678640db5c479ccbbb597aaa0de322"
- integrity sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==
-
string-width@^4.1.0, string-width@^4.2.0:
version "4.2.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
@@ -8711,11 +8663,6 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-svg-arc-to-cubic-bezier@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6"
- integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==
-
tar@^6.0.2, tar@^6.0.5:
version "6.1.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
@@ -9087,6 +9034,13 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
urijs@^1.19.6:
version "1.19.7"
resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.7.tgz#4f594e59113928fea63c00ce688fb395b1168ab9"