Advertisement
randomPenguin12345

SiloData

Jan 9th, 2025 (edited)
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 6.70 KB | None | 0 0
  1. import Foundation
  2.  
  3. // Observable Object that holds all silo-related data
  4. class SiloData: ObservableObject {
  5.  
  6.     // MARK: - Silo Properties
  7.     @Published var id: String = UUID().uuidString
  8.     @Published var siloName: String = ""
  9.     @Published var houseNumber: String = ""
  10.     @Published var postalCode: String = ""
  11.     @Published var street: String = ""
  12.     @Published var city: String = ""
  13.     @Published var selectedMainType: String = "Housing Association"
  14.     @Published var selectedSubType: String = ""
  15.     @Published var isRegisteredWithKvK: Bool = false
  16.     @Published var siloDescription: String = ""
  17.     @Published var kvkNumber: String = ""
  18.     @Published var registeredName: String = ""
  19.     @Published var tradingName: String = ""
  20.     @Published var selectedProvince: Int = 0
  21.     @Published var silos: [Silo] = [] // Array to hold multiple silos
  22.     @Published var currentSiloID: String? // ID of the currently selected silo
  23.     @Published var selectedSilo: Silo? // Holds the currently selected silo
  24.     @Published var selectedRoleId: String? // Track selected role's ID
  25.     @Published var roleName: String = "" // Role name being edited
  26.     @Published var roles: [Role] = [] // List of roles
  27.    
  28.     func printAllSilos() {
  29.         print("All Silos:")
  30.         for silo in silos {
  31.             print("Silo ID: \(silo.id)")
  32.             print("Silo Name: \(silo.siloName)")
  33.             print("Address: \(silo.street), \(silo.houseNumber), \(silo.postalCode), \(silo.city)")
  34.             print("Main Type: \(silo.selectedMainType), Sub Type: \(silo.selectedSubType)")
  35.             print("Is Registered with KvK: \(silo.isRegisteredWithKvK)")
  36.             print("Roles:")
  37.             for role in silo.roles {
  38.                 print("  - Role ID: \(role.id), Name: \(role.name), Is Admin: \(role.isAdmin)")
  39.             }
  40.             print("---")
  41.         }
  42.     }
  43.  
  44.  
  45.     // MARK: - Managing Roles
  46.     func updateSelectedRoleId(_ roleId: String?) {
  47.         selectedRoleId = roleId
  48.     }
  49.    
  50.     func addRoleToSelectedSilo(_ role: Role) {
  51.         guard let currentSiloId = selectedSilo?.id else {
  52.             print("No selected silo to add role")
  53.             return
  54.         }
  55.  
  56.         if let index = silos.firstIndex(where: { $0.id == currentSiloId }) {
  57.             silos[index].roles.append(role)
  58.             print("Role added to silo '\(silos[index].siloName)': \(role.name)")
  59.             selectedSilo = silos[index] // Update the reference
  60.         } else {
  61.             print("Could not find the selected silo in the list")
  62.         }
  63.     }
  64.  
  65.    
  66.     func deleteRoleFromSelectedSilo(role: Role) {
  67.         guard let currentSiloId = selectedSilo?.id else {
  68.             print("No selected silo to delete role from")
  69.             return
  70.         }
  71.  
  72.         // Find the index of the silo in the array
  73.         if let index = silos.firstIndex(where: { $0.id == currentSiloId }) {
  74.             // Remove the role from the silo's roles
  75.             silos[index].roles.removeAll { $0.id == role.id }
  76.             print("Role deleted from silo '\(silos[index].siloName)': \(role.name)")
  77.            
  78.             // Update the selectedSilo reference
  79.             selectedSilo = silos[index]
  80.         } else {
  81.             print("Could not find the selected silo in the list")
  82.         }
  83.     }
  84.    
  85.     func deleteRole(role: Role) {
  86.         if let index = roles.firstIndex(where: { $0.id == role.id }) {
  87.             roles.remove(at: index)
  88.         }
  89.     }
  90.    
  91.  
  92.     // MARK: - Subtypes logic
  93.     var subTypesForSelectedMainType: [String] {
  94.         return subTypes[selectedMainType] ?? []
  95.     }
  96.  
  97.     // MARK: - Initializer
  98.     init(id: String = UUID().uuidString,
  99.          siloName: String = "",
  100.          houseNumber: String = "",
  101.          postalCode: String = "",
  102.          street: String = "",
  103.          city: String = "",
  104.          selectedMainType: String = "Housing Association",
  105.          selectedSubType: String = "",
  106.          isRegisteredWithKvK: Bool = false,
  107.          siloDescription: String = "",
  108.          kvkNumber: String = "",
  109.          registeredName: String = "",
  110.          tradingName: String = "",
  111.          selectedProvince: Int = 0,
  112.          selectedRoleId: String? = nil,
  113.          roles: [Role] = []) {
  114.         self.id = id
  115.         self.siloName = siloName
  116.         self.houseNumber = houseNumber
  117.         self.postalCode = postalCode
  118.         self.street = street
  119.         self.city = city
  120.         self.selectedMainType = selectedMainType
  121.         self.selectedSubType = selectedSubType
  122.         self.isRegisteredWithKvK = isRegisteredWithKvK
  123.         self.siloDescription = siloDescription
  124.         self.kvkNumber = kvkNumber
  125.         self.registeredName = registeredName
  126.         self.tradingName = tradingName
  127.         self.selectedProvince = selectedProvince
  128.         self.selectedRoleId = selectedRoleId
  129.         self.roles = roles
  130.     }
  131. }
  132.  
  133. // MARK: - Silo Struct
  134. struct Silo {
  135.     var id: String
  136.     var siloName: String
  137.     var houseNumber: String
  138.     var postalCode: String
  139.     var street: String
  140.     var city: String
  141.     var selectedMainType: String
  142.     var selectedSubType: String
  143.     var isRegisteredWithKvK: Bool
  144.     var siloDescription: String
  145.     var kvkNumber: String
  146.     var registeredName: String
  147.     var tradingName: String
  148.     var selectedProvince: Int
  149.     var selectedRoleId: String?
  150.     var roles: [Role]
  151.    
  152.     init(id: String = UUID().uuidString,
  153.          siloName: String = "",
  154.          houseNumber: String = "",
  155.          postalCode: String = "",
  156.          street: String = "",
  157.          city: String = "",
  158.          selectedMainType: String = "Housing Association",
  159.          selectedSubType: String = "",
  160.          isRegisteredWithKvK: Bool = false,
  161.          siloDescription: String = "",
  162.          kvkNumber: String = "",
  163.          registeredName: String = "",
  164.          tradingName: String = "",
  165.          selectedProvince: Int = 0,
  166.          selectedRoleId: String? = nil,
  167.          roles: [Role] = []) {
  168.         self.id = id
  169.         self.siloName = siloName
  170.         self.houseNumber = houseNumber
  171.         self.postalCode = postalCode
  172.         self.street = street
  173.         self.city = city
  174.         self.selectedMainType = selectedMainType
  175.         self.selectedSubType = selectedSubType
  176.         self.isRegisteredWithKvK = isRegisteredWithKvK
  177.         self.siloDescription = siloDescription
  178.         self.kvkNumber = kvkNumber
  179.         self.registeredName = registeredName
  180.         self.tradingName = tradingName
  181.         self.selectedProvince = selectedProvince
  182.         self.selectedRoleId = selectedRoleId
  183.         self.roles = roles
  184.     }
  185.    
  186. }
  187.  
  188. // MARK: - Role Struct
  189. struct Role: Identifiable, Hashable {
  190.     var id: String
  191.     var name: String
  192.     var isAdmin: Bool
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement