crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

NoticeView.swift (2678B)


      1 import SwiftUI
      2 
      3 /// One-time explanatory sheet shown when a device is moved off the pre-v4
      4 /// CloudKit container and its local cache is wiped for launch. Presented once
      5 /// from the library; the decision to show it is made in
      6 /// `AppServices.migrateOffLegacyContainerIfNeeded` and persisted under
      7 /// `AppServices.showV4NoticeDefaultsKey`.
      8 struct NoticeView: View {
      9     /// Clears the persisted flag so the sheet never shows again.
     10     let onDismiss: () -> Void
     11 
     12     var body: some View {
     13         VStack(spacing: 24) {
     14             Spacer(minLength: 0)
     15 
     16             Image(systemName: "trash")
     17                 .font(.system(size: 64, weight: .semibold))
     18                 .foregroundStyle(.tint)
     19                 .accessibilityHidden(true)
     20 
     21             VStack(spacing: 12) {
     22                 Text("All Data Reset")
     23                     .font(.largeTitle.bold())
     24                     .multilineTextAlignment(.center)
     25 
     26                 Text(
     27                     """
     28                     The production database has been updated in preparation for \
     29                     the public release. This has reset all data (including \
     30                     puzzles). I'm very sorry for the disruption.
     31                     """
     32                 )
     33                 .font(.callout)
     34                 .multilineTextAlignment(.leading)
     35                 .frame(maxWidth: .infinity, alignment: .leading)
     36 
     37                 Text(
     38                     """
     39                     To share a game, please send the share link to your \
     40                     collaborator(s). After the first game is shared like this, \
     41                     your friendships with these players will be reestablished.
     42                     """
     43                 )
     44                 .font(.callout)
     45                 .multilineTextAlignment(.leading)
     46                 .frame(maxWidth: .infinity, alignment: .leading)
     47 
     48                 Text(
     49                     """
     50                     Again, I am very sorry for the disruption. I'm deeply \
     51                     grateful for all the help developing Crossmate so far.
     52                     """
     53                 )
     54                 .font(.callout)
     55                 .foregroundStyle(.secondary)
     56                 .multilineTextAlignment(.leading)
     57                 .frame(maxWidth: .infinity, alignment: .leading)
     58             }
     59 
     60             Spacer(minLength: 0)
     61 
     62             Button(action: onDismiss) {
     63                 Text("Got It")
     64                     .font(.headline)
     65                     .frame(maxWidth: .infinity)
     66             }
     67             .buttonStyle(.borderedProminent)
     68             .controlSize(.large)
     69         }
     70         .padding(24)
     71         .padding(.vertical, 16)
     72         .interactiveDismissDisabled()
     73     }
     74 }