diff --git a/android/app/build.gradle b/android/app/build.gradle
index 1e5a0de..5da5bd0 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -78,9 +78,9 @@ import com.android.build.OutputFile
*/
project.ext.vectoricons = [
- iconFontNames: [ 'FontAwesome.ttf' ] // Name of the font files you want to copy
+ iconFontNames: ['FontAwesome.ttf']
]
-
+
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
project.ext.react = [
diff --git a/app/components/InstructionCell.js b/app/components/InstructionCell.js
index 85d16e8..140dfef 100644
--- a/app/components/InstructionCell.js
+++ b/app/components/InstructionCell.js
@@ -25,7 +25,6 @@ const InstructionCell = ({ item }) => {
{body}
-
)
}
@@ -37,9 +36,10 @@ const styles = StyleSheet.create({
width: '100%',
flexDirection: 'row',
alignItems: 'center',
+ marginBottom: 10,
},
timeBgView: {
- width: 65,
+ width: 40,
height: 40,
marginLeft: 30,
backgroundColor: colors.navigationHeader,
diff --git a/app/components/SettingsCell.js b/app/components/SettingsCell.js
index 071e554..dad73fd 100644
--- a/app/components/SettingsCell.js
+++ b/app/components/SettingsCell.js
@@ -10,6 +10,7 @@ const SettingsCell = ({
title,
onCellPress,
onSwitchValueChange,
+ switchValue,
titleNumLines,
iconName,
}) => {
@@ -29,7 +30,7 @@ const SettingsCell = ({
{onCellPress == null ? (
-
+
) : (
)}
diff --git a/app/components/ShiftView.js b/app/components/ShiftView.js
index c3b3a86..be9f194 100644
--- a/app/components/ShiftView.js
+++ b/app/components/ShiftView.js
@@ -27,6 +27,7 @@ const styles = StyleSheet.create({
backgroundColor: colors.navigationHeader,
justifyContent: 'center',
alignItems: 'center',
+ borderRadius: 10,
},
emptyViewStyle: {
height: 35,
diff --git a/app/components/TimerButton.js b/app/components/TimerButton.js
new file mode 100644
index 0000000..bb860a5
--- /dev/null
+++ b/app/components/TimerButton.js
@@ -0,0 +1,112 @@
+import React, { useState, useEffect } from 'react'
+import { View, Text, StyleSheet, Image } from 'react-native'
+import config, { colors, vectorIcons } from '../config'
+import { AnimatedCircularProgress } from 'react-native-circular-progress'
+import { useSelector, useDispatch } from 'react-redux'
+import { addWashTime } from '../state/WashTimeHistory'
+import { selectStoreHistory } from '../state/Settings'
+
+const TimerButton = ({ timerStart, image, text }) => {
+ const dispatch = useDispatch()
+ const isStoreHistory = useSelector(selectStoreHistory)
+ const timerDefault = config.timerDefault
+ const [timer, setCounter] = useState(timerDefault)
+ const [bottomText, setBottomText] = useState(text)
+ const [timerStartNew, setTimerStart] = useState(timerStart)
+
+ const timerCounter = () => setCounter(timer - 1)
+
+ useEffect(() => {
+ if (timerStartNew) {
+ if (timer <= 0) {
+ setBottomText('Well Done')
+ setTimerStart(false)
+
+ if (isStoreHistory) {
+ dispatch(addWashTime({ dateTime: Date.now() }))
+ }
+ return
+ }
+ const id = setInterval(timerCounter, 1000)
+ return () => {
+ clearInterval(id)
+ }
+ }
+ }, [timer])
+
+ const fill = 100 - (timer * 100) / timerDefault
+
+ const { FontAwesome } = vectorIcons
+ const { white, green } = colors
+ const {
+ container,
+ textSeconds,
+ textSecondName,
+ viewStyle,
+ progressStyle,
+ circularView,
+ } = styles
+
+ const renderCircularProgress = () => {
+ return (
+
+ {() => (
+
+ {timer}
+ {bottomText}
+
+ )}
+
+ )
+ }
+
+ const renderCircularView = () => {
+ return (
+
+
+ {bottomText}
+
+ )
+ }
+
+ return (
+
+ {timerStartNew ? renderCircularProgress() : renderCircularView()}
+
+ )
+}
+
+export default TimerButton
+
+const { white, circleBackground } = colors
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ textSeconds: { fontSize: 30, color: white },
+ textSecondName: { color: white, marginTop: 25, fontSize: 18 },
+ viewStyle: { alignItems: 'center', justifyContent: 'center' },
+ progressStyle: {
+ backgroundColor: circleBackground,
+ borderRadius: 100,
+ },
+ imageView: { width: 100, height: 100 },
+ circularView: {
+ height: 190,
+ width: 190,
+ borderRadius: 100,
+ backgroundColor: circleBackground,
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+})
diff --git a/app/components/WashTimeCell.js b/app/components/WashTimeCell.js
index 24ac814..7700733 100644
--- a/app/components/WashTimeCell.js
+++ b/app/components/WashTimeCell.js
@@ -1,6 +1,7 @@
import React from 'react'
import { View, StyleSheet, Text } from 'react-native'
import { colors } from '../config'
+import Divider from './Divider'
import {
timeIn24HrsFormat,
getDayFromDate,
@@ -15,7 +16,6 @@ const WashTimeCell = ({ item }) => {
dayAndDateBgView,
dateView,
dayView,
- sepratorViewStyle,
} = styles
const { dateTime } = item
@@ -30,7 +30,7 @@ const WashTimeCell = ({ item }) => {
{convertDateIntoDateComponent(dateTime)}
-
+
)
}
diff --git a/app/components/index.js b/app/components/index.js
index a3b1110..e570c22 100644
--- a/app/components/index.js
+++ b/app/components/index.js
@@ -1,5 +1,6 @@
-import InstructionCell from './InstructionCell'
+import TimerButton from './TimerButton'
import MedicBleepLogo from './MedicBleepLogo'
import SettingsCell from './SettingsCell'
+import InstructionCell from './InstructionCell'
-export { MedicBleepLogo, SettingsCell, InstructionCell }
+export { MedicBleepLogo, SettingsCell, TimerButton, InstructionCell }
diff --git a/app/config/colors.js b/app/config/colors.js
index bcb5acc..b5ce359 100644
--- a/app/config/colors.js
+++ b/app/config/colors.js
@@ -10,5 +10,5 @@ export default {
dayText: '#4A4A4A',
dateText: '#9b9b9b',
separatorLineGray: '#E5E9EA',
- circleBackground: '#5AC8FA',
+ circleBackground: '#00A1D2',
}
diff --git a/app/config/index.js b/app/config/index.js
index 232c42d..b19130e 100644
--- a/app/config/index.js
+++ b/app/config/index.js
@@ -4,9 +4,11 @@ import production from './production'
import colors from './colors'
import { store, persistor } from './store'
import routes from './routes'
+import vectorIcons from './vectorIcons'
let config = {
colors,
+ timerDefault: 20,
}
if (__DEV__) {
@@ -23,5 +25,5 @@ if (__DEV__) {
}
}
-export { colors, store, persistor, routes }
+export { colors, routes, store, vectorIcons, persistor }
export default config
diff --git a/app/config/vectorIcons.js b/app/config/vectorIcons.js
new file mode 100644
index 0000000..1501bce
--- /dev/null
+++ b/app/config/vectorIcons.js
@@ -0,0 +1,7 @@
+import FontAwesome from 'react-native-vector-icons/FontAwesome'
+
+const vectorIcons = {
+ FontAwesome,
+}
+
+export default vectorIcons
diff --git a/app/navigations/MainNavigation.js b/app/navigations/MainNavigation.js
index 4ec0817..cfbd287 100644
--- a/app/navigations/MainNavigation.js
+++ b/app/navigations/MainNavigation.js
@@ -1,6 +1,6 @@
import { createStackNavigator } from '@react-navigation/stack'
import React from 'react'
-import { Settings, TimerScreen, HomeScreen } from '../screens'
+import { HomeScreen, SettingsScreen, TimerScreen } from '../screens'
import { routes, colors } from '../config'
const { SETTINGS_SCREEN, TIMER_SCREEN, HOME_SCREEN } = routes
@@ -28,7 +28,7 @@ const MainNavigation = () => (
/>
{
+ const { FontAwesome } = vectorIcons
+ const { white } = colors
+ const { settingButtonStyle } = styles
+ const { SETTINGS_SCREEN, HOME_SCREEN } = routes
+ navigation.setOptions({
+ headerRight: () => (
+
+ {
+ navigation.navigate({ name: SETTINGS_SCREEN, key: HOME_SCREEN })
+ }}
+ >
+
+
+
+ ),
+ })
+
const dispatch = useDispatch()
const started = useSelector(selectShiftStarted)
const washTimes = useSelector(getWashTimes)
@@ -54,7 +76,7 @@ export const HomeScreen = ({ navigation }) => {
style={washButtonViewStyle}
onPress={washButtonClicked}
>
-
+
HISTORY
@@ -109,4 +131,5 @@ const styles = StyleSheet.create({
marginTop: 15,
color: colors.white,
},
+ settingButtonStyle: { marginRight: 15 },
})
diff --git a/app/screens/Settings.js b/app/screens/SettingsScreen.js
similarity index 55%
rename from app/screens/Settings.js
rename to app/screens/SettingsScreen.js
index 311ede5..ff11bb0 100644
--- a/app/screens/Settings.js
+++ b/app/screens/SettingsScreen.js
@@ -1,16 +1,28 @@
import React from 'react'
-import { View, StyleSheet, SafeAreaView } from 'react-native'
+import { View, StyleSheet, SafeAreaView, Linking } from 'react-native'
import MedicBleepLogo from '../components/MedicBleepLogo'
import { SettingsCell } from '../components'
import { colors } from '../config'
+import { storeHistory, shiftReminders } from '../state/Settings'
+import { useSelector, useDispatch } from 'react-redux'
+import { selectStoreHistory, selectShiftReminders } from 'app/state/Settings'
const { white } = colors
-const Settings = ({ started }) => {
- const storeHistoryValueChanged = (value) => {}
- const shiftReminderValueChanged = (value) => {}
- const aboutMbCellPressed = () => {}
- const followCellPressed = () => {}
+const medicBleepAboutUsUrl = 'https://www.medicbleep.com/about.html'
+const medicBleepFollowTwitterUrl = 'https://twitter.com/MedicBleep'
+
+const SettingsScreen = ({}) => {
+ const dispatch = useDispatch()
+ const isStoreHistory = useSelector(selectStoreHistory)
+ const isShiftRemindersAllow = useSelector(selectShiftReminders)
+
+ const storeHistoryValueChanged = (value) =>
+ isStoreHistory !== value ? dispatch(storeHistory(value)) : null
+ const shiftReminderValueChanged = (value) =>
+ isShiftRemindersAllow !== value ? dispatch(shiftReminders(value)) : null
+ const aboutMbCellPressed = () => Linking.openURL(medicBleepAboutUsUrl)
+ const followCellPressed = () => Linking.openURL(medicBleepFollowTwitterUrl)
const { container, contentWrapper } = styles
return (
@@ -20,6 +32,7 @@ const Settings = ({ started }) => {
title={'Store History'}
onCellPress={null}
onSwitchValueChange={storeHistoryValueChanged}
+ switchValue={isStoreHistory}
titleNumLines={1}
iconName={null}
/>
@@ -27,6 +40,7 @@ const Settings = ({ started }) => {
title={'Two Hour On Shift Reminders'}
onCellPress={null}
onSwitchValueChange={shiftReminderValueChanged}
+ switchValue={isShiftRemindersAllow}
titleNumLines={2}
iconName={null}
/>
@@ -50,7 +64,7 @@ const Settings = ({ started }) => {
)
}
-export default Settings
+export default SettingsScreen
const styles = StyleSheet.create({
container: { flex: 1, backgroundColor: white },
diff --git a/app/screens/TimerScreen.js b/app/screens/TimerScreen.js
index e3deaf5..c2b5d60 100644
--- a/app/screens/TimerScreen.js
+++ b/app/screens/TimerScreen.js
@@ -1,4 +1,7 @@
import React from 'react'
+import { TimerButton } from '../components'
+import { colors } from '../config'
+
import { View, SafeAreaView, StyleSheet, FlatList } from 'react-native'
import { InstructionCell } from '../components'
@@ -43,6 +46,8 @@ const TimerScreen = ({ navigation }) => {
return (
+
+
{
)
}
-
export default TimerScreen
+const { white } = colors
const styles = StyleSheet.create({
container: {
flex: 1,
+ backgroundColor: white,
},
flatListStyle: {
flex: 1,
diff --git a/app/screens/index.js b/app/screens/index.js
index b1e78a9..e179910 100644
--- a/app/screens/index.js
+++ b/app/screens/index.js
@@ -1,5 +1,5 @@
import TimerScreen from './TimerScreen'
import HomeScreen from './HomeScreen'
-import Settings from './Settings'
+import SettingsScreen from './SettingsScreen'
-export { HomeScreen, Settings, TimerScreen }
+export { HomeScreen, SettingsScreen, TimerScreen }
diff --git a/app/state/Settings.js b/app/state/Settings.js
new file mode 100644
index 0000000..d8a90ad
--- /dev/null
+++ b/app/state/Settings.js
@@ -0,0 +1,37 @@
+const initialState = {
+ isToStoreHistory: true,
+ isToAllowShiftReminders: true,
+}
+
+// Types
+export const STORE_HISTORY = 'store_history'
+export const SHIFT_REMINDERS = 'shift_reminders'
+
+// Reducer
+export default (state = initialState, action = {}) => {
+ switch (action.type) {
+ case STORE_HISTORY:
+ return { ...state, isToStoreHistory: action.payload }
+ case SHIFT_REMINDERS:
+ return { ...state, isToAllowShiftReminders: action.payload }
+ default:
+ return state
+ }
+}
+
+// Action creators
+export const storeHistory = (isStoreHistory) => ({
+ type: STORE_HISTORY,
+ payload: isStoreHistory,
+})
+
+export const shiftReminders = (isShiftRemindersAllowed) => ({
+ type: SHIFT_REMINDERS,
+ payload: isShiftRemindersAllowed,
+})
+
+// Selectors
+export const selectStoreHistory = (state) =>
+ state.settingsReducer.isToStoreHistory
+export const selectShiftReminders = (state) =>
+ state.settingsReducer.isToAllowShiftReminders
diff --git a/app/state/index.js b/app/state/index.js
index 6dee145..1f815a9 100644
--- a/app/state/index.js
+++ b/app/state/index.js
@@ -1,9 +1,11 @@
import { combineReducers } from 'redux'
import Shift from './Shift'
import WashTimeHistory from './WashTimeHistory'
+import Settings from './Settings'
const rootReducer = combineReducers({
shiftReducer: Shift,
washTimeHistory: WashTimeHistory,
+ settingsReducer: Settings,
})
export default rootReducer
diff --git a/ios/HandWashTimer.xcodeproj/project.pbxproj b/ios/HandWashTimer.xcodeproj/project.pbxproj
index 92d21cf..934a012 100644
--- a/ios/HandWashTimer.xcodeproj/project.pbxproj
+++ b/ios/HandWashTimer.xcodeproj/project.pbxproj
@@ -64,6 +64,7 @@
57C09C416E0FF2A08CB7AC92 /* libPods-HandWashTimer-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HandWashTimer-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
922260DECAA65BA22DDACD82 /* Pods-HandWashTimer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HandWashTimer.debug.xcconfig"; path = "Target Support Files/Pods-HandWashTimer/Pods-HandWashTimer.debug.xcconfig"; sourceTree = ""; };
C41B589A18BEDE76BEABFBCB /* Pods-HandWashTimer-HandWashTimerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HandWashTimer-HandWashTimerTests.release.xcconfig"; path = "Target Support Files/Pods-HandWashTimer-HandWashTimerTests/Pods-HandWashTimer-HandWashTimerTests.release.xcconfig"; sourceTree = ""; };
+ E4AA7778245C36E1006AB0F2 /* HandWashTimer.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = HandWashTimer.entitlements; path = HandWashTimer/HandWashTimer.entitlements; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F3783A3EA9B39535FE1B8BB3 /* libPods-HandWashTimer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HandWashTimer.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -125,6 +126,7 @@
13B07FAE1A68108700A75B9A /* HandWashTimer */ = {
isa = PBXGroup;
children = (
+ E4AA7778245C36E1006AB0F2 /* HandWashTimer.entitlements */,
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
@@ -165,6 +167,7 @@
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
CC978C4B58B4BDE357267E06 /* Pods */,
+ C0E11174777C47A7812291F7 /* Resources */,
);
indentWidth = 2;
sourceTree = "";
@@ -197,6 +200,14 @@
path = Pods;
sourceTree = "";
};
+ C0E11174777C47A7812291F7 /* Resources */ = {
+ isa = "PBXGroup";
+ children = (
+ );
+ name = Resources;
+ sourceTree = "";
+ path = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -293,7 +304,16 @@
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
+ DevelopmentTeam = 3G3Z8YL4CF;
LastSwiftMigration = 1120;
+ SystemCapabilities = {
+ com.apple.BackgroundModes = {
+ enabled = 0;
+ };
+ com.apple.Push = {
+ enabled = 0;
+ };
+ };
};
2D02E47A1E0B4A5D006451C7 = {
CreatedOnToolsVersion = 8.2.1;
@@ -552,6 +572,54 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
+ CB3F8E685B769FA20E94370F /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-HandWashTimer/Pods-HandWashTimer-resources.sh",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HandWashTimer/Pods-HandWashTimer-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
DF228B8E9BFEB12E7C8E7828 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -727,6 +795,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3G3Z8YL4CF;
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
@@ -754,6 +823,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 3G3Z8YL4CF;
INFOPLIST_FILE = HandWashTimer/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
diff --git a/ios/HandWashTimer/AppDelegate.m b/ios/HandWashTimer/AppDelegate.m
index 94b0575..866f806 100644
--- a/ios/HandWashTimer/AppDelegate.m
+++ b/ios/HandWashTimer/AppDelegate.m
@@ -3,6 +3,7 @@
#import
#import
#import
+#import
#if DEBUG
#import
@@ -55,4 +56,11 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
#endif
}
+- (BOOL)application:(UIApplication *)application
+ openURL:(NSURL *)url
+ options:(NSDictionary *)options
+{
+ return [RCTLinkingManager application:application openURL:url options:options];
+}
+
@end
diff --git a/ios/HandWashTimer/HandWashTimer.entitlements b/ios/HandWashTimer/HandWashTimer.entitlements
new file mode 100644
index 0000000..0c67376
--- /dev/null
+++ b/ios/HandWashTimer/HandWashTimer.entitlements
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/ios/HandWashTimer/Info.plist b/ios/HandWashTimer/Info.plist
index 01f31f8..91fd6a1 100644
--- a/ios/HandWashTimer/Info.plist
+++ b/ios/HandWashTimer/Info.plist
@@ -2,60 +2,60 @@
- CFBundleDevelopmentRegion
- en
- CFBundleDisplayName
- HandWashTimer
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
- NSExceptionDomains
-
- localhost
-
- NSExceptionAllowsInsecureHTTPLoads
-
-
-
-
- NSLocationWhenInUseUsageDescription
-
- UILaunchStoryboardName
- LaunchScreen
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIAppFonts
-
- FontAwesome.ttf
-
- UIViewControllerBasedStatusBarAppearance
-
+CFBundleDevelopmentRegion
+en
+CFBundleDisplayName
+HandWashTimer
+CFBundleExecutable
+$(EXECUTABLE_NAME)
+CFBundleIdentifier
+$(PRODUCT_BUNDLE_IDENTIFIER)
+CFBundleInfoDictionaryVersion
+6.0
+CFBundleName
+$(PRODUCT_NAME)
+CFBundlePackageType
+APPL
+CFBundleShortVersionString
+1.0
+CFBundleSignature
+????
+CFBundleVersion
+1
+LSRequiresIPhoneOS
+
+NSAppTransportSecurity
+
+NSAllowsArbitraryLoads
+
+NSExceptionDomains
+
+localhost
+
+NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+NSLocationWhenInUseUsageDescription
+
+UILaunchStoryboardName
+LaunchScreen
+UIRequiredDeviceCapabilities
+
+armv7
+
+UISupportedInterfaceOrientations
+
+UIInterfaceOrientationPortrait
+UIInterfaceOrientationLandscapeLeft
+UIInterfaceOrientationLandscapeRight
+
+UIAppFonts
+
+FontAwesome.ttf
+
+UIViewControllerBasedStatusBarAppearance
+
-
+
\ No newline at end of file
diff --git a/ios/Podfile b/ios/Podfile
index 4d12347..9fc90f0 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -78,6 +78,7 @@ target 'HandWashTimer' do
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'
+
target 'HandWashTimerTests' do
inherit! :complete
diff --git a/package.json b/package.json
index 61e5518..d0bcec1 100644
--- a/package.json
+++ b/package.json
@@ -19,10 +19,12 @@
"moment": "^2.24.0",
"react": "16.11.0",
"react-native": "0.62.2",
+ "react-native-circular-progress": "^1.3.6",
"react-native-gesture-handler": "^1.6.1",
"react-native-reanimated": "^1.8.0",
"react-native-safe-area-context": "^0.7.3",
"react-native-screens": "^2.7.0",
+ "react-native-svg": "^12.1.0",
"react-native-vector-icons": "^6.6.0",
"react-redux": "^7.2.0",
"reactotron-react-native": "^5.0.0",
diff --git a/storybook/index.js b/storybook/index.js
index 64b075a..73f983a 100644
--- a/storybook/index.js
+++ b/storybook/index.js
@@ -8,22 +8,13 @@ export const item = {
dateTime: Date.now(),
}
-storiesOf('WashTimeCell', module).add('Story of WashTimeCell', () => (
+storiesOf('WashTimeCell', module).add('WashTime', () => (
// eslint-disable-next-line react/react-in-jsx-scope
))
-// import stories
-// configure(() => {
-// require('./stories')
-// }, module)
-
// Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters
// To find allowed options for getStorybookUI
const StorybookUIRoot = getStorybookUI({})
-// If you are using React Native vanilla and after installation you don't see your app name here, write it manually.
-// If you use Expo you can safely remove this line.
-// AppRegistry.registerComponent('HandWashTimer', () => StorybookUIRoot)
-
export default StorybookUIRoot