Compare commits
No commits in common. 'master' and 'bet_component' have entirely different histories.
master
...
bet_compon
@ -1,20 +0,0 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: Swift-ALLIN
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: swift:latest
|
||||
commands:
|
||||
- cd Sources/Model
|
||||
- swift build
|
||||
|
||||
- name: test
|
||||
image: swift:latest
|
||||
commands:
|
||||
- cd Sources/Model
|
||||
- swift test
|
Before Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 354 KiB |
@ -1,91 +1,3 @@
|
||||
<div align="center">
|
||||
# Swift
|
||||
|
||||
<img src="Documentation/Images/Banner-AllIn.png" />
|
||||
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
[Présentation](#apple---all-in) | [Répartition du dépôt](#répartition-du-gitlab) | [Structures](#structures) | [Technologies](#technologies) | [Outils](#outils) | [Wiki](https://codefirst.iut.uca.fr/git/AllDev/Gestion_de_projet/wiki)
|
||||
|
||||
</div>
|
||||
|
||||
### Apple - ALL IN!
|
||||
|
||||
**Contexte** : Application Swift et SwiftUI pour le projet universitaire de troisième année (B.U.T Informatique de Clermont-Ferrand) intitulé *All In*.
|
||||
</br>
|
||||
|
||||
**Description** : Ce dépôt contient l'ensemble du code pour la partie client iOS de l'application *ALL IN*.
|
||||
</br>
|
||||
|
||||
# Répartition du dépot
|
||||
|
||||
[**Sources**](Sources) : **Code de l'application**
|
||||
|
||||
[**Documentation**](Documentation) : **Documentation de l'application**
|
||||
|
||||
|
||||
# Structures
|
||||
|
||||
- MVVM
|
||||
|
||||
<div align = center>
|
||||
|
||||
<img src="https://codefirst.iut.uca.fr/git/AllDev/Gestion_de_projet/raw/branch/master/Documentation/Diagrammes/AllInMVVM.png" width="600" />
|
||||
|
||||
</div>
|
||||
|
||||
# Fonctionnement
|
||||
|
||||
- ### Comment lancer le projet ?
|
||||
|
||||
:information_source: *Assurez-vous d'avoir un Mac à disposition*
|
||||
|
||||
Tout d'abord si ce n'est pas fait cloner le dépôt de la branche **master/main**, pour cela copier le lien URL du dépôt git :
|
||||
|
||||
<div align = center>
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
Sur votre Mac, ouvrez l'IDE **Xcode** (disponible via l'App Store), puis cloner le dépôt en utilisant l'URL copiée précédemment :
|
||||
|
||||
<div align = center>
|
||||
|
||||
<img src="Documentation/Images/WelcomeToXcode.png" width="500" >
|
||||
|
||||
</div>
|
||||
|
||||
Vous serez alors redirigé par l'IDE et pourrez lancer l'application sur l'appareil de votre choix :
|
||||
|
||||
<div align = center>
|
||||
|
||||
<img src="Documentation/Images/LaunchApp.png" width="900" >
|
||||
|
||||
</div>
|
||||
|
||||
*Si vous souhaitez lancer l'application sur votre appareil personnel, il sera nécessaire de renseigner votre compte iCloud dans l'IDE !*
|
||||
|
||||
# Technologies
|
||||
|
||||
<img src="" />
|
||||
|
||||
Pour réaliser l'interface visuelle, nous avons opté pour **SwiftUI** du fait qu'elle permet de réaliser des interfaces utilisateurs complexes de manière élégante. Le framework est récent, mis à jour régulièrement, et facile à prendre en main pour le développement.
|
||||
|
||||
# Outils
|
||||
|
||||
Pour la partie API, nous avons utilisé plusieurs outils :
|
||||
|
||||
- UserDefaults
|
||||
|
||||
Pour stocker le token localement, nous utilisons l'outil fourni par SwiftUI qui est UserDefaults, afin de réaliser une authentification automatique lorsque le client ouvre l'application, en récupérant son token lors de la précédente connexion.
|
||||
|
||||
<div align="center">
|
||||
|
||||
© AllDev - Apple
|
||||
|
||||
</div>
|
||||
Client IOS
|
@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:StubLib">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Api">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:AllInApp/AllInApp.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:DependencyInjection/DependencyInjection.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Model">
|
||||
</FileRef>
|
||||
</Workspace>
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array/>
|
||||
</dict>
|
||||
</plist>
|
@ -1,39 +0,0 @@
|
||||
//
|
||||
// AllInApp.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Emre on 19/09/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import DependencyInjection
|
||||
import Model
|
||||
|
||||
@main
|
||||
struct AllInApp: App {
|
||||
|
||||
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
|
||||
@Environment(\.scenePhase) var phase
|
||||
let DI = DependencyInjection.shared
|
||||
|
||||
init() {
|
||||
DI.addSingleton(IAuthService.self, AuthService())
|
||||
}
|
||||
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ContentView()
|
||||
.onAppear {
|
||||
AppStateContainer.shared.notificationState.scheduleNotifications()
|
||||
}
|
||||
.onChange(of: phase) { newPhase in
|
||||
switch newPhase {
|
||||
case .background, .inactive:
|
||||
UIApplication.shared.shortcutItems = QuickAction.allShortcutItems
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
//
|
||||
// AppState.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Emre on 17/12/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
class AppStateContainer: ObservableObject {
|
||||
static let shared = AppStateContainer()
|
||||
let loggedState: LoggedState = LoggedState()
|
||||
var onlineStatus: OnlineStatus = OnlineStatus()
|
||||
var notificationState: NotificationService = NotificationService()
|
||||
@Published var user: User?
|
||||
|
||||
@AppStorage("authenticationRefresh", store: UserDefaults(suiteName: "group.alldev.AllIn")!) var authenticationRefresh: String?
|
||||
}
|
||||
|
||||
class LoggedState: ObservableObject {
|
||||
@Published var connectedUser: Bool = false
|
||||
}
|
||||
|
||||
class OnlineStatus: ObservableObject {
|
||||
@Published var isOnline: Bool = true
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xF8",
|
||||
"green" : "0x99",
|
||||
"red" : "0x23"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xF8",
|
||||
"green" : "0x99",
|
||||
"red" : "0x23"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x5B",
|
||||
"green" : "0x5B",
|
||||
"red" : "0x5B"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x5B",
|
||||
"green" : "0x5B",
|
||||
"red" : "0x5B"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x70",
|
||||
"green" : "0x70",
|
||||
"red" : "0x70"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x70",
|
||||
"green" : "0x70",
|
||||
"red" : "0x70"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x9D",
|
||||
"green" : "0x9D",
|
||||
"red" : "0x9F"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x9D",
|
||||
"green" : "0x9D",
|
||||
"red" : "0x9F"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x24",
|
||||
"green" : "0x24",
|
||||
"red" : "0x24"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x24",
|
||||
"green" : "0x24",
|
||||
"red" : "0x24"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xEC",
|
||||
"green" : "0xE8",
|
||||
"red" : "0x00"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xEC",
|
||||
"green" : "0xE8",
|
||||
"red" : "0x00"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xF7",
|
||||
"green" : "0xF7",
|
||||
"red" : "0xF7"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xF7",
|
||||
"green" : "0xF7",
|
||||
"red" : "0xF7"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xCB",
|
||||
"green" : "0xCB",
|
||||
"red" : "0xCB"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xCB",
|
||||
"green" : "0xCB",
|
||||
"red" : "0xCB"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x8A",
|
||||
"green" : "0x2B",
|
||||
"red" : "0xFE"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x8A",
|
||||
"green" : "0x2B",
|
||||
"red" : "0xFE"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xC5",
|
||||
"green" : "0x66",
|
||||
"red" : "0x8A"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xC5",
|
||||
"green" : "0x66",
|
||||
"red" : "0x8A"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x3C",
|
||||
"green" : "0x3C",
|
||||
"red" : "0x3C"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0xFF",
|
||||
"red" : "0xFF"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xE9",
|
||||
"green" : "0xDE",
|
||||
"red" : "0xC4"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xE9",
|
||||
"green" : "0xDE",
|
||||
"red" : "0xC4"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0xB5",
|
||||
"red" : "0xB7"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0xB5",
|
||||
"red" : "0xB7"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0xE8",
|
||||
"red" : "0xD1"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xFF",
|
||||
"green" : "0xE8",
|
||||
"red" : "0xD1"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.6 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "allcoinWhite.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 27 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Group 107 (1).png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 681 B |
Before Width: | Height: | Size: 986 B |
Before Width: | Height: | Size: 3.4 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Group 179.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 832 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Group 210.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "chevronDown.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "chevronRight.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "chevronUp.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.1 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Exclude (1).png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "defaultUser.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "football.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.8 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "friends.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "gear.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "GiftEarn.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 32 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Gift.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 61 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "globe.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 804 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "globe.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 39 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "globePurple.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "launchScreen.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Group 280.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 3.5 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "lock.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 610 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "lockPurple.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 821 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Mask group (3).png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 5.0 MiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "background.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "money.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "paintbrush.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "PinkAllCoin.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 693 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "PinkBadge.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1008 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "pinkFlame.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 3.5 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "UserPink.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 843 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Trophy.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 975 B |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "questionMarkGrey.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2.9 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "questionMark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Trophy.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 7.0 KiB |
@ -1,22 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "threeLines 1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "threeLines.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "videoGame.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "WelcomeBackground.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
//
|
||||
// AllcoinsCount.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas on 28/09/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct AllcoinsCapsule: View {
|
||||
var gains: Int
|
||||
var body: some View {
|
||||
Text("Vous remportez")
|
||||
.foregroundColor(.white)
|
||||
HStack{
|
||||
Text(gains.description)
|
||||
.textStyle(weight: .bold, color: .white, size: 60)
|
||||
Image("allcoinWhiteIcon")
|
||||
.resizable()
|
||||
.frame(width: 40, height:40)
|
||||
.scaledToFit()
|
||||
}
|
||||
.padding([.leading,.trailing],30)
|
||||
.padding([.top,.bottom],10)
|
||||
.background(.white.opacity(0.09))
|
||||
.cornerRadius(999, corners: .allCorners)
|
||||
.clipShape(Capsule())
|
||||
.overlay(RoundedRectangle(cornerRadius: 999).stroke(.white, lineWidth: 1.5))
|
||||
}
|
||||
}
|
||||
|
||||
struct AllcoinsCapsule_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
AllcoinsCapsule(gains: 100)
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
//
|
||||
// AllcoinsCounter.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Emre on 20/09/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct AllcoinsCounter: View {
|
||||
|
||||
var backgroundColor: Color = .white
|
||||
var foregroundColor: Color = AllInColors.primaryColor
|
||||
@ObservedObject var appStateContainer = AppStateContainer.shared
|
||||
|
||||
var body: some View {
|
||||
HStack(alignment: .center) {
|
||||
Text(String(appStateContainer.user!.nbCoins))
|
||||
.contentTransition(.numericText())
|
||||
.fontWeight(.black)
|
||||
.foregroundColor(foregroundColor)
|
||||
Image("allcoinIcon")
|
||||
.resizable()
|
||||
.frame(width: 17, height: 17, alignment: .leading)
|
||||
}
|
||||
.frame(width: 90, height: 40)
|
||||
.background(backgroundColor)
|
||||
.cornerRadius(9999, corners: [.topLeft, .bottomLeft])
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
struct AllcoinsCounter_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
AllcoinsCounter()
|
||||
}
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
//
|
||||
// BetCard.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas on 24/09/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
struct BetCard: View {
|
||||
|
||||
var bet: Bet
|
||||
@State var showDetails: Bool = false
|
||||
@State var showParticipate: Bool = false
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
VStack(alignment: .leading,spacing: 2){
|
||||
HStack{
|
||||
Spacer()
|
||||
Text("bet_proposed_by_format \(bet.author.capitalized)")
|
||||
.font(.system(size: 10))
|
||||
.foregroundColor(AllInColors.grey800Color)
|
||||
}
|
||||
Text(bet.theme)
|
||||
.font(.system(size: 15))
|
||||
.foregroundColor(AllInColors.grey800Color)
|
||||
Text(bet.phrase)
|
||||
.font(.system(size: 20))
|
||||
.fontWeight(.bold)
|
||||
HStack{
|
||||
Text("bet_starting")
|
||||
.font(.system(size: 15))
|
||||
.foregroundColor(AllInColors.grey800Color)
|
||||
TextCapsule(date: bet.endRegisterDate)
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
.frame(width: .infinity)
|
||||
.padding(.all,15)
|
||||
.background(AllInColors.componentBackgroundColor).cornerRadius(20, corners: [.topLeft,.topRight]).padding(.bottom,0)
|
||||
|
||||
VStack(alignment: .leading,spacing: 2){
|
||||
HStack{
|
||||
Spacer()
|
||||
UsersPreview(users: [])
|
||||
Text("bet_players_waiting_format \(bet.invited.count.description)")
|
||||
.font(.system(size: 15))
|
||||
.foregroundColor(AllInColors.grey800Color)
|
||||
.fontWeight(.medium)
|
||||
Spacer()
|
||||
|
||||
}
|
||||
.padding(0)
|
||||
ParticipateButton(isOpen: $showDetails, isParticapatedOpen: $showParticipate, bet: bet)
|
||||
.padding(.top, 5)
|
||||
}
|
||||
.frame(width: .infinity)
|
||||
.padding(.all,8)
|
||||
.background(AllInColors.underComponentBackgroundColor)
|
||||
.cornerRadius(20, corners: [.bottomLeft,.bottomRight])
|
||||
.border(width: 1, edges: [.top], color: AllInColors.delimiterGrey)
|
||||
}
|
||||
.onTapGesture {
|
||||
showDetails.toggle()
|
||||
}
|
||||
.fullScreenCover(isPresented: $showDetails) {
|
||||
DetailsView(isModalPresented: $showDetails, isModalParticipated: $showParticipate, id: bet.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct BetCard_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
BetCard(bet: BinaryBet(theme: "Football - Finale de la Ligue des Champions",
|
||||
phrase: "Le gagnant de la finale sera l'équipe avec le plus de tirs au but.",
|
||||
endRegisterDate: Date().addingTimeInterval(86400),
|
||||
endBetDate: Date().addingTimeInterval(172800),
|
||||
isPrivate: false,
|
||||
status: .inProgress,
|
||||
invited: [],
|
||||
author: "Imri"))
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
//
|
||||
// BetLineLoading.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas Delanier on 19/01/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
struct BetLineLoading: View {
|
||||
|
||||
@State var showInfos: Bool = false
|
||||
var bet: BetDetail
|
||||
|
||||
var value: CGFloat {
|
||||
let totalParticipations = bet.participations.count
|
||||
let numberOfYes = bet.participations.filter { $0.answer.uppercased() == "YES" }.count
|
||||
let numberOfNo = bet.participations.filter { $0.answer.uppercased() == "NO" }.count
|
||||
if(numberOfNo == 0 && numberOfYes == 0){
|
||||
return 0.5
|
||||
}
|
||||
|
||||
return totalParticipations > 0 ? CGFloat(numberOfYes) / CGFloat(totalParticipations) : 0.0
|
||||
}
|
||||
|
||||
var yesParticipations: [Participation] {
|
||||
bet.participations.filter { $0.answer.uppercased() == "YES" }
|
||||
}
|
||||
|
||||
var noParticipations: [Participation] {
|
||||
bet.participations.filter { $0.answer.uppercased() == "NO" }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
switch bet.bet {
|
||||
case is BinaryBet:
|
||||
BinaryBetLine(bet: bet)
|
||||
case is CustomBet:
|
||||
CustomBetLine(bet: bet)
|
||||
default:
|
||||
BinaryBetLine(bet: bet)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,168 +0,0 @@
|
||||
//
|
||||
// BinaryBetLine.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas Delanier on 10/06/2024.
|
||||
//
|
||||
|
||||
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
struct BinaryBetLine: View {
|
||||
|
||||
@State var showInfos: Bool = false
|
||||
var bet: BetDetail
|
||||
|
||||
var value: CGFloat {
|
||||
let totalParticipations = bet.participations.count
|
||||
let numberOfYes = bet.participations.filter { $0.answer.uppercased() == "YES" }.count
|
||||
let numberOfNo = bet.participations.filter { $0.answer.uppercased() == "NO" }.count
|
||||
if(numberOfNo == 0 && numberOfYes == 0){
|
||||
return 0.5
|
||||
}
|
||||
|
||||
return totalParticipations > 0 ? CGFloat(numberOfYes) / CGFloat(totalParticipations) : 0.0
|
||||
}
|
||||
|
||||
var yesParticipations: [Participation] {
|
||||
bet.participations.filter { $0.answer.uppercased() == "YES" }
|
||||
}
|
||||
|
||||
var noParticipations: [Participation] {
|
||||
bet.participations.filter { $0.answer.uppercased() == "NO" }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
HStack(spacing: 5) {
|
||||
Text("OUI")
|
||||
.font(.system(size: 25))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.blue200)
|
||||
Spacer()
|
||||
Text("NON")
|
||||
.font(.system(size: 25))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.pink100)
|
||||
}
|
||||
|
||||
GeometryReader { geometry in
|
||||
ZStack(alignment: .leading) {
|
||||
HStack{
|
||||
Spacer()
|
||||
Rectangle()
|
||||
.frame(width: min(CGFloat(1-self.value) * geometry.size.width, geometry.size.width-20), height: 17)
|
||||
.foregroundStyle(AllInColors.PinkBetGradiant).cornerRadius(999)
|
||||
}
|
||||
|
||||
HStack(spacing: 0) {
|
||||
Rectangle()
|
||||
.frame(width: min(CGFloat(self.value) * geometry.size.width, geometry.size.width-20), height: 17)
|
||||
.foregroundStyle(AllInColors.BlueBetGradiant)
|
||||
.cornerRadius(999)
|
||||
Image("loadingHeartIcon")
|
||||
.resizable()
|
||||
.frame(width: 29, height: 32)
|
||||
.padding(.leading, -10)
|
||||
}
|
||||
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
}
|
||||
.frame(height: 40)
|
||||
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("bet_status_details_drawer")
|
||||
.textStyle(weight: .medium, color: AllInColors.primaryTextColor, size: 10)
|
||||
Image(showInfos ? "chevronUpIcon" : "chevronDownIcon")
|
||||
.resizable()
|
||||
.frame(width: 10, height: 7)
|
||||
.scaledToFill()
|
||||
}
|
||||
.onTapGesture {
|
||||
withAnimation {
|
||||
showInfos.toggle()
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
.padding(.trailing, 5)
|
||||
|
||||
if showInfos {
|
||||
VStack(spacing: 1) {
|
||||
HStack(spacing: 5) {
|
||||
Image("blueAllCoinIcon")
|
||||
.resizable()
|
||||
.frame(width:12, height: 12)
|
||||
Text(yesParticipations.reduce(0, {x,y in x + y.stake}).description)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.blue200)
|
||||
Spacer()
|
||||
Text(noParticipations.reduce(0, {x,y in x + y.stake}).description)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.pink100)
|
||||
Image("pinkAllCoinIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
}
|
||||
HStack(spacing: 5){
|
||||
Image("bluePersonIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text(yesParticipations.count.description)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.blue200)
|
||||
Spacer()
|
||||
Text(noParticipations.count.description)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.pink100)
|
||||
Image("pinkPersonIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
|
||||
}
|
||||
HStack(spacing: 5){
|
||||
Image("blueBadgeIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text(yesParticipations.max(by: { $0.stake < $1.stake })?.stake.description ?? "0")
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.blue200)
|
||||
Spacer()
|
||||
Text(noParticipations.max(by: { $0.stake < $1.stake })?.stake.description ?? "0")
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.pink100)
|
||||
Image("pinkBadgeIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
|
||||
}
|
||||
HStack(spacing: 5){
|
||||
Image("blueTrophyIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text("1.2")
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.blue200)
|
||||
Spacer()
|
||||
Text("1.2")
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(AllInColors.pink100)
|
||||
Image("pinkTrophyIcon")
|
||||
.resizable()
|
||||
.frame(width:12, height: 12)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
//
|
||||
// ChoiceCapsule.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas on 26/09/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
struct ChoiceCapsule: View {
|
||||
let filter: BetFilter
|
||||
@State var pressed = false
|
||||
@ObservedObject var viewModel: BetViewModel
|
||||
|
||||
var label: String {
|
||||
switch filter {
|
||||
case .isPublic:
|
||||
return String(localized: "bet_public")
|
||||
case .isInvitation:
|
||||
return String(localized: "bet_invitation")
|
||||
case .inProgress:
|
||||
return String(localized: "bet_current")
|
||||
case .isFinished:
|
||||
return String(localized: "bet_finished")
|
||||
default:
|
||||
return "NaN"
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if(pressed) {
|
||||
Text(label)
|
||||
.textStyle(weight: .semibold, color: .white, size: 15)
|
||||
.padding([.leading,.trailing],13.8)
|
||||
.padding([.top,.bottom], 7)
|
||||
.background(AllInColors.lightPurpleColor)
|
||||
.clipShape(Capsule())
|
||||
} else {
|
||||
Text(label)
|
||||
.textStyle(weight: .regular, color: AllInColors.grey800Color, size: 15)
|
||||
.padding([.leading,.trailing], 15)
|
||||
.padding([.top,.bottom], 7)
|
||||
.background(AllInColors.underComponentBackgroundColor)
|
||||
.clipShape(Capsule())
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 20)
|
||||
.stroke(AllInColors.delimiterGrey, lineWidth: 1)
|
||||
)
|
||||
}
|
||||
}
|
||||
.onTapGesture() {
|
||||
pressed.toggle()
|
||||
if(pressed) {
|
||||
viewModel.filters.insert(filter)
|
||||
} else {
|
||||
viewModel.filters.remove(filter)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
//
|
||||
// ChoiceFinalAnswerCell.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas Delanier on 29/01/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
struct ChoiceFinalAnswerCell: View {
|
||||
|
||||
var selected = false
|
||||
var answer: AnswerDetail
|
||||
var rawColor = AllInColors.blueAccentColor
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
HStack {
|
||||
Spacer()
|
||||
Text(answer.response)
|
||||
.textStyle(weight: .bold, color: selected ? .white : rawColor, size: 40)
|
||||
.padding(.vertical, 10)
|
||||
Spacer()
|
||||
}
|
||||
HStack {
|
||||
Spacer()
|
||||
OddCapsule(
|
||||
backgroundColor: selected ? .white : AllInColors.purpleAccentColor,
|
||||
foregroundColor: selected ? AllInColors.purpleAccentColor : .white,
|
||||
odd: answer.odds
|
||||
)
|
||||
.padding(.trailing, 20)
|
||||
.scaleEffect(0.9)
|
||||
}
|
||||
}
|
||||
.background(selected ? AllInColors.purpleAccentColor : .white)
|
||||
.cornerRadius(17)
|
||||
.scaleEffect(selected ? 1.02 : 1)
|
||||
.animation(.easeInOut(duration: 0.3), value: selected)
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
//
|
||||
// ConfidentialityButton.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Emre on 29/09/2023.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ConfidentialityButton: View {
|
||||
|
||||
var image: String
|
||||
var text: String
|
||||
var selected: Bool
|
||||
|
||||
var body: some View {
|
||||
HStack() {
|
||||
Image(selected ? image + "Icon" : image + "PurpleIcon")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.padding(.vertical, 12)
|
||||
|
||||
Text(text)
|
||||
.font(.system(size: 17))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(selected ? .white : AllInColors.lightPurpleColor)
|
||||
}
|
||||
.frame(width: 110, height: 45)
|
||||
.background(selected ? AllInColors.lightPurpleColor : AllInColors.componentBackgroundColor)
|
||||
.cornerRadius(10)
|
||||
}
|
||||
}
|
||||
|
||||
struct ConfidentialityButton_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ConfidentialityButton(image: "lock", text: "Privé", selected: true)
|
||||
}
|
||||
}
|
@ -1,141 +0,0 @@
|
||||
//
|
||||
// CustomBetLine.swift
|
||||
// AllIn
|
||||
//
|
||||
// Created by Lucas Delanier on 10/06/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Model
|
||||
|
||||
struct CustomBetLine: View {
|
||||
|
||||
@State var showInfos: [String: Bool] = [:]
|
||||
var bet: BetDetail
|
||||
|
||||
var participationsForAnswer: [String: [Participation]] {
|
||||
Dictionary(grouping: bet.participations, by: { $0.answer.uppercased() })
|
||||
}
|
||||
|
||||
var sortedAnswers: [AnswerDetail] {
|
||||
bet.answers.sorted { $0.totalParticipants > $1.totalParticipants }
|
||||
}
|
||||
|
||||
func getTextStyle(for answer: AnswerDetail) -> Font.Weight {
|
||||
return answer == sortedAnswers.first ? .bold : .light
|
||||
}
|
||||
|
||||
func getColor(for answer: AnswerDetail) -> Color {
|
||||
return answer == sortedAnswers.first ? AllInColors.pinkAccentColor : AllInColors.blueAccentColor
|
||||
}
|
||||
|
||||
func getGradiant(for answer: AnswerDetail) -> LinearGradient {
|
||||
return answer == sortedAnswers.first ? AllInColors.PinkBetGradiant : AllInColors.BlueBetLineGradiant
|
||||
}
|
||||
|
||||
func getFlameImage(for answer: AnswerDetail) -> String {
|
||||
return answer == sortedAnswers.first ? "pinkFlameIcon" : "blueFlameIcon"
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
ForEach(sortedAnswers, id: \.response) { answer in
|
||||
let participations = participationsForAnswer[answer.response.uppercased()] ?? []
|
||||
let totalParticipations = bet.participations.count
|
||||
let percentage = totalParticipations > 0 ? CGFloat(participations.count) / CGFloat(totalParticipations) : 0.0
|
||||
|
||||
VStack {
|
||||
HStack {
|
||||
Text(answer.response)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(getTextStyle(for: answer))
|
||||
.foregroundColor(getColor(for: answer))
|
||||
Spacer()
|
||||
}
|
||||
|
||||
GeometryReader { geometry in
|
||||
ZStack(alignment: .leading) {
|
||||
HStack(spacing: 0) {
|
||||
Rectangle()
|
||||
.frame(width: min(percentage * geometry.size.width, geometry.size.width-20), height: 17)
|
||||
.foregroundStyle(getGradiant(for: answer))
|
||||
.cornerRadius(999, corners: [.topLeft, .bottomLeft])
|
||||
Image(getFlameImage(for: answer))
|
||||
.resizable()
|
||||
.frame(width: 29, height: 32)
|
||||
.padding(.leading, -6)
|
||||
Text("\(Int(percentage * 100))%")
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundStyle(getColor(for: answer))
|
||||
.padding(.leading, 2)
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
}
|
||||
.frame(height: 40)
|
||||
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("bet_status_details_drawer")
|
||||
.textStyle(weight: .medium, color: AllInColors.primaryTextColor, size: 10)
|
||||
Image(showInfos[answer.response] ?? false ? "chevronUpIcon" : "chevronDownIcon")
|
||||
.resizable()
|
||||
.frame(width: 10, height: 7)
|
||||
.scaledToFill()
|
||||
}
|
||||
.onTapGesture {
|
||||
withAnimation {
|
||||
showInfos[answer.response, default: false].toggle()
|
||||
}
|
||||
}
|
||||
.padding(.trailing, 5)
|
||||
|
||||
if showInfos[answer.response] ?? false {
|
||||
HStack{
|
||||
VStack(alignment: .leading,spacing: 1) {
|
||||
HStack(spacing: 5) {
|
||||
Image(answer == sortedAnswers.first ? "pinkAllCoinIcon" : "blueAllCoinIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text(participations.reduce(0, { x, y in x + y.stake }).description)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(getColor(for: answer))
|
||||
}
|
||||
HStack(spacing: 5) {
|
||||
Image(answer == sortedAnswers.first ? "pinkPersonIcon" : "bluePersonIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text(participations.count.description)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(getColor(for: answer))
|
||||
}
|
||||
HStack(spacing: 5) {
|
||||
Image(answer == sortedAnswers.first ? "pinkBadgeIcon" : "blueBadgeIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text(participations.max(by: { $0.stake < $1.stake })?.stake.description ?? "0")
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(getColor(for: answer))
|
||||
}
|
||||
HStack(spacing: 5) {
|
||||
Image(answer == sortedAnswers.first ? "pinkTrophyIcon" : "blueTrophyIcon")
|
||||
.resizable()
|
||||
.frame(width: 12, height: 12)
|
||||
Text(String(format: "%.2f", answer.odds))
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(getColor(for: answer))
|
||||
}
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|