Guest User

Untitled

a guest
Apr 18th, 2020
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 4.90 KB | None | 0 0
  1. //
  2. //  DetailedView.swift
  3. //  Dashy
  4. //
  5. //  Created by Георгий Александров on 15.04.2020.
  6. //  Copyright © 2020 Георгий Александров. All rights reserved.
  7. //
  8.  
  9. import EventKit
  10. import SwiftUI
  11.  
  12. struct DetailedView: View {
  13.     @State private var showShareSheet = false
  14.     @State var calendarShow = false
  15.     func addEventToCalendar(title: String, description: String?, startDate: Date, endDate _: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) {
  16.         let eventStore = EKEventStore()
  17.         eventStore.requestAccess(to: .event, completion: { granted, error in
  18.             if granted, error == nil {
  19.                 let event = EKEvent(eventStore: eventStore)
  20.                 event.title = title
  21.                 event.startDate = startDate
  22.                 event.endDate = startDate
  23.                 event.notes = description
  24.                 event.calendar = eventStore.defaultCalendarForNewEvents
  25.                 do {
  26.                     try eventStore.save(event, span: .thisEvent)
  27.  
  28.                 } catch let e as NSError {
  29.                     completion?(false, e)
  30.                     return
  31.                 }
  32.                 self.calendarShow = true
  33.                 completion?(true, nil)
  34.             } else {
  35.                 completion?(false, error as NSError?)
  36.             }
  37.         })
  38.     }
  39.  
  40.     @State var daysCount: String = ""
  41.     var task: Task = Task(title: "Раз два три четыре пять шесть", description: "", classs: [:], materials: "", id: 1, deadline: "", class_pid: "", public_id: "")
  42.     var body: some View {
  43.         ScrollView {
  44.             VStack {
  45.                 HStack {
  46.                     Text(task.title).font(.system(size: 37, weight: .semibold)).padding(.trailing).lineLimit(100).fixedSize(horizontal: false, vertical: true)
  47.                     Spacer()
  48.                     Image(systemName: "square.and.arrow.up").onTapGesture {
  49.                         self.showShareSheet = true
  50.                     }
  51.                 }.padding()
  52.                 HStack {
  53.                     Text(task.description).font(.system(size: 24, weight: .medium)).fixedSize(horizontal: false, vertical: true)
  54.                     Spacer()
  55.                 }.padding(.horizontal)
  56.                 HStack {
  57.                     Text(self.daysCount).font(.system(size: 18, weight: .regular)).onAppear(perform: {
  58.                         let dateFormatter = DateFormatter()
  59.                         dateFormatter.dateFormat = "dd-MM-yyyy"
  60.                         let date = dateFormatter.date(from: self.task.deadline)
  61.                         self.daysCount = getDateObservation(date: date!)
  62.                     })
  63.                     Spacer()
  64.                 }.padding(.horizontal)
  65.                 Divider().padding()
  66.  
  67.                 HStack {
  68.                     Text("Дедлайн").font(.system(size: 24, weight: .medium))
  69.                     Spacer()
  70.                     Image(systemName: "calendar.badge.plus").offset(x: 0, y: 10).onTapGesture {
  71.                         let dateFormatter = DateFormatter()
  72.                         dateFormatter.dateFormat = "dd-MM-yyyy"
  73.                         let date = dateFormatter.date(from: self.task.deadline)
  74.                         self.addEventToCalendar(title: self.task.title, description: self.task.description, startDate: date!, endDate: date!)
  75.                     }.alert(isPresented: $calendarShow, content: {
  76.                         Alert(title: Text("Добавлено в календарь"), message: Text("Задание «\(self.task.title)» успешно добавлено в календарь"), dismissButton: .default(Text("ОК")))
  77.                     })
  78.                 }.padding(.horizontal)
  79.                 HStack {
  80.                     Text(task.deadline).font(.system(size: 18, weight: .regular))
  81.                     Spacer()
  82.                 }.padding(.horizontal)
  83.                 Divider().padding()
  84.                 HStack {
  85.                     Text("Материалы к уроку").font(.system(size: 24, weight: .medium))
  86.                     Spacer()
  87.                 }.padding(.horizontal)
  88.                 HStack {
  89.                     Text(task.materials).font(.system(size: 18, weight: .regular)).fixedSize(horizontal: false, vertical: true)
  90.                     Spacer()
  91.                 }.padding(.horizontal)
  92.                     .sheet(isPresented: $showShareSheet) {
  93.                         ShareSheet(activityItems: ["Задание «\(self.task.title)» \nПосмотреть на Dashy: alxndrv.pythonanywhere.com/task/\(self.task.public_id)"])
  94.                     }
  95.  
  96.                 Spacer()
  97.                     .edgesIgnoringSafeArea(.all)
  98.             }
  99.             Spacer()
  100.         }
  101.     }
  102. }
  103.  
  104. struct DetailedView_Previews: PreviewProvider {
  105.     static var previews: some View {
  106.         DetailedView().previewDevice("iPhone 11")
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment