diff --git a/android/app/build.gradle b/android/app/build.gradle index 9c525a648e76fe606b309c52018f154ace22949e..d82743d38578819bd113144a125954cc2af563af 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -151,6 +151,7 @@ android { dependencies { compile project(':nodejs-mobile-react-native') compile project(':react-native-restart') + compile project(':react-native-svg') compile project(':react-native-push-notification') compile project(':react-native-vector-icons') compile project(':react-native-fs') diff --git a/android/app/src/main/java/com/drip/MainApplication.java b/android/app/src/main/java/com/drip/MainApplication.java index dc83fe74950ab011cd8191124c54ee2af646c020..bbf0a07eea965d287089c4ff9dd845638b16e310 100644 --- a/android/app/src/main/java/com/drip/MainApplication.java +++ b/android/app/src/main/java/com/drip/MainApplication.java @@ -5,6 +5,7 @@ import android.app.Application; import com.facebook.react.ReactApplication; import com.janeasystems.rn_nodejs_mobile.RNNodeJsMobilePackage; import com.avishayil.rnrestart.ReactNativeRestartPackage; +import com.horcrux.svg.SvgPackage; import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage; import com.oblador.vectoricons.VectorIconsPackage; import com.rnfs.RNFSPackage; @@ -34,6 +35,7 @@ public class MainApplication extends Application implements ReactApplication, Sh new MainReactPackage(), new RNNodeJsMobilePackage(), new ReactNativeRestartPackage(), + new SvgPackage(), new ReactNativePushNotificationPackage(), new VectorIconsPackage(), new RNFSPackage(), diff --git a/android/settings.gradle b/android/settings.gradle index 327fbe15d242706c1685f18d7b8f6264eb10f452..05a2c6974b150a9dc97420088d7ed18b9a595004 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -3,6 +3,8 @@ include ':nodejs-mobile-react-native' project(':nodejs-mobile-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/nodejs-mobile-react-native/android') include ':react-native-restart' project(':react-native-restart').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-restart/android') +include ':react-native-svg' +project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') include ':react-native-push-notification' project(':react-native-push-notification').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-push-notification/android') include ':react-native-vector-icons' diff --git a/components/chart/chart.js b/components/chart/chart.js index ddd8d007b890ebd6c9cb6cae9e01ccf0d174d241..4ee6dd6aa82d5fb98f6e04281abac4b592c67f67 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -33,7 +33,7 @@ export default class CycleChart extends Component { const height = nativeEvent.layout.height this.setState({ chartHeight: height }) this.reCalculateChartInfo = () => { - this.setState({ columns: this.makeColumnInfo(nfpLines(height)) }) + this.setState({ columns: this.makeColumnInfo(nfpLines()) }) } this.cycleDaysSortedByDate.addListener(this.reCalculateChartInfo) @@ -62,6 +62,7 @@ export default class CycleChart extends Component { jsDate.getDate() ).toString() }) + const chartSymptoms = [ 'bleeding', 'temperature', @@ -103,8 +104,8 @@ export default class CycleChart extends Component { return { dateString, y: temp ? normalizeToScale(temp, columnHeight) : null, - symptoms, - ...getFhmAndLtlInfo(dateString, temp) + ...symptoms, + ...getFhmAndLtlInfo(dateString, temp, columnHeight) } }) diff --git a/components/chart/day-column.js b/components/chart/day-column.js index e541ab004426a230843ad1a920a40002cb039227..0e64d88e4d9e2c6d9ffae2b901cf8e472fc21c29 100644 --- a/components/chart/day-column.js +++ b/components/chart/day-column.js @@ -2,6 +2,7 @@ import React, { Component } from 'react' import { Text, View, TouchableOpacity } from 'react-native' +import Svg,{ G, Rect, Line } from 'react-native-svg' import Icon from 'react-native-vector-icons/Entypo' import styles from './styles' import config from '../../config' @@ -30,7 +31,6 @@ export default class DayColumn extends Component { dateString, y, temperatureExclude, - symptoms, drawFhmLine, drawLtlAt, rightY, @@ -47,16 +47,31 @@ export default class DayColumn extends Component { const columnElements = [] if(drawLtlAt) { - const ltlLine = (<View - position = 'absolute' - width={'100%'} - top={drawLtlAt} + const ltlLine = (<Line + x1={0} + y1={drawLtlAt} + x2={config.columnWidth} + y2={drawLtlAt} {...styles.nfpLine} key='ltl' />) columnElements.push(ltlLine) } + if (drawFhmLine) { + const x = styles.nfpLine.strokeWidth / 2 + const fhmLine = (<Line + x1={x} + y1={x} + x2={x} + y2={columnHeight} + {...styles.nfpLine} + key='fhm' + />) + columnElements.push(fhmLine) + } + + if (y) { columnElements.push( <DotAndLine @@ -83,64 +98,53 @@ export default class DayColumn extends Component { </Text> ) - // we merge the colors here instead of from the stylesheet because of a RN - // bug that doesn't apply borderLeftColor otherwise - const potentialCustomStyle = { - height: columnHeight, - borderLeftColor: 'grey', - } - - if (drawFhmLine) { - potentialCustomStyle.borderLeftColor = styles.nfpLine.borderColor - potentialCustomStyle.borderLeftWidth = 3 - } - const column = React.createElement( - TouchableOpacity, - { - style: [styles.column.rect, potentialCustomStyle], - key: this.props.index.toString(), - onPress: () => { - this.passDateToDayView(dateString) - }, - activeOpacity: 1 - }, - columnElements + const column = ( + <G> + <Rect + height={chartHeight} + {...styles.column.rect} + /> + { columnElements } + </G> ) return ( - <View> + <TouchableOpacity + onPress={() => this.passDateToDayView(dateString)} + activeOpacity={1} + > <View height={symptomHeight}> <View style={styles.symptomRow}> - {typeof symptoms.bleeding === 'number' && + {typeof this.props.bleeding === 'number' && <Icon name='drop' size={12} - color={styles.bleedingIconShades[symptoms.bleeding]} + color={styles.bleedingIconShades[this.props.bleeding]} key='bleeding' /> } </View> <View style={styles.symptomRow}> - {typeof symptoms.mucus === 'number' && + {typeof this.props.mucus === 'number' && <View {...styles.mucusIcon} - backgroundColor={styles.mucusIconShades[symptoms.mucus]} + backgroundColor={styles.mucusIconShades[this.props.mucus]} key='mucus' /> } </View> <View style={styles.symptomRow}> - {typeof symptoms.cervix === 'number' && + {typeof this.props.cervix === 'number' && <View {...styles.mucusIcon} // cervix is sum of openess and firmness - fertile only when closed and hard (=0) - backgroundColor={symptoms.cervix > 0 ? 'blue' : 'green'} + backgroundColor={this.props.cervix > 0 ? 'blue' : 'green'} key='cervix' /> } </View> <View style={styles.symptomRow}> - {typeof symptoms.sex === 'number' && + {typeof this.props.sex === 'number' && <View {...styles.mucusIcon} backgroundColor='orange' @@ -149,7 +153,7 @@ export default class DayColumn extends Component { } </View> <View style={styles.symptomRow}> - {typeof symptoms.desire === 'number' && + {typeof this.props.desire === 'number' && <View {...styles.mucusIcon} backgroundColor='red' @@ -158,7 +162,7 @@ export default class DayColumn extends Component { } </View> <View style={styles.symptomRow}> - {symptoms.pain && + {this.props.pain && <View {...styles.mucusIcon} backgroundColor='blue' @@ -167,7 +171,7 @@ export default class DayColumn extends Component { } </View> <View style={styles.symptomRow}> - {symptoms.note && + {this.props.note && <View {...styles.mucusIcon} backgroundColor='green' @@ -176,13 +180,16 @@ export default class DayColumn extends Component { } </View> </View> - {column} + + <Svg width={config.columnWidth} height={columnHeight}> + {column} + </Svg> <View style={{height: xAxisHeight}}> {cycleDayLabel} {dateLabel} </View> - </View> + </TouchableOpacity> ) } } diff --git a/components/chart/dot-and-line.js b/components/chart/dot-and-line.js index 9d6daed3004eea796a9c57dfa0ca7489fb34531e..4d49008fcc57ab030969168f947438318b833eae 100644 --- a/components/chart/dot-and-line.js +++ b/components/chart/dot-and-line.js @@ -1,5 +1,6 @@ import React, { Component } from 'react' -import { View } from 'react-native' +import { Circle, Line } from 'react-native-svg' + import styles from './styles' import config from '../../config' @@ -17,21 +18,20 @@ export default class DotAndLine extends Component { if (this.props.leftY) { const middleY = ((this.props.leftY - y) / 2) + y const excludedLine = this.props.leftTemperatureExclude || exclude - lineToLeft = makeLine(middleY, y, 'left', excludedLine) + lineToLeft = makeLine(y, middleY, 0, excludedLine) } if (this.props.rightY) { const middleY = ((y - this.props.rightY) / 2) + this.props.rightY const excludedLine = this.props.rightTemperatureExclude || exclude - lineToRight = makeLine(y, middleY, 'right', excludedLine) + lineToRight = makeLine(y, middleY, config.columnWidth, excludedLine) } const dotStyle = exclude ? styles.curveDotsExcluded : styles.curveDots const dot = ( - <View - position='absolute' - top={y - (dotStyle.height / 2)} - left={config.columnMiddle - (dotStyle.width / 2)} - style={dotStyle} + <Circle + cx={config.columnMiddle} + cy={y} + {...dotStyle} key='dot' /> ) @@ -39,33 +39,15 @@ export default class DotAndLine extends Component { } } -function makeLine(leftY, rightY, direction, excludeLine) { - const colWidth = config.columnWidth - const heightDiff = -(leftY - rightY) - const angle = Math.atan2(heightDiff, colWidth / 2) +function makeLine(currY, middleY, x, excludeLine) { const lineStyle = excludeLine ? styles.curveExcluded : styles.curve - // hypotenuse, we add 3px for good measure, because otherwise the lines - // don't quite touch at the day border - const h = (colWidth / 2) / Math.cos(angle) + 10 - // the rotation by default rotates from the middle of the line, - // but we want the transform origin to be at its beginning - // react native doesn't have transformOrigin, so we do this manually - // if it's the right line, we put the pivot at 3/4 of the column - // if it's to the left, at 1/4 - const pivot = direction === 'right' ? colWidth / 4 : -(colWidth / 4) - const projectedX = -(h - colWidth) / 2 + pivot - return (<View - width={h} - position='absolute' - top={((leftY + rightY) / 2) - lineStyle.borderWidth / 2} - left={projectedX} - style={{ - transform: [ - { rotateZ: `${angle}rad` } - ], - }} + return <Line + x1={config.columnMiddle} + y1={currY} + x2={x} + y2={middleY} {...lineStyle} - key ={direction} - />) + key={x.toString()} + /> } \ No newline at end of file diff --git a/components/chart/nfp-lines.js b/components/chart/nfp-lines.js index ded95e8197e1e28cba34a8fa05b3383a1a2412eb..51842d577ca8928b07e5ff941a1e8552db00786a 100644 --- a/components/chart/nfp-lines.js +++ b/components/chart/nfp-lines.js @@ -1,7 +1,7 @@ import { getCycleStatusForDay } from '../../lib/sympto-adapter' import { normalizeToScale } from './y-axis' -export default function (chartHeight) { +export default function () { const cycle = { status: null } @@ -49,7 +49,7 @@ export default function (chartHeight) { ) } - return function(dateString, temperature) { + return function(dateString, temperature, columnHeight) { const ret = { drawLtlAt: null, drawFhmLine: false @@ -71,7 +71,7 @@ export default function (chartHeight) { dateIsInPeriOrPostPhase(dateString) && isInTempMeasuringPhase(temperature, dateString) ) { - ret.drawLtlAt = normalizeToScale(tempShift.ltl, chartHeight) + ret.drawLtlAt = normalizeToScale(tempShift.ltl, columnHeight) } } diff --git a/components/chart/styles.js b/components/chart/styles.js index 56cede6454ad4da3966ba475d27f7c72315983d1..318fd54b4b577e1dc375a32ec32f4a175bd6e981 100644 --- a/components/chart/styles.js +++ b/components/chart/styles.js @@ -3,32 +3,28 @@ import {primaryColor, shadesOfRed} from '../../styles/index' const colorTemperature = '#765285' const colorTemperatureLight = '#a67fb5' -const dotWidth = 10 -const lineWidth = 2 +const dotRadius = 5 +const lineWidth = 1.5 const colorLtl = '#feb47b' +const gridColor = 'lightgrey' +const gridLineWidth = 0.5 const styles = { curve: { - borderStyle: 'solid', - borderColor: colorTemperature, - borderWidth: lineWidth, + stroke: colorTemperature, + strokeWidth: lineWidth, }, curveExcluded: { - borderColor: colorTemperatureLight, - borderWidth: lineWidth, - borderStyle: 'dotted' + stroke: colorTemperatureLight, + strokeWidth: lineWidth }, curveDots: { - backgroundColor: colorTemperature, - width: dotWidth, - height: dotWidth, - borderRadius: 50 + fill: colorTemperature, + r: dotRadius }, curveDotsExcluded: { - backgroundColor: colorTemperatureLight, - width: dotWidth, - height: dotWidth, - borderRadius: 50 + fill: colorTemperatureLight, + r: dotRadius }, column: { label: { @@ -44,9 +40,12 @@ const styles = { } }, rect: { + x:'0', + y:'0', width: config.columnWidth, - borderStyle: 'solid', - borderLeftWidth: 0.5, + stroke: gridColor, + strokeWidth: gridLineWidth, + fill: 'transparent' } }, bleedingIcon: { @@ -83,16 +82,15 @@ const styles = { }, horizontalGrid: { position:'absolute', - borderColor: 'lightgrey', - borderWidth: 0.5, + borderColor: gridColor, + borderWidth: gridLineWidth, width: '100%', borderStyle: 'solid', left: config.columnWidth }, nfpLine: { - borderColor: colorLtl, - borderWidth: lineWidth, - borderStyle: 'solid' + stroke: colorLtl, + strokeWidth: lineWidth, }, symptomRow: { alignItems: 'center', diff --git a/ios/drip.xcodeproj/project.pbxproj b/ios/drip.xcodeproj/project.pbxproj index 34660c7692480809a78b319432f97ebd74bd4583..c6a9665d4c43aa6826e3bbf31f5fc17bad00de8a 100644 --- a/ios/drip.xcodeproj/project.pbxproj +++ b/ios/drip.xcodeproj/project.pbxproj @@ -64,6 +64,8 @@ 8EA186B6112C41D1B206762D /* NodeMobile.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C225FC4966694B9FBD32E946 /* NodeMobile.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E4584E55EEC24302A3E84A23 /* nodejs-project in Resources */ = {isa = PBXBuildFile; fileRef = 6466AE2461BE4FA88B8372F0 /* nodejs-project */; }; A16B351C3F3644CF95F104D2 /* builtin_modules in Resources */ = {isa = PBXBuildFile; fileRef = 36F1B55D0DEE47AA9AF4BBDD /* builtin_modules */; }; + 45794BEC42E34672A759220F /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 93C745A8EE95400C96FD5CF7 /* libRNSVG.a */; }; + 3E63FB3C405F4AF39969C7E3 /* libRNSVG-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AD4FC2FD95A84EFCBB59195F /* libRNSVG-tvOS.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -402,6 +404,9 @@ C225FC4966694B9FBD32E946 /* NodeMobile.framework */ = {isa = PBXFileReference; name = "NodeMobile.framework"; path = "../node_modules/nodejs-mobile-react-native/ios/NodeMobile.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; }; 6466AE2461BE4FA88B8372F0 /* nodejs-project */ = {isa = PBXFileReference; name = "nodejs-project"; path = "../nodejs-assets/nodejs-project"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; 36F1B55D0DEE47AA9AF4BBDD /* builtin_modules */ = {isa = PBXFileReference; name = "builtin_modules"; path = "../node_modules/nodejs-mobile-react-native/install/resources/nodejs-modules/builtin_modules"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + DEB488BF9A9642508320FB42 /* RNSVG.xcodeproj */ = {isa = PBXFileReference; name = "RNSVG.xcodeproj"; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; + 93C745A8EE95400C96FD5CF7 /* libRNSVG.a */ = {isa = PBXFileReference; name = "libRNSVG.a"; path = "libRNSVG.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + AD4FC2FD95A84EFCBB59195F /* libRNSVG-tvOS.a */ = {isa = PBXFileReference; name = "libRNSVG-tvOS.a"; path = "libRNSVG-tvOS.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -440,6 +445,7 @@ 72DA6B4241504DB096AFAD40 /* libRCTRestart.a in Frameworks */, E09F3B05A4F84E9883101CC7 /* libRNNodeJsMobile.a in Frameworks */, E43EF009AC8C4698AB322190 /* NodeMobile.framework in Frameworks */, + 45794BEC42E34672A759220F /* libRNSVG.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -456,6 +462,7 @@ 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, 934282049FA3497D9062CEC1 /* libRNSVG-tvOS.a in Frameworks */, + 3E63FB3C405F4AF39969C7E3 /* libRNSVG-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -637,6 +644,7 @@ 49089E09BFCF4F3DB209B6E9 /* RNFS.xcodeproj */, 50DBC4BCDDF74A10AEDC99D5 /* RCTRestart.xcodeproj */, 65F706FAFA1444AE9937D472 /* RNNodeJsMobile.xcodeproj */, + DEB488BF9A9642508320FB42 /* RNSVG.xcodeproj */, ); name = Libraries; sourceTree = "<group>"; @@ -1482,6 +1490,7 @@ fi "$(inherited)", "\"../node_modules/nodejs-mobile-react-native/ios\"", "\"../node_modules/nodejs-mobile-react-native/ios\"", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); ENABLE_BITCODE = NO; }; @@ -1523,6 +1532,7 @@ fi "$(inherited)", "\"../node_modules/nodejs-mobile-react-native/ios\"", "\"../node_modules/nodejs-mobile-react-native/ios\"", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); ENABLE_BITCODE = NO; }; @@ -1552,6 +1562,7 @@ fi "$(SRCROOT)/../node_modules/react-native-fs/**", "$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**", "$(SRCROOT)/../node_modules/nodejs-mobile-react-native/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -1584,6 +1595,7 @@ fi "$(SRCROOT)/../node_modules/react-native-fs/**", "$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**", "$(SRCROOT)/../node_modules/nodejs-mobile-react-native/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -1638,6 +1650,7 @@ fi "$(inherited)", "\"../node_modules/nodejs-mobile-react-native/ios\"", "\"../node_modules/nodejs-mobile-react-native/ios\"", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); ENABLE_BITCODE = NO; }; @@ -1688,6 +1701,7 @@ fi "$(inherited)", "\"../node_modules/nodejs-mobile-react-native/ios\"", "\"../node_modules/nodejs-mobile-react-native/ios\"", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); ENABLE_BITCODE = NO; }; @@ -1732,6 +1746,7 @@ fi "$(SRCROOT)/../node_modules/react-native-fs/**", "$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**", "$(SRCROOT)/../node_modules/nodejs-mobile-react-native/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -1781,6 +1796,7 @@ fi "$(SRCROOT)/../node_modules/react-native-fs/**", "$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**", "$(SRCROOT)/../node_modules/nodejs-mobile-react-native/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", ); FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/package-lock.json b/package-lock.json index 26216ecf09f86ac6edbd8417ac9505f2c1acebe1..fa9d4d50b80d2dac7784168cf79db918d44fd1ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2566,6 +2566,15 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", + "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", @@ -2579,6 +2588,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -6650,6 +6668,16 @@ "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-1.1.0.tgz", "integrity": "sha512-uQXo+HzZGUo9VlfgfWwGa9vLrY9OBQOFAsxhH/e3GWAlCxrGGjXNu/La+aJzMJdhoHzzn1+NRWDp1LWvlxJHew==" }, + "react-native-svg": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-7.0.2.tgz", + "integrity": "sha512-vDHePF9sSPp3s+AmAkk4HBvgWHdlaH5ns1mCAcrPqTiyF1QsApAtp3/3AHh8G8o57F2eJjEQ7LrRFNYyQPUBEw==", + "requires": { + "color": "^2.0.1", + "lodash": "^4.16.6", + "pegjs": "^0.10.0" + } + }, "react-native-vector-icons": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-5.0.0.tgz", @@ -7577,6 +7605,21 @@ } } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", diff --git a/package.json b/package.json index 035ca5137b8034346540afcb8152588334617be1..0fff50da8464f0cba7a30d451fbfe8b4e9dc3f60 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "react-native-push-notification": "^3.1.1", "react-native-restart": "0.0.7", "react-native-share": "^1.1.0", + "react-native-svg": "^7.0.2", "react-native-vector-icons": "^5.0.0", "realm": "^2.7.1" },