Kaynağa Gözat

add app/pages/chargingV3/StatusImage.js

wudebin 6 ay önce
ebeveyn
işleme
c4c4254f74
1 değiştirilmiş dosya ile 168 ekleme ve 0 silme
  1. 168 0
      Strides-SPAPP/app/pages/chargingV3/StatusImage.js

+ 168 - 0
Strides-SPAPP/app/pages/chargingV3/StatusImage.js

@@ -0,0 +1,168 @@
+import React, { useEffect, useRef } from 'react';
+import { Animated, Easing, Image, StyleSheet, Text, View } from 'react-native';
+import utils from '../../utils/utils';
+import TextView from '../../components/TextView';
+
+const size = $vw(35) > 280 ? 280 : $vw(35);
+
+export default StatusImage = ({
+  isLoading=false,
+  isAuthentic=false,
+  isInitial=false,
+  isCharging=false,
+  isStop=false,
+  soc=-1
+}) => {
+  var rotate = useRef(new Animated.Value(0)).current;
+  const spins = () => {
+    Animated.loop(
+      Animated.timing(rotate, {
+        toValue: 1,
+        duration: 5000,
+        easing: Easing.linear,
+        useNativeDriver: true
+      })
+    ).start();
+  }
+  useEffect(() => {
+    if (isLoading) {
+      spins();
+    }
+  }, [rotate]);
+  const spin = rotate.interpolate({
+    inputRange: [0, 1],
+    outputRange: ['0deg', '360deg']
+  })
+  return (
+    <View style={styles.chargingHeader}>
+      <View style={styles.statusView}>
+        { isAuthentic
+        ? <Image
+            style={styles.stepImage}
+            resizeMode="contain"
+            source={require('../../images/charge3/status-auth.png')}/>
+        : (isInitial 
+        ? <Image
+            style={styles.stepImage}
+            resizeMode="contain"
+            source={require('../../images/charge3/status-init.png')}/>
+        : (isCharging
+        ? <Image
+            style={styles.stepImage}
+            resizeMode="contain"
+            source={require('../../images/charge3/status-charge.png')}/>
+        : <Image
+            style={styles.stepImage}
+            resizeMode="contain"
+            source={require('../../images/charge3/status-default.png')}/>
+        ))}
+      </View>
+      { isLoading &&
+        <Animated.View style={[
+          styles.loadingBorder, {
+            transform: [{ 
+              rotate: spin 
+            }]
+          }
+        ]}>
+          { isCharging
+          ? <Image
+              style={styles.loadingImage}
+              resizeMode="contain"
+              source={require('../../images/charge3/anim-charging.png')}/>
+          : <Image
+              style={styles.loadingImage}
+              resizeMode="contain"
+              source={require('../../images/charge3/anim-loading.png')}/>
+          }
+        </Animated.View>
+      }
+      { (isAuthentic || isStop) &&
+        <View style={styles.authBorder}></View>
+      }
+      { isStop &&
+        <View style={styles.centerView}>
+          <Image
+            style={styles.checkedImage}
+            resizeMode="contain"
+            source={require('../../images/charge3/stop-check.png')}/>
+        </View>
+      }
+      { soc >= 0 &&
+        <View style={styles.socView}>
+          <TextView style={styles.socText}>{soc}%</TextView>
+        </View>
+      }
+    </View>
+  );
+}
+
+const styles = StyleSheet.create({
+  chargingHeader: {
+    margin: 16,
+    alignItems: 'center'
+  },
+  statusView: {
+    width: size,
+    height: size,
+    padding: 4,
+    alignItems: 'center',
+    justifyContent: 'center'
+  },
+  stepImage: {
+    width: '100%',
+    height: '100%'
+  },
+  authBorder: {
+    top: 0,
+    width: size,
+    height: size,
+    position: 'absolute',
+    borderWidth: 6,
+    borderRadius: size,
+    borderColor: '#00FF19'
+  },
+  loadingBorder: {
+    top: 0,
+    position: 'absolute',
+    alignItems: 'center',
+    justifyContent: 'center'
+  },
+  loadingImage: {
+    width: size,
+    height: size
+  },
+  centerView: {
+    top: 0,
+    width: size,
+    height: size,
+    position: 'absolute',
+    alignItems: 'center',
+    justifyContent: 'center'
+  },
+  checkedImage: {
+    width: size / 2.3,
+    height: size / 2.3
+  },
+  socView: {
+    width: size,
+    height: size,
+    position: 'absolute',
+    alignItems: 'center',
+    justifyContent: 'center'
+  },
+  socText: {
+    width: 38,
+    height: 38,
+    marginTop: size / -2.5,
+    marginLeft: size / -4,
+    fontSize: 13,
+    fontWeight: 'bold',
+    borderWidth: 2,
+    borderRadius: 38,
+    alignItems: 'center',
+    justifyContent: 'center',
+    borderColor: colorAccent,
+    backgroundColor: colorLight
+  }
+})