Nouveau git, tout nettoyé. ancien git : https://codefirst.iut.uca.fr/git/R-Dash/R-Dash_APP
@ -0,0 +1,685 @@
|
|||||||
|
# Created by https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,reactnative,yarn
|
||||||
|
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,visualstudiocode,reactnative,yarn
|
||||||
|
|
||||||
|
### ReactNative ###
|
||||||
|
# React Native Stack Base
|
||||||
|
|
||||||
|
.expo
|
||||||
|
__generated__
|
||||||
|
|
||||||
|
### ReactNative.Xcode Stack ###
|
||||||
|
## User settings
|
||||||
|
xcuserdata/
|
||||||
|
|
||||||
|
## Xcode 8 and earlier
|
||||||
|
*.xcscmblueprint
|
||||||
|
*.xccheckout
|
||||||
|
|
||||||
|
### ReactNative.Gradle Stack ###
|
||||||
|
.gradle
|
||||||
|
**/build/
|
||||||
|
!src/**/build/
|
||||||
|
|
||||||
|
# Ignore Gradle GUI config
|
||||||
|
gradle-app.setting
|
||||||
|
|
||||||
|
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
|
||||||
|
!gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Avoid ignore Gradle wrappper properties
|
||||||
|
!gradle-wrapper.properties
|
||||||
|
|
||||||
|
# Cache of project
|
||||||
|
.gradletasknamecache
|
||||||
|
|
||||||
|
# Eclipse Gradle plugin generated files
|
||||||
|
# Eclipse Core
|
||||||
|
.project
|
||||||
|
# JDT-specific (Eclipse Java Development Tools)
|
||||||
|
.classpath
|
||||||
|
|
||||||
|
### ReactNative.macOS Stack ###
|
||||||
|
# General
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Icon must end with two \r
|
||||||
|
Icon
|
||||||
|
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
|
|
||||||
|
### ReactNative.Linux Stack ###
|
||||||
|
*~
|
||||||
|
|
||||||
|
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||||
|
.fuse_hidden*
|
||||||
|
|
||||||
|
# KDE directory preferences
|
||||||
|
.directory
|
||||||
|
|
||||||
|
# Linux trash folder which might appear on any partition or disk
|
||||||
|
.Trash-*
|
||||||
|
|
||||||
|
# .nfs files are created when an open file is removed but is still being accessed
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
### ReactNative.Node Stack ###
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
web_modules/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional stylelint cache
|
||||||
|
.stylelintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variable files
|
||||||
|
.env
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
.env.local
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# vuepress v2.x temp and cache directory
|
||||||
|
.temp
|
||||||
|
|
||||||
|
# Docusaurus cache and generated files
|
||||||
|
.docusaurus
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# yarn v2
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
||||||
|
|
||||||
|
### ReactNative.Buck Stack ###
|
||||||
|
buck-out/
|
||||||
|
.buckconfig.local
|
||||||
|
.buckd/
|
||||||
|
.buckversion
|
||||||
|
.fakebuckversion
|
||||||
|
|
||||||
|
### ReactNative.Android Stack ###
|
||||||
|
# Gradle files
|
||||||
|
.gradle/
|
||||||
|
build/
|
||||||
|
|
||||||
|
# Local configuration file (sdk path, etc)
|
||||||
|
local.properties
|
||||||
|
|
||||||
|
# Log/OS Files
|
||||||
|
|
||||||
|
# Android Studio generated files and folders
|
||||||
|
captures/
|
||||||
|
.externalNativeBuild/
|
||||||
|
.cxx/
|
||||||
|
*.apk
|
||||||
|
output.json
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
*.iml
|
||||||
|
.idea/
|
||||||
|
misc.xml
|
||||||
|
deploymentTargetDropDown.xml
|
||||||
|
render.experimental.xml
|
||||||
|
|
||||||
|
# Keystore files
|
||||||
|
*.jks
|
||||||
|
*.keystore
|
||||||
|
|
||||||
|
# Google Services (e.g. APIs or Firebase)
|
||||||
|
google-services.json
|
||||||
|
|
||||||
|
# Android Profiling
|
||||||
|
*.hprof
|
||||||
|
|
||||||
|
### VisualStudioCode ###
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
!.vscode/*.code-snippets
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
.history/
|
||||||
|
|
||||||
|
# Built Visual Studio Code Extensions
|
||||||
|
*.vsix
|
||||||
|
|
||||||
|
### VisualStudioCode Patch ###
|
||||||
|
# Ignore all local history of files
|
||||||
|
.history
|
||||||
|
.ionide
|
||||||
|
|
||||||
|
### yarn ###
|
||||||
|
# https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
|
||||||
|
|
||||||
|
.yarn/*
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/patches
|
||||||
|
!.yarn/plugins
|
||||||
|
!.yarn/sdks
|
||||||
|
!.yarn/versions
|
||||||
|
|
||||||
|
# if you are NOT using Zero-installs, then:
|
||||||
|
# comment the following lines
|
||||||
|
!.yarn/cache
|
||||||
|
|
||||||
|
# and uncomment the following lines
|
||||||
|
# .pnp.*
|
||||||
|
|
||||||
|
### VisualStudio ###
|
||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.tlog
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||||
|
*.vbp
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||||
|
*.dsw
|
||||||
|
*.dsp
|
||||||
|
|
||||||
|
# Visual Studio 6 technical files
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# Visual Studio History (VSHistory) files
|
||||||
|
.vshistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
|
|
||||||
|
# VS Code files for those working on multiple tools
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
|
||||||
|
# Windows Installer files from build outputs
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msix
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
|
### VisualStudio Patch ###
|
||||||
|
# Additional files built by Visual Studio
|
||||||
|
|
||||||
|
# End of https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,reactnative,yarn
|
@ -0,0 +1,17 @@
|
|||||||
|
node_modules/
|
||||||
|
.expo/
|
||||||
|
dist/
|
||||||
|
npm-debug.*
|
||||||
|
*.jks
|
||||||
|
*.p8
|
||||||
|
*.p12
|
||||||
|
*.key
|
||||||
|
*.mobileprovision
|
||||||
|
*.orig.*
|
||||||
|
web-build/
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Temporary files created by Metro to check the health of the file watcher
|
||||||
|
.metro-health-check*
|
@ -0,0 +1,34 @@
|
|||||||
|
import { NavigationContainer } from '@react-navigation/native';
|
||||||
|
import { StatusBar } from 'expo-status-bar';
|
||||||
|
import React from 'react';
|
||||||
|
import { StyleSheet, Text, View } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
import LoginStack from './navigation/LoginStack';
|
||||||
|
import Navigation from './navigation/Navigation';
|
||||||
|
import ChangePassword from './screens/ChangePassword';
|
||||||
|
import CreateTeam from './screens/CreateTeam';
|
||||||
|
import InfoTeam from './screens/InfoTeam';
|
||||||
|
import Login from './screens/Login';
|
||||||
|
import ManageAccount from './screens/ManageAccount';
|
||||||
|
import NewTrack from './screens/NewTrack';
|
||||||
|
import Register from './screens/Register';
|
||||||
|
import Session_browser from './screens/Session_browser';
|
||||||
|
import Team_Browser from './screens/Team_Browser';
|
||||||
|
import Team_Selection from './screens/Team_Selection';
|
||||||
|
|
||||||
|
export default function App() {
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<NavigationContainer independent={true}>
|
||||||
|
<LoginStack />
|
||||||
|
</NavigationContainer>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"name": "R-Dash",
|
||||||
|
"slug": "R-Dash",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"orientation": "portrait",
|
||||||
|
"icon": "./assets/icon.png",
|
||||||
|
"userInterfaceStyle": "light",
|
||||||
|
"splash": {
|
||||||
|
"image": "./assets/splash.png",
|
||||||
|
"resizeMode": "contain",
|
||||||
|
"backgroundColor": "#ffffff"
|
||||||
|
},
|
||||||
|
"assetBundlePatterns": [
|
||||||
|
"**/*"
|
||||||
|
],
|
||||||
|
"ios": {
|
||||||
|
"supportsTablet": true
|
||||||
|
},
|
||||||
|
"android": {
|
||||||
|
"adaptiveIcon": {
|
||||||
|
"foregroundImage": "./assets/adaptive-icon.png",
|
||||||
|
"backgroundColor": "#ffffff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"web": {
|
||||||
|
"favicon": "./assets/favicon.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 116 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 46 KiB |
@ -0,0 +1,6 @@
|
|||||||
|
module.exports = function(api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
};
|
||||||
|
};
|
@ -0,0 +1,74 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { FlatList, StyleSheet, Text, View, Image, TouchableOpacity, TouchableHighlight } from 'react-native';
|
||||||
|
|
||||||
|
|
||||||
|
export default function TopBar(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={styles.topbar}>
|
||||||
|
<View>
|
||||||
|
<TouchableOpacity style={styles.accountContainerButton} onPress={() => navigation.navigate("Settings")}>
|
||||||
|
<View style={styles.ImageContainer}>
|
||||||
|
<Image source={require('../images/pfp.png')} style={styles.accountImage} />
|
||||||
|
</View>
|
||||||
|
<Text style={styles.accountName}>Mr X</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
topbar: {
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
paddingHorizontal: 20,
|
||||||
|
height: '10%',
|
||||||
|
},
|
||||||
|
|
||||||
|
accountContainerButton: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
|
||||||
|
ImageContainer: {
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderRadius: 50,
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
overflow: 'hidden',
|
||||||
|
marginRight: 10,
|
||||||
|
},
|
||||||
|
|
||||||
|
accountImage: {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
|
||||||
|
accountName: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 20,
|
||||||
|
},
|
||||||
|
|
||||||
|
topbarRight: {
|
||||||
|
flex: 1,
|
||||||
|
alignItems: 'flex-end',
|
||||||
|
},
|
||||||
|
|
||||||
|
iconContainer: {
|
||||||
|
position: 'absolute',
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
},
|
||||||
|
|
||||||
|
accountSettings: {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
})
|
@ -0,0 +1,31 @@
|
|||||||
|
export class Geocalisation {
|
||||||
|
readonly id: number;
|
||||||
|
private gpsLat: number;
|
||||||
|
private gpsLong: number;
|
||||||
|
|
||||||
|
constructor(id: number, gpsLat: number, gpsLong: number) {
|
||||||
|
this.id = id;
|
||||||
|
this.gpsLat = gpsLat;
|
||||||
|
this.gpsLong = gpsLong;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getGpsLat() {
|
||||||
|
return this.gpsLat;
|
||||||
|
}
|
||||||
|
|
||||||
|
setGpsLat(gpsLat: number) {
|
||||||
|
this.gpsLat = gpsLat;
|
||||||
|
}
|
||||||
|
|
||||||
|
getGpsLong() {
|
||||||
|
return this.gpsLong;
|
||||||
|
}
|
||||||
|
|
||||||
|
setGpsLong(gpsLong: number) {
|
||||||
|
this.gpsLong = gpsLong;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
import { Point } from "./Point";
|
||||||
|
|
||||||
|
export class Lap {
|
||||||
|
readonly id: number;
|
||||||
|
private points: Point[];
|
||||||
|
private time: number;
|
||||||
|
|
||||||
|
constructor(id: number, points: Point[], time: number) {
|
||||||
|
this.id = id;
|
||||||
|
this.points = points;
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPoints() {
|
||||||
|
return this.points;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPoints(points: Point[]) {
|
||||||
|
this.points = points;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTime() {
|
||||||
|
return this.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTime(time: number) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
import { Session } from "./Session";
|
||||||
|
import { Team } from "./Team";
|
||||||
|
import { User } from "./User";
|
||||||
|
|
||||||
|
export class Member extends User {
|
||||||
|
constructor(id: number, pseudo: string, password: string, email: string, sessions: Session[], team: Team) {
|
||||||
|
super(id, pseudo, password, email, sessions, team);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
import { Session } from "./Session";
|
||||||
|
import { Team } from "./Team";
|
||||||
|
import { User } from "./User";
|
||||||
|
|
||||||
|
export class Owner extends User {
|
||||||
|
constructor(id: number, pseudo: string, password: string, email: string, sessions: Session[], team: Team) {
|
||||||
|
super(id, pseudo, password, email, sessions, team);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,113 @@
|
|||||||
|
import { Geocalisation } from "./Geocalisation";
|
||||||
|
|
||||||
|
export class Point {
|
||||||
|
readonly id: number;
|
||||||
|
private geo: Geocalisation;
|
||||||
|
private timer: number;
|
||||||
|
private distance: number;
|
||||||
|
private nGear: number;
|
||||||
|
private pBrakeF: number;
|
||||||
|
private aSteer: number;
|
||||||
|
private rPedal: number;
|
||||||
|
private gLong: number;
|
||||||
|
private gLat: number;
|
||||||
|
private vCar: number;
|
||||||
|
|
||||||
|
constructor(id: number, geo: Geocalisation, timer: number, distance: number, nGear: number, pBrakeF: number, aSteer: number, rPedal: number, gLong: number, gLat: number, vCar: number) {
|
||||||
|
this.id = id;
|
||||||
|
this.geo = geo;
|
||||||
|
this.timer = timer;
|
||||||
|
this.distance = distance;
|
||||||
|
this.nGear = nGear;
|
||||||
|
this.pBrakeF = pBrakeF;
|
||||||
|
this.aSteer = aSteer;
|
||||||
|
this.rPedal = rPedal;
|
||||||
|
this.gLong = gLong;
|
||||||
|
this.gLat = gLat;
|
||||||
|
this.vCar = vCar;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getGeo() {
|
||||||
|
return this.geo;
|
||||||
|
}
|
||||||
|
|
||||||
|
setGeo(geo: Geocalisation) {
|
||||||
|
this.geo = geo;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimer(timer: number) {
|
||||||
|
this.timer = timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTimer() {
|
||||||
|
return this.timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
getDistance() {
|
||||||
|
return this.distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
setDistance(distance: number) {
|
||||||
|
this.distance = distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
getNGear() {
|
||||||
|
return this.nGear;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNGear(nGear: number) {
|
||||||
|
this.nGear = nGear;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPBreakF() {
|
||||||
|
return this.pBrakeF;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPBreakF(pBreakF: number) {
|
||||||
|
this.pBrakeF = this.pBrakeF;
|
||||||
|
}
|
||||||
|
|
||||||
|
getASteer() {
|
||||||
|
return this.aSteer;
|
||||||
|
}
|
||||||
|
|
||||||
|
setASteer(aSteer: number) {
|
||||||
|
this.aSteer = aSteer;
|
||||||
|
}
|
||||||
|
|
||||||
|
getRPedal() {
|
||||||
|
return this.rPedal;
|
||||||
|
}
|
||||||
|
|
||||||
|
setRPedal(rPedal: number) {
|
||||||
|
this.rPedal = rPedal;
|
||||||
|
}
|
||||||
|
|
||||||
|
getGLong() {
|
||||||
|
return this.gLong;
|
||||||
|
}
|
||||||
|
|
||||||
|
setGLong(gLong: number) {
|
||||||
|
this.gLong = gLong;
|
||||||
|
}
|
||||||
|
|
||||||
|
getGLat() {
|
||||||
|
return this.gLat;
|
||||||
|
}
|
||||||
|
|
||||||
|
setGLat(gLat: number) {
|
||||||
|
this.gLat = gLat;
|
||||||
|
}
|
||||||
|
|
||||||
|
getVCar() {
|
||||||
|
return this.vCar;
|
||||||
|
}
|
||||||
|
|
||||||
|
setVCar(vCar: number) {
|
||||||
|
this.vCar = vCar;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
import { Lap } from "./Lap";
|
||||||
|
|
||||||
|
export class Session {
|
||||||
|
readonly id: number;
|
||||||
|
private name: string;
|
||||||
|
private laps: Lap[];
|
||||||
|
|
||||||
|
constructor(id: number, name: string, laps: Lap[]) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.laps = laps;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
setName(name: string) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
getLaps() {
|
||||||
|
return this.laps;
|
||||||
|
}
|
||||||
|
|
||||||
|
setLaps(laps: Lap[]) {
|
||||||
|
this.laps = laps;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Session } from "./Session";
|
||||||
|
|
||||||
|
export abstract class SessionBuilder {
|
||||||
|
getSession(session: Session) {
|
||||||
|
return Session;
|
||||||
|
}
|
||||||
|
|
||||||
|
BuildSession() {
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
enum SessionType {
|
||||||
|
Test,
|
||||||
|
PrivateTest,
|
||||||
|
Qualification,
|
||||||
|
ShortStroke,
|
||||||
|
LongStroke,
|
||||||
|
Unknown,
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
import { Point } from "./Point";
|
||||||
|
import { SessionBuilder } from "./SessionBuilder";
|
||||||
|
|
||||||
|
export class StandartSessionBuilder extends SessionBuilder {
|
||||||
|
BuildSession() {
|
||||||
|
PointBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
PointBuilder() {
|
||||||
|
new Point();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
import { User } from "./User";
|
||||||
|
|
||||||
|
export class Team {
|
||||||
|
readonly id: number;
|
||||||
|
private name: string;
|
||||||
|
private owner: User;
|
||||||
|
private members: User[];
|
||||||
|
private logo: File;
|
||||||
|
private waitList: User[];
|
||||||
|
|
||||||
|
constructor(id: number, name: string, owner: User,members: User[] = null, logo: File = null, waitList: User[] = null) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.owner = owner;
|
||||||
|
this.members = members;
|
||||||
|
this.logo = logo;
|
||||||
|
this.waitList = waitList;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
setName(name: string) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
getOwner() {
|
||||||
|
return this.owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
setOwner(owner: User) {
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
getMembers() {
|
||||||
|
return this.members;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMembers(members: User[]) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
|
getLogo() {
|
||||||
|
return this.logo;
|
||||||
|
}
|
||||||
|
|
||||||
|
setLogo(logo: File) {
|
||||||
|
this.logo = logo;
|
||||||
|
}
|
||||||
|
|
||||||
|
getWaitList() {
|
||||||
|
return this.waitList;
|
||||||
|
}
|
||||||
|
|
||||||
|
setWaitList(waitList: User[]) {
|
||||||
|
this.waitList = waitList;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
export class Track {
|
||||||
|
readonly id: number;
|
||||||
|
private name: string;
|
||||||
|
|
||||||
|
constructor(id: number, name: string) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
setName(name: string) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
import { Session } from "./Session";
|
||||||
|
import { Team } from "./Team";
|
||||||
|
|
||||||
|
export abstract class User {
|
||||||
|
readonly id: number;
|
||||||
|
private pseudo: string;
|
||||||
|
private password: string;
|
||||||
|
private email: string;
|
||||||
|
private sessions: Session[];
|
||||||
|
private team: Team;
|
||||||
|
|
||||||
|
constructor(id: number, pseudo: string, password: string, email: string, sessions: Session[] = null, team: Team = null) {
|
||||||
|
this.pseudo = pseudo;
|
||||||
|
this.password = password;
|
||||||
|
this.email = email;
|
||||||
|
this.sessions = sessions;
|
||||||
|
this.team = team;
|
||||||
|
}
|
||||||
|
|
||||||
|
getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPseudo() {
|
||||||
|
return this.pseudo;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPseudo(pseudo: string) {
|
||||||
|
this.pseudo = pseudo;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPassword() {
|
||||||
|
return this.password;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPassword(password: string) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
getEmail() {
|
||||||
|
return this.email;
|
||||||
|
}
|
||||||
|
|
||||||
|
setEmail(email: string) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
getSessions() {
|
||||||
|
return this.sessions;
|
||||||
|
}
|
||||||
|
|
||||||
|
setSessions(sessions: Session[]) {
|
||||||
|
this.sessions = sessions;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTeam() {
|
||||||
|
return this.team;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTeam(team: Team) {
|
||||||
|
this.team = team;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
import { Session } from "./Session";
|
||||||
|
import { Team } from "./Team";
|
||||||
|
import { User } from "./User";
|
||||||
|
|
||||||
|
export class WaitingMember extends User {
|
||||||
|
constructor(id: number, pseudo: string, password: string, email: string, sessions: Session[], team: Team) {
|
||||||
|
super(id, pseudo, password, email, sessions, team);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
import { createStackNavigator } from "@react-navigation/stack";
|
||||||
|
import Login from "../screens/Login";
|
||||||
|
import Register from "../screens/Register";
|
||||||
|
import Navigation from "./Navigation";
|
||||||
|
|
||||||
|
export default function LoginStack() {
|
||||||
|
const Stack = createStackNavigator();
|
||||||
|
return (
|
||||||
|
<Stack.Navigator initialRouteName="SignIn" screenOptions={{ headerShown: false }}>
|
||||||
|
<Stack.Screen name="SignIn" component={Login} />
|
||||||
|
<Stack.Screen name="SignUp" component={Register} />
|
||||||
|
<Stack.Screen name="Home" component={Navigation} />
|
||||||
|
</Stack.Navigator>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
import { createStackNavigator } from "@react-navigation/stack";
|
||||||
|
import Lap from "../screens/Lap";
|
||||||
|
import NewTrack from "../screens/NewTrack";
|
||||||
|
import Session_browser from "../screens/Session_browser";
|
||||||
|
import SettingsStack from "./SettingsStack";
|
||||||
|
|
||||||
|
export default function MainStack() {
|
||||||
|
const Stack = createStackNavigator();
|
||||||
|
return (
|
||||||
|
<Stack.Navigator initialRouteName="Home" screenOptions={{ headerShown: false }}>
|
||||||
|
<Stack.Screen name="Home" component={Session_browser} />
|
||||||
|
<Stack.Screen name="Add" component={NewTrack} />
|
||||||
|
<Stack.Screen name="Lap" component={Lap} />
|
||||||
|
<Stack.Screen name="Settings" component={SettingsStack} />
|
||||||
|
</Stack.Navigator>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
|
||||||
|
import { NavigationContainer } from "@react-navigation/native";
|
||||||
|
import { FontAwesome } from '@expo/vector-icons';
|
||||||
|
import MainStack from "./MainStack";
|
||||||
|
import TeamStack from "./TeamStack";
|
||||||
|
|
||||||
|
|
||||||
|
export default function Navigation() {
|
||||||
|
const BottomTabNavigator = createBottomTabNavigator();
|
||||||
|
return (
|
||||||
|
<NavigationContainer independent={true}>
|
||||||
|
<BottomTabNavigator.Navigator initialRouteName="Home" screenOptions={{ headerShown: false }}>
|
||||||
|
<BottomTabNavigator.Screen name="Home" component={MainStack}
|
||||||
|
options={{
|
||||||
|
title: 'Home',
|
||||||
|
tabBarIcon: ({ color }) => <FontAwesome name="home" size={40} color={color} />
|
||||||
|
}} />
|
||||||
|
|
||||||
|
<BottomTabNavigator.Screen name="Team" component={TeamStack}
|
||||||
|
options={{
|
||||||
|
title: 'Team',
|
||||||
|
tabBarIcon: ({ color }) => <FontAwesome name="group" size={24} color={color} />
|
||||||
|
}}/>
|
||||||
|
|
||||||
|
</BottomTabNavigator.Navigator>
|
||||||
|
</NavigationContainer>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
import { createStackNavigator } from "@react-navigation/stack";
|
||||||
|
import ChangePassword from "../screens/ChangePassword";
|
||||||
|
import ManageAccount from "../screens/ManageAccount";
|
||||||
|
|
||||||
|
|
||||||
|
export default function SettingsStack() {
|
||||||
|
const Stack = createStackNavigator();
|
||||||
|
return (
|
||||||
|
<Stack.Navigator initialRouteName="Home" screenOptions={{ headerShown: false }}>
|
||||||
|
<Stack.Screen name="Home" component={ManageAccount} />
|
||||||
|
<Stack.Screen name="Password" component={ChangePassword} />
|
||||||
|
</Stack.Navigator>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
import { createStackNavigator } from "@react-navigation/stack";
|
||||||
|
import CreateTeam from "../screens/CreateTeam";
|
||||||
|
import InfoTeam from "../screens/InfoTeam";
|
||||||
|
import Team_Browser from "../screens/Team_Browser";
|
||||||
|
import Team_Selection from "../screens/Team_Selection";
|
||||||
|
|
||||||
|
|
||||||
|
export default function TeamInfoStack() {
|
||||||
|
const Stack = createStackNavigator();
|
||||||
|
return (
|
||||||
|
<Stack.Navigator initialRouteName="Home" screenOptions={{ headerShown: false }}>
|
||||||
|
<Stack.Screen name="Home" component={Team_Browser} />
|
||||||
|
<Stack.Screen name="Info" component={InfoTeam} />
|
||||||
|
</Stack.Navigator>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
import { createStackNavigator } from "@react-navigation/stack";
|
||||||
|
import CreateTeam from "../screens/CreateTeam";
|
||||||
|
import Team_Selection from "../screens/Team_Selection";
|
||||||
|
import TeamInfoStack from "./TeamInfoStack";
|
||||||
|
|
||||||
|
|
||||||
|
export default function TeamStack() {
|
||||||
|
const Stack = createStackNavigator();
|
||||||
|
return (
|
||||||
|
<Stack.Navigator initialRouteName="Home" screenOptions={{ headerShown: false }}>
|
||||||
|
<Stack.Screen name="Home" component={Team_Selection} />
|
||||||
|
<Stack.Screen name="Browse" component={TeamInfoStack} />
|
||||||
|
<Stack.Screen name="Create" component={CreateTeam} />
|
||||||
|
</Stack.Navigator>
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "r-dash",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "node_modules/expo/AppEntry.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "expo start",
|
||||||
|
"android": "expo start --android",
|
||||||
|
"ios": "expo start --ios",
|
||||||
|
"web": "expo start --web"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@react-native-mapbox-gl/maps": "^8.6.0-beta.0",
|
||||||
|
"@react-navigation/bottom-tabs": "^6.5.5",
|
||||||
|
"@react-navigation/native": "^6.1.6",
|
||||||
|
"@react-navigation/stack": "^6.3.16",
|
||||||
|
"@rneui/base": "^4.0.0-rc.7",
|
||||||
|
"expo": "~48.0.6",
|
||||||
|
"expo-document-picker": "~11.2.1",
|
||||||
|
"expo-status-bar": "~1.4.4",
|
||||||
|
"react": "18.2.0",
|
||||||
|
"react-native": "0.71.3",
|
||||||
|
"react-native-document-picker": "^8.1.4",
|
||||||
|
"react-native-gesture-handler": "^2.9.0",
|
||||||
|
"react-native-maps": "1.3.2",
|
||||||
|
"react-native-safe-area-context": "^4.5.0",
|
||||||
|
"typescript": "^4.9.4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.20.0",
|
||||||
|
"@types/react": "~18.0.14",
|
||||||
|
"typescript": "^4.9.4"
|
||||||
|
},
|
||||||
|
"private": true
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable } from 'react-native';
|
||||||
|
import { StyleSheet, Text, View, Image, TextInput } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
|
||||||
|
export default function ChangePassword(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.maincard}>
|
||||||
|
<View style={{ alignItems: 'center' }}>
|
||||||
|
<Text style={{ paddingBottom: 10, fontSize: 30 }}>Change Password</Text>
|
||||||
|
<TextInput
|
||||||
|
style={styles.textInput}
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Current password"
|
||||||
|
/>
|
||||||
|
<Text></Text>
|
||||||
|
<TextInput
|
||||||
|
style={styles.textInput}
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="New password"
|
||||||
|
/>
|
||||||
|
<Text></Text>
|
||||||
|
<TextInput
|
||||||
|
style={styles.textInput}
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Confirm password"
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack() }>
|
||||||
|
<Image
|
||||||
|
style={styles.return}
|
||||||
|
source={require('../assets/images/return.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()} >
|
||||||
|
<Image
|
||||||
|
style={styles.return}
|
||||||
|
source={require('../assets/images/checked.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
maincard: {
|
||||||
|
height: "50%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-evenly',
|
||||||
|
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
placement: {
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
textInput: {
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: '#000',
|
||||||
|
width: '80%',
|
||||||
|
},
|
||||||
|
return: {
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,132 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable } from 'react-native';
|
||||||
|
import { StyleSheet, Text, View, Image, TextInput } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
|
||||||
|
export default function CreateTeam(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.maincard}>
|
||||||
|
<Text style={{ paddingBottom: 10, fontSize: 30 }}>Create a team</Text>
|
||||||
|
<View style={styles.card}>
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/image.png')}
|
||||||
|
/>
|
||||||
|
<Pressable>
|
||||||
|
<Image
|
||||||
|
style={styles.import}
|
||||||
|
source={require('../assets/images/import.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View >
|
||||||
|
<Text>Team name : </Text>
|
||||||
|
<TextInput
|
||||||
|
style={styles.teamNameCard}
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Team name"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
||||||
|
<Image
|
||||||
|
style={styles.return}
|
||||||
|
source={require('../assets/images/return.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
||||||
|
<Image
|
||||||
|
style={styles.return}
|
||||||
|
source={require('../assets/images/checked.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
maincard: {
|
||||||
|
height: "60%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-evenly',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
card: {
|
||||||
|
height: "70%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#C8C8C8",
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-evenly',
|
||||||
|
paddingHorizontal: 20,
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
button_text: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 15,
|
||||||
|
},
|
||||||
|
logo: {
|
||||||
|
borderRadius: 100,
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
},
|
||||||
|
import: {
|
||||||
|
width: 70,
|
||||||
|
height: 70,
|
||||||
|
paddingLeft: 20,
|
||||||
|
},
|
||||||
|
placement: {
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
teamNameCard: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: '#000',
|
||||||
|
},
|
||||||
|
return: {
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,86 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable } from 'react-native';
|
||||||
|
import { StyleSheet, Text, View, Image } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
|
||||||
|
export default function InfoTeam(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.maincard}>
|
||||||
|
<Text style={{ paddingBottom: 10, fontSize: 30 }} >Team Information</Text>
|
||||||
|
<View style={styles.card}>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/image.png')}
|
||||||
|
/>
|
||||||
|
<View >
|
||||||
|
<Text style={{ padding: 10 }}>Name : </Text>
|
||||||
|
<Text style={{ padding: 10 }}>Owner : </Text>
|
||||||
|
<Pressable style={styles.button}>
|
||||||
|
<Text style={styles.button_text}>Request to join</Text>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack() }>
|
||||||
|
<Text style={styles.button_text}>Retour</Text>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
maincard: {
|
||||||
|
height: "60%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
card: {
|
||||||
|
height: "60%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#C8C8C8",
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center'
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
button_text: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 15,
|
||||||
|
},
|
||||||
|
logo: {
|
||||||
|
borderRadius: 100,
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,230 @@
|
|||||||
|
import { BackgroundImage } from '@rneui/base';
|
||||||
|
import { FlatList, StyleSheet, Text, View, Image, TouchableOpacity } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
import MapView from 'react-native-maps';
|
||||||
|
import PROVIDER_OPENSTREETMAP, { Marker } from 'react-native-maps';
|
||||||
|
|
||||||
|
export default function Lap() {
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.container}>
|
||||||
|
{/* Header */}
|
||||||
|
<View style={styles.topbar}>
|
||||||
|
<View>
|
||||||
|
<TouchableOpacity style={styles.accountContainerButton}>
|
||||||
|
<View style={styles.ImageContainer}>
|
||||||
|
<Image source={require('../assets/images/pfp.png')} style={styles.accountImage} />
|
||||||
|
</View>
|
||||||
|
<Text style={styles.accountName}>Mr X</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
<View style={styles.topbarRight}>
|
||||||
|
<View style={styles.iconContainer}>
|
||||||
|
<Image source={require('../assets/images/settings.png')} style={styles.accountSettings} />
|
||||||
|
</View>
|
||||||
|
<TouchableOpacity style={styles.accountContainerButton}>
|
||||||
|
<View style={styles.ImageContainer}>
|
||||||
|
<Image source={require('../assets/images/rdash.png')} style={styles.accountImage} />
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Body */}
|
||||||
|
<View style={styles.container}>
|
||||||
|
<BackgroundImage source={require('../assets/images/rdash.png')} resizeMode="contain" style={styles.backgroundImage}>
|
||||||
|
|
||||||
|
<View style={styles.top_lap}>
|
||||||
|
<TouchableOpacity style={styles.LapBrowserButton} >
|
||||||
|
<View>
|
||||||
|
<Text style={styles.button_text} >Previous lap</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
<Text style={styles.text_title}>Lap X</Text>
|
||||||
|
|
||||||
|
<TouchableOpacity style={styles.LapBrowserButton}>
|
||||||
|
<View>
|
||||||
|
<Text style={styles.button_text} >Next lap</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View style={styles.container}>
|
||||||
|
<MapView
|
||||||
|
style={styles.map}
|
||||||
|
region={{
|
||||||
|
latitude: 46.863415273862,
|
||||||
|
longitude: 3.161789595537,
|
||||||
|
latitudeDelta: 0.001,
|
||||||
|
longitudeDelta: 0.01,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Marker
|
||||||
|
coordinate={{
|
||||||
|
latitude: 46.863415273862,
|
||||||
|
longitude: 3.161789595537
|
||||||
|
}}
|
||||||
|
title="Marker Title"
|
||||||
|
description="Marker Description"
|
||||||
|
/>
|
||||||
|
<Marker
|
||||||
|
coordinate={{
|
||||||
|
latitude: 46.861927477535,
|
||||||
|
longitude: 3.160353322067
|
||||||
|
}}
|
||||||
|
title="Marker Title"
|
||||||
|
description="Marker Description"
|
||||||
|
/>
|
||||||
|
<Marker
|
||||||
|
coordinate={{
|
||||||
|
latitude: 46.859745172448,
|
||||||
|
longitude: 3.164897426081
|
||||||
|
}}
|
||||||
|
title="Marker Title"
|
||||||
|
description="Marker Description"
|
||||||
|
/>
|
||||||
|
</MapView>
|
||||||
|
|
||||||
|
<Text style={styles.textStyle} >Time: 1 30,62 seconds</Text>
|
||||||
|
|
||||||
|
<View style={styles.infoContainer}>
|
||||||
|
<Text style={styles.textStyle} >Average Speed: {"\n"} 102 km/h</Text>
|
||||||
|
<Text style={styles.textStyle} >G: {"\n"} 0.001 G</Text>
|
||||||
|
|
||||||
|
|
||||||
|
</View>
|
||||||
|
<Text style={styles.textStyle} ></Text>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
</BackgroundImage>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TROUBLE SHOOTING BORDER :
|
||||||
|
//borderColor:'red',
|
||||||
|
//borderWidth:3,
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
card: {
|
||||||
|
flexDirection: 'column',
|
||||||
|
height: "80%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
},
|
||||||
|
infoContainer: {
|
||||||
|
margin: 3,
|
||||||
|
flex: 1,
|
||||||
|
flexDirection: 'row',
|
||||||
|
justifyContent: 'space-around',
|
||||||
|
},
|
||||||
|
map: {
|
||||||
|
height: "40%",
|
||||||
|
},
|
||||||
|
top_lap: {
|
||||||
|
height: "8%",
|
||||||
|
flexDirection: 'row',
|
||||||
|
justifyContent: 'space-between'
|
||||||
|
},
|
||||||
|
backgroundImage: {
|
||||||
|
flex: 1,
|
||||||
|
width: '100%',
|
||||||
|
},
|
||||||
|
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
accountSettings: {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
|
||||||
|
accountContainerButton: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
|
||||||
|
LapBrowserButton: {
|
||||||
|
width: "30%",
|
||||||
|
margin: 5,
|
||||||
|
alignContent: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
borderRadius: 10,
|
||||||
|
backgroundColor: '#BF181F',
|
||||||
|
},
|
||||||
|
button_text: {
|
||||||
|
textAlign: 'center',
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 20,
|
||||||
|
},
|
||||||
|
|
||||||
|
ImageContainer: {
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderRadius: 50,
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
overflow: 'hidden',
|
||||||
|
marginRight: 10,
|
||||||
|
|
||||||
|
},
|
||||||
|
accountImage: {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
topbar: {
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
paddingHorizontal: 20,
|
||||||
|
height: "8%",
|
||||||
|
},
|
||||||
|
accountName: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 20,
|
||||||
|
},
|
||||||
|
topbarRight: {
|
||||||
|
flex: 1,
|
||||||
|
alignItems: 'flex-end',
|
||||||
|
},
|
||||||
|
textStyle: {
|
||||||
|
margin: 3,
|
||||||
|
fontSize: 20,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
color: 'white',
|
||||||
|
padding: "2%",
|
||||||
|
borderRadius: 5,
|
||||||
|
|
||||||
|
},
|
||||||
|
text_title: {
|
||||||
|
fontWeight: 'bold',
|
||||||
|
fontSize: 30,
|
||||||
|
textAlign: 'center',
|
||||||
|
padding: 10,
|
||||||
|
textShadowColor: '#fff',
|
||||||
|
textShadowOffset: { width: 0, height: 0 },
|
||||||
|
textShadowRadius: 10,
|
||||||
|
},
|
||||||
|
iconContainer: {
|
||||||
|
position: 'absolute',
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,106 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable } from 'react-native';
|
||||||
|
import { StyleSheet, Text, View, Image, TextInput } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
|
||||||
|
export default function Login(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.maincard}>
|
||||||
|
<Text style={{ paddingBottom: 10, fontSize: 30 }} >Login</Text>
|
||||||
|
<View style={styles.email}>
|
||||||
|
<TextInput
|
||||||
|
|
||||||
|
keyboardType="email-address"
|
||||||
|
placeholder="Email"
|
||||||
|
/>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/email.png')}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<View style={styles.email}>
|
||||||
|
<TextInput
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Password"
|
||||||
|
/>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/cadna.png')}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.navigate('Home')}>
|
||||||
|
<Text style={styles.text}>Login</Text>
|
||||||
|
</Pressable>
|
||||||
|
<View style={{ alignItems: 'center', flexDirection: 'row' }}>
|
||||||
|
<Text style={styles.text}>Don't have Account ? </Text>
|
||||||
|
<Pressable onPress={() => navigation.replace('SignUp')}>
|
||||||
|
<Text style={styles.register}>Register</Text>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
maincard: {
|
||||||
|
height: "40%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 20,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
email: {
|
||||||
|
height: "auto",
|
||||||
|
width: 300,
|
||||||
|
borderRadius: 10,
|
||||||
|
backgroundColor: "#C8C8C8",
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
color: '#000',
|
||||||
|
fontSize: 15,
|
||||||
|
},
|
||||||
|
logo: {
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
},
|
||||||
|
register: {
|
||||||
|
color: '#ffa020',
|
||||||
|
fontSize: 15,
|
||||||
|
textDecorationLine: 'underline',
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,137 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import { Button, Pressable } from 'react-native';
|
||||||
|
import { StyleSheet, Text, View, Image, TextInput } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
import * as DocumentPicker from 'expo-document-picker';
|
||||||
|
|
||||||
|
export default function ManageAccount(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
|
||||||
|
const [pickedDocument, setPickedDocument] = useState<DocumentPicker.DocumentResult | null>(null);
|
||||||
|
|
||||||
|
const handlePickDocument = async () => {
|
||||||
|
try {
|
||||||
|
const result = await DocumentPicker.getDocumentAsync({ type: ['image/png', 'image/jpeg', 'image/jpg'] });
|
||||||
|
if (result.type === 'success') {
|
||||||
|
setPickedDocument(result);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.maincard}>
|
||||||
|
<Text style={{ paddingBottom: 10, fontSize: 30 }}>Manage account</Text>
|
||||||
|
<View style={styles.card}>
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Image style={styles.logo} source={require('../assets/images/image.png')} />
|
||||||
|
|
||||||
|
<Pressable onPress={handlePickDocument}>
|
||||||
|
<Image style={styles.import} source={require('../assets/images/import.png')} />
|
||||||
|
<Text>
|
||||||
|
Picked document: {pickedDocument ? pickedDocument.name : 'none'}
|
||||||
|
</Text>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View>
|
||||||
|
<Text>Name : </Text>
|
||||||
|
<TextInput style={styles.nameCard} secureTextEntry={true} placeholder="Name" />
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.navigate('Password')}>
|
||||||
|
<Text>Change password</Text>
|
||||||
|
</Pressable>
|
||||||
|
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
||||||
|
<Image style={styles.return} source={require('../assets/images/return.png')} />
|
||||||
|
</Pressable>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
||||||
|
<Image style={styles.return} source={require('../assets/images/checked.png')} />
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
maincard: {
|
||||||
|
height: "60%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-evenly',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
card: {
|
||||||
|
height: "70%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#C8C8C8",
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-evenly',
|
||||||
|
paddingHorizontal: 20,
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
button_text: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 15,
|
||||||
|
},
|
||||||
|
logo: {
|
||||||
|
borderRadius: 100,
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
},
|
||||||
|
import: {
|
||||||
|
width: 70,
|
||||||
|
height: 70,
|
||||||
|
paddingLeft: 20,
|
||||||
|
},
|
||||||
|
placement: {
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
nameCard: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: '#000',
|
||||||
|
},
|
||||||
|
return: {
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,183 @@
|
|||||||
|
import { StatusBar } from 'expo-status-bar';
|
||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable, StyleSheet, Text, View, Image, TouchableOpacity, TextInput } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
|
||||||
|
export default function NewTrack(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
return (
|
||||||
|
<SafeAreaView>
|
||||||
|
<View style={styles.container}>
|
||||||
|
<View style={styles.topbar}>
|
||||||
|
<View>
|
||||||
|
<TouchableOpacity style={styles.accountContainerButton}>
|
||||||
|
<View style={styles.ImageContainer}>
|
||||||
|
</View>
|
||||||
|
<Text style={styles.accountName}>Name</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
<View style={styles.topbarRight}>
|
||||||
|
<View style={styles.iconContainer}>
|
||||||
|
<Image source={require('../assets/images/settings.png')} style={styles.accountSettings} />
|
||||||
|
</View>
|
||||||
|
<TouchableOpacity style={styles.accountContainerButton}>
|
||||||
|
<View style={styles.ImageContainer}>
|
||||||
|
<Image source={require('../assets/images/image.png')} style={styles.accountImage} />
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Page */}
|
||||||
|
<View style={{ alignItems: 'center', width: "100%", height: "80%", justifyContent: 'space-around' }}>
|
||||||
|
<View style={styles.page}>
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Text style={{ paddingTop: 20 }}>Track name: </Text>
|
||||||
|
<TextInput
|
||||||
|
style={styles.textInput}
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Track name"
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Text style={{ paddingTop: 20 }}>Session name: </Text>
|
||||||
|
<TextInput
|
||||||
|
style={styles.textInput}
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Session name"
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Text style={{ paddingTop: 30 }}>Import file: </Text>
|
||||||
|
<Pressable>
|
||||||
|
<Image
|
||||||
|
style={styles.import}
|
||||||
|
source={require('../assets/images/import.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View style={styles.placement}>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
||||||
|
<Image
|
||||||
|
style={styles.return}
|
||||||
|
source={require('../assets/images/return.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
||||||
|
<Image
|
||||||
|
style={styles.return}
|
||||||
|
source={require('../assets/images/checked.png')}
|
||||||
|
/>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
backgroundImage: {
|
||||||
|
},
|
||||||
|
|
||||||
|
container: {
|
||||||
|
flexDirection: 'column',
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
accountSettings: {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
accountContainerButton: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
ImageContainer: {
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderRadius: 50,
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
overflow: 'hidden',
|
||||||
|
marginRight: 10,
|
||||||
|
},
|
||||||
|
accountImage: {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
topbar: {
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
paddingHorizontal: 20,
|
||||||
|
height: 80,
|
||||||
|
},
|
||||||
|
accountName: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 20,
|
||||||
|
},
|
||||||
|
topbarRight: {
|
||||||
|
flex: 1,
|
||||||
|
alignItems: 'flex-end',
|
||||||
|
},
|
||||||
|
text_title: {
|
||||||
|
flex: 1,
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
fontSize: 30,
|
||||||
|
textAlign: 'center',
|
||||||
|
padding: 10,
|
||||||
|
},
|
||||||
|
iconContainer: {
|
||||||
|
position: 'absolute',
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
},
|
||||||
|
textInput: {
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: '#000',
|
||||||
|
width: '90%',
|
||||||
|
},
|
||||||
|
import: {
|
||||||
|
width: 70,
|
||||||
|
height: 70,
|
||||||
|
paddingLeft: 20,
|
||||||
|
},
|
||||||
|
placement: {
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
page: {
|
||||||
|
padding: 20,
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
height: "60%",
|
||||||
|
width: "80%",
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
return: {
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,126 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable, Touchable } from 'react-native';
|
||||||
|
import { StyleSheet, Text, View, Image, TextInput } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
import Navigation from '../navigation/Navigation';
|
||||||
|
|
||||||
|
export default function Register(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.maincard}>
|
||||||
|
<Text style={{ paddingBottom: 10, fontSize: 30 }}>Register</Text>
|
||||||
|
<View style={styles.input}>
|
||||||
|
<TextInput
|
||||||
|
placeholder="Name"
|
||||||
|
/>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/user.png')}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<View style={styles.input}>
|
||||||
|
<TextInput
|
||||||
|
|
||||||
|
keyboardType="email-address"
|
||||||
|
placeholder="Email"
|
||||||
|
/>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/email.png')}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<View style={styles.input}>
|
||||||
|
<TextInput
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Password"
|
||||||
|
/>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/cadna.png')}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<View style={styles.input}>
|
||||||
|
<TextInput
|
||||||
|
secureTextEntry={true}
|
||||||
|
placeholder="Confirm Password"
|
||||||
|
/>
|
||||||
|
<Image
|
||||||
|
style={styles.logo}
|
||||||
|
source={require('../assets/images/cadna.png')}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.navigate('Home')}>
|
||||||
|
<Text style={styles.text}>Sign Up</Text>
|
||||||
|
</Pressable>
|
||||||
|
<View style={{ alignItems: 'center', flexDirection: 'row' }}>
|
||||||
|
<Text style={styles.text}>Already a Member ? </Text>
|
||||||
|
<Pressable onPress={() => navigation.replace('SignIn')} >
|
||||||
|
<Text style={styles.register}>Sign in</Text>
|
||||||
|
</Pressable>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
maincard: {
|
||||||
|
height: "60%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 20,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
height: "auto",
|
||||||
|
width: 300,
|
||||||
|
borderRadius: 10,
|
||||||
|
backgroundColor: "#C8C8C8",
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
color: '#000',
|
||||||
|
fontSize: 15,
|
||||||
|
},
|
||||||
|
logo: {
|
||||||
|
width: 30,
|
||||||
|
height: 30,
|
||||||
|
},
|
||||||
|
register: {
|
||||||
|
color: '#ffa020',
|
||||||
|
fontSize: 15,
|
||||||
|
textDecorationLine: 'underline',
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,144 @@
|
|||||||
|
import { BackgroundImage } from '@rneui/base';
|
||||||
|
import React from 'react';
|
||||||
|
import { FlatList, StyleSheet, Text, View, Image, TouchableOpacity, TouchableHighlight } from 'react-native';
|
||||||
|
import TopBar from '../components/TopBar';
|
||||||
|
|
||||||
|
export default function Session_browser(props: {navigation: any}) {
|
||||||
|
type ItemProps = { title: string };
|
||||||
|
const { navigation } = props;
|
||||||
|
const Item = ({title}: ItemProps) => (
|
||||||
|
<View style={styles.item}>
|
||||||
|
<Text style={styles.title}>{title}</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
const DATA = [
|
||||||
|
{
|
||||||
|
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
|
||||||
|
title: 'First Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
|
||||||
|
title: 'Second Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d71',
|
||||||
|
title: 'Third Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d78',
|
||||||
|
title: 'c Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d76',
|
||||||
|
title: 'b Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d75',
|
||||||
|
title: 'a Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d73',
|
||||||
|
title: 's Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d13',
|
||||||
|
title: 's Item',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={styles.container}>
|
||||||
|
<View style={styles.container}>
|
||||||
|
{/* Header */}
|
||||||
|
<TopBar navigation={navigation} />
|
||||||
|
|
||||||
|
{/* Body */}
|
||||||
|
<View style={styles.container}>
|
||||||
|
<BackgroundImage source={require('../assets/images/rdash.png')} resizeMode="contain" style={styles.backgroundImage}>
|
||||||
|
|
||||||
|
<Text style={styles.text_title}>Sessions</Text>
|
||||||
|
|
||||||
|
<FlatList data={DATA} renderItem={({ item }) =>
|
||||||
|
<TouchableHighlight onPress={() => navigation.navigate('Lap', { "lap": item })}>
|
||||||
|
<Item title={item.title} />
|
||||||
|
</TouchableHighlight>
|
||||||
|
} keyExtractor={(Item) => Item.title} />
|
||||||
|
|
||||||
|
<TouchableOpacity style={styles.addContainerButton} onPress={() => navigation.navigate('Add')}>
|
||||||
|
<View>
|
||||||
|
<Text style={styles.button_text} >Add a session</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
</BackgroundImage>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
|
||||||
|
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
item: {
|
||||||
|
borderRadius:10,
|
||||||
|
opacity:0.9,
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
padding: 20,
|
||||||
|
marginVertical: 8,
|
||||||
|
marginHorizontal: 16,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
fontSize: 32,
|
||||||
|
},
|
||||||
|
backgroundImage: {
|
||||||
|
flex:1,
|
||||||
|
width:'100%',
|
||||||
|
},
|
||||||
|
|
||||||
|
container: {
|
||||||
|
flex:1,
|
||||||
|
},
|
||||||
|
|
||||||
|
addImageContainer:{
|
||||||
|
backgroundColor: '#fff',
|
||||||
|
borderRadius: 50,
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
overflow: 'hidden',
|
||||||
|
alignItems:'center'
|
||||||
|
},
|
||||||
|
|
||||||
|
addContainerButton:{
|
||||||
|
margin:10,
|
||||||
|
alignItems:'center',
|
||||||
|
justifyContent:'center',
|
||||||
|
height: "10%",
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181F',
|
||||||
|
},
|
||||||
|
button_text: {
|
||||||
|
color:'#fff',
|
||||||
|
fontSize:20,
|
||||||
|
},
|
||||||
|
|
||||||
|
text_title: {
|
||||||
|
fontWeight: 'bold',
|
||||||
|
fontSize: 30,
|
||||||
|
textAlign:'center',
|
||||||
|
padding:10,
|
||||||
|
textShadowColor: '#fff',
|
||||||
|
textShadowOffset: { width: 0, height: 0 },
|
||||||
|
textShadowRadius: 10,
|
||||||
|
},
|
||||||
|
|
||||||
|
topbar: {
|
||||||
|
height: '10%',
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,125 @@
|
|||||||
|
import { Button, FlatList, Pressable, StyleSheet, Text, View } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
import { SearchBar } from '@rneui/base';
|
||||||
|
import { TouchableHighlight } from 'react-native-gesture-handler';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default function Team_Browser(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
type ItemProps = { title: string };
|
||||||
|
const Item = ({title}: ItemProps) => (
|
||||||
|
<View style={styles.item}>
|
||||||
|
<Text style={styles.title}>{title}</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
const DATA = [
|
||||||
|
{
|
||||||
|
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
|
||||||
|
title: 'First Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
|
||||||
|
title: 'Second Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d71',
|
||||||
|
title: 'Third Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d78',
|
||||||
|
title: 'c Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d76',
|
||||||
|
title: 'b Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d75',
|
||||||
|
title: 'a Item',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '58694a0f-3da1-471f-bd96-145571e29d73',
|
||||||
|
title: 's Item',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
return (
|
||||||
|
<SafeAreaView style={styles.container}>
|
||||||
|
<View style={styles.card}>
|
||||||
|
<Text style={styles.text_title}> Browse teams </Text>
|
||||||
|
<SearchBar
|
||||||
|
platform="default"
|
||||||
|
lightTheme
|
||||||
|
/>
|
||||||
|
<FlatList data={DATA} renderItem={({ item }) =>
|
||||||
|
<TouchableHighlight onPress={() => navigation.navigate('Info', { "team": item })}>
|
||||||
|
<Item title={item.title} />
|
||||||
|
</TouchableHighlight>
|
||||||
|
}/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
item: {
|
||||||
|
backgroundColor: '#C5C5C5',
|
||||||
|
padding: 20,
|
||||||
|
marginVertical: 8,
|
||||||
|
marginHorizontal: 16,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
fontSize: 32,
|
||||||
|
},
|
||||||
|
|
||||||
|
search: {
|
||||||
|
backgroundColor:'#fff',
|
||||||
|
lightTheme: 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
button: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
|
||||||
|
button_text: {
|
||||||
|
color:'#fff',
|
||||||
|
fontSize:15,
|
||||||
|
},
|
||||||
|
|
||||||
|
text_title: {
|
||||||
|
fontSize: 24,
|
||||||
|
textAlign:'center',
|
||||||
|
padding:10,
|
||||||
|
},
|
||||||
|
|
||||||
|
container: {
|
||||||
|
backgroundColor: "#C5C5C5",
|
||||||
|
flex:1,
|
||||||
|
justifyContent:'center',
|
||||||
|
alignItems:'center'
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
card: {
|
||||||
|
flexDirection:'column',
|
||||||
|
height: "80%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
},
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,78 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Button, Pressable, StyleSheet, Text, View } from 'react-native';
|
||||||
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||||
|
import TopBar from '../components/TopBar';
|
||||||
|
|
||||||
|
export default function Team_Selection(props: { navigation: any }) {
|
||||||
|
const { navigation } = props;
|
||||||
|
return (
|
||||||
|
<View style={styles.main}>
|
||||||
|
<TopBar navigation={navigation}/>
|
||||||
|
<View style={styles.container}>
|
||||||
|
<View style={styles.card}>
|
||||||
|
<Text style={styles.text_title}> Create or join a team </Text>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.navigate('Browse')}>
|
||||||
|
<Text style={styles.button_text}>Browse teams </Text>
|
||||||
|
</Pressable>
|
||||||
|
<Pressable style={styles.button} onPress={() => navigation.navigate('Create')} >
|
||||||
|
<Text style={styles.button_text}> Create a team </Text>
|
||||||
|
</Pressable>
|
||||||
|
{/*<Pressable style={styles.button} >*/}
|
||||||
|
{/* <Text style={styles.button_text}> Cancel </Text> */}
|
||||||
|
{/*</Pressable>*/}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
|
||||||
|
main: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
button: {
|
||||||
|
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
paddingHorizontal: 32,
|
||||||
|
borderRadius: 10,
|
||||||
|
elevation: 3,
|
||||||
|
backgroundColor: '#BF181D',
|
||||||
|
},
|
||||||
|
button_text: {
|
||||||
|
color:'#fff',
|
||||||
|
fontSize:15,
|
||||||
|
},
|
||||||
|
text_title: {
|
||||||
|
fontSize: 24,
|
||||||
|
textAlign:'center',
|
||||||
|
},
|
||||||
|
|
||||||
|
container: {
|
||||||
|
backgroundColor: "#C5C5C5",
|
||||||
|
flex:1,
|
||||||
|
alignItems:'center',
|
||||||
|
justifyContent:'center',
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
card: {
|
||||||
|
flexDirection:'column',
|
||||||
|
justifyContent: 'space-around',
|
||||||
|
alignItems:'center',
|
||||||
|
height: "50%",
|
||||||
|
width: "80%",
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderRadius: 15,
|
||||||
|
padding: 10,
|
||||||
|
elevation: 10,
|
||||||
|
shadowColor: '#000',
|
||||||
|
shadowOffset: { width: 0, height: 3 },
|
||||||
|
shadowOpacity: 0.5,
|
||||||
|
shadowRadius: 5,
|
||||||
|
},
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "expo/tsconfig.base",
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true
|
||||||
|
}
|
||||||
|
}
|