feat(searchItem): add colors for the search item icon, move defaults into a separate files

This commit is contained in:
2024-11-27 14:50:44 +01:00
parent 448bad5c96
commit 67a1d71f94
3 changed files with 208 additions and 96 deletions

View File

@@ -37,7 +37,7 @@ struct ContentView: View {
Map(position: $position) { Map(position: $position) {
ForEach(0..<directions.count) { i in ForEach(0..<directions.count) { i in
MapPolyline(directions[i].polyline) MapPolyline(directions[i].polyline)
.stroke(Constants.routeColor[i], lineWidth: Constants.routeWidth) .stroke(Defaults.routeColor[i], lineWidth: Defaults.routeWidth)
} }
} }
.sheet( .sheet(
@@ -61,6 +61,7 @@ struct ContentView: View {
MapCamera(centerCoordinate: userLocation, distance: 1000)) MapCamera(centerCoordinate: userLocation, distance: 1000))
} }
} }
MapCompass()
} }
.onAppear { .onAppear {
locationManager.requestAuthorization() locationManager.requestAuthorization()
@@ -79,14 +80,6 @@ struct ContentView: View {
viewModel.saveValue(value) viewModel.saveValue(value)
} }
} }
enum Constants {
static let routeColor: [Color] = [
.blue,
.red,
.yellow,
]
static let routeWidth: CGFloat = 8
}
#Preview { #Preview {
ContentView() ContentView()
} }

View File

@@ -39,8 +39,8 @@ struct SearchItemView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.font(.title) .font(.title)
} }
.foregroundStyle(.green) .foregroundStyle(
// Spacer() Defaults.getColorFor(pointOfInterest: location.pointOfInterestCategory))
HStack { HStack {
VStack { VStack {
HStack { HStack {
@@ -111,90 +111,5 @@ struct SearchItemView: View {
} }
} }
struct Defaults {
static let pointOfInterestIcons: [MKPointOfInterestCategory: String] = [
.museum: "building.columns.fill",
.musicVenue: "music.note.house.fill",
.theater: "theatermasks.fill",
.library: "books.vertical.fill",
.planetarium: "sparkles",
.school: "graduationcap.fill",
.university: "building.columns.fill",
.movieTheater: "film.fill",
.nightlife: "music.mic",
.fireStation: "flame.fill",
.hospital: "cross.case.fill",
.pharmacy: "cross.fill",
.police: "shield.fill",
.castle: "building.fill",
.fortress: "shield.lefthalf.filled",
.landmark: "building.columns.fill",
.nationalMonument: "star.circle.fill",
.bakery: "takeoutbag.and.cup.and.straw",
.brewery: "mug.fill",
.cafe: "cup.and.saucer.fill",
.distillery: "wineglass.fill",
.foodMarket: "cart.fill",
.restaurant: "fork.knife",
.winery: "wineglass",
.animalService: "pawprint.fill",
.atm: "creditcard.fill",
.automotiveRepair: "wrench.and.screwdriver.fill",
.bank: "building.columns.fill",
.beauty: "scissors",
.evCharger: "bolt.car.fill",
.fitnessCenter: "dumbbell.fill",
.laundry: "washer.fill",
.mailbox: "envelope.fill",
.postOffice: "envelope.fill",
.restroom: "figure.restroom",
.spa: "drop.fill",
.store: "bag.fill",
.amusementPark: "ferriswheel",
.aquarium: "tortoise.fill",
.beach: "beach.umbrella.fill",
.campground: "tent.fill",
.fairground: "carousel.fill",
.marina: "sailboat.fill",
.nationalPark: "leaf.fill",
.park: "tree.fill",
.rvPark: "car.fill",
.zoo: "pawprint.fill",
.baseball: "baseball.fill",
.basketball: "basketball.fill",
.bowling: "figure.bowling",
.goKart: "car.circle.fill",
.golf: "flag.and.hole.fill",
.hiking: "figure.hiking",
.miniGolf: "flag.and.hole.fill",
.rockClimbing: "figure.climbing",
.skatePark: "figure.skating",
.skating: "figure.skating",
.skiing: "figure.skiing.downhill",
.soccer: "soccerball",
.stadium: "sportscourt.fill",
.tennis: "tennisball.fill",
.volleyball: "volleyball.fill",
.airport: "airplane",
.carRental: "car.fill",
.conventionCenter: "building.2.fill",
.gasStation: "fuelpump.fill",
.hotel: "bed.double.fill",
.parking: "parkingsign.circle.fill",
.publicTransport: "bus.fill",
.fishing: "fish.fill",
.kayaking: "figure.rowing",
.surfing: "figure.surfing",
.swimming: "figure.pool.swim",
]
static func getIconFor(pointOfInterest: MKPointOfInterestCategory?) -> String {
if pointOfInterest == nil {
return "mappin"
}
return pointOfInterestIcons[pointOfInterest!] ?? "mappin"
}
}
// let address = location.placemark.title // let address = location.placemark.title
} }

204
StepMap/Utils.swift Normal file
View File

@@ -0,0 +1,204 @@
//
// Utils.swift
// StepMap
//
// Created by Oliver Hnát on 27.11.2024.
//
import Foundation
import MapKit
import SwiftUI
struct Defaults {
static let routeColor: [Color] = [
.blue,
.red,
.yellow,
]
static let routeWidth: CGFloat = 8
static let pointOfInterestIcons: [MKPointOfInterestCategory: String] = [
.museum: "building.columns.fill",
.musicVenue: "music.note.house.fill",
.theater: "theatermasks.fill",
.library: "books.vertical.fill",
.planetarium: "sparkles",
.school: "graduationcap.fill",
.university: "building.columns.fill",
.movieTheater: "film.fill",
.nightlife: "music.mic",
.fireStation: "flame.fill",
.hospital: "cross.case.fill",
.pharmacy: "cross.fill",
.police: "shield.fill",
.castle: "building.fill",
.fortress: "shield.lefthalf.filled",
.landmark: "building.columns.fill",
.nationalMonument: "star.circle.fill",
.bakery: "takeoutbag.and.cup.and.straw",
.brewery: "mug.fill",
.cafe: "cup.and.saucer.fill",
.distillery: "wineglass.fill",
.foodMarket: "cart.fill",
.restaurant: "fork.knife",
.winery: "wineglass",
.animalService: "pawprint.fill",
.atm: "creditcard.fill",
.automotiveRepair: "wrench.and.screwdriver.fill",
.bank: "building.columns.fill",
.beauty: "scissors",
.evCharger: "bolt.car.fill",
.fitnessCenter: "dumbbell.fill",
.laundry: "washer.fill",
.mailbox: "envelope.fill",
.postOffice: "envelope.fill",
.restroom: "figure.restroom",
.spa: "drop.fill",
.store: "bag.fill",
.amusementPark: "ferriswheel",
.aquarium: "tortoise.fill",
.beach: "beach.umbrella.fill",
.campground: "tent.fill",
.fairground: "carousel.fill",
.marina: "sailboat.fill",
.nationalPark: "leaf.fill",
.park: "tree.fill",
.rvPark: "car.fill",
.zoo: "pawprint.fill",
.baseball: "baseball.fill",
.basketball: "basketball.fill",
.bowling: "figure.bowling",
.goKart: "car.circle.fill",
.golf: "flag.and.hole.fill",
.hiking: "figure.hiking",
.miniGolf: "flag.and.hole.fill",
.rockClimbing: "figure.climbing",
.skatePark: "figure.skating",
.skating: "figure.skating",
.skiing: "figure.skiing.downhill",
.soccer: "soccerball",
.stadium: "sportscourt.fill",
.tennis: "tennisball.fill",
.volleyball: "volleyball.fill",
.airport: "airplane",
.carRental: "car.fill",
.conventionCenter: "building.2.fill",
.gasStation: "fuelpump.fill",
.hotel: "bed.double.fill",
.parking: "parkingsign.circle.fill",
.publicTransport: "bus.fill",
.fishing: "fish.fill",
.kayaking: "figure.rowing",
.surfing: "figure.surfing",
.swimming: "figure.pool.swim",
]
static let pointOfInterestColors: [MKPointOfInterestCategory: Color] = [
// Cultural & Educational
.museum: .blue,
.musicVenue: .purple,
.theater: .purple,
.library: .blue,
.planetarium: .teal,
.school: .orange,
.university: .orange,
// Entertainment
.movieTheater: .red,
.nightlife: .pink,
// Emergency & Services
.fireStation: .red,
.hospital: .red,
.pharmacy: .green,
.police: .blue,
// Historical & Landmarks
.castle: .brown,
.fortress: .brown,
.landmark: .yellow,
.nationalMonument: Color(red: 252, green: 194, blue: 0),
// Food & Drink
.bakery: .yellow,
.brewery: .brown,
.cafe: .brown,
.distillery: .brown,
.foodMarket: .green,
.restaurant: .orange,
.winery: .purple,
// Commercial & Services
.animalService: .green,
.atm: .green,
.automotiveRepair: .gray,
.bank: .green,
.beauty: .pink,
.evCharger: .green,
.fitnessCenter: .purple,
.laundry: .blue,
.mailbox: .blue,
.postOffice: .blue,
.restroom: .gray,
.spa: .teal,
.store: .yellow,
// Nature & Recreation
.amusementPark: .yellow,
.aquarium: .teal,
.beach: .yellow,
.campground: .green,
.fairground: .yellow,
.marina: .blue,
.nationalPark: .green,
.park: .green,
.rvPark: .green,
.zoo: .green,
// Sports & Activities
.baseball: .red,
.basketball: .orange,
.bowling: .purple,
.goKart: .red,
.golf: .green,
.hiking: .green,
.miniGolf: .green,
.rockClimbing: .gray,
.skatePark: .gray,
.skating: .gray,
.skiing: .blue,
.soccer: .green,
.stadium: .blue,
.tennis: .green,
.volleyball: .yellow,
// Transportation
.airport: .blue,
.carRental: .gray,
.conventionCenter: .blue,
.gasStation: .yellow,
.hotel: .purple,
.parking: .gray,
.publicTransport: .blue,
// Outdoor Activities
.fishing: .blue,
.kayaking: .blue,
.surfing: .blue,
.swimming: .blue,
]
static func getIconFor(pointOfInterest: MKPointOfInterestCategory?) -> String {
if pointOfInterest == nil {
return "mappin"
}
return pointOfInterestIcons[pointOfInterest!] ?? "mappin"
}
static func getColorFor(pointOfInterest: MKPointOfInterestCategory?) -> Color {
if pointOfInterest == nil {
return .red
}
return pointOfInterestColors[pointOfInterest!] ?? .red
}
}