From a2ed7c43bbecba5369fe34b1b147495a70742a98 Mon Sep 17 00:00:00 2001 From: dscyrescotti Date: Mon, 24 Jun 2024 21:23:42 +0700 Subject: [PATCH] feat: show loading indicator when photo is being loaded --- Memola/Canvas/Tool/Core/Tool.swift | 2 ++ Memola/Features/Memo/Memo/MemoView.swift | 7 ++++++- Memola/Features/Memo/Toolbar/Toolbar.swift | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Memola/Canvas/Tool/Core/Tool.swift b/Memola/Canvas/Tool/Core/Tool.swift index 0f604c2..a7641a4 100644 --- a/Memola/Canvas/Tool/Core/Tool.swift +++ b/Memola/Canvas/Tool/Core/Tool.swift @@ -20,6 +20,7 @@ public class Tool: NSObject, ObservableObject { @Published var draggedPen: Pen? // MARK: - Photo @Published var selectedPhotoItem: PhotoItem? + @Published var isLoadingPhoto: Bool = false @Published var selection: ToolSelection = .hand @@ -120,6 +121,7 @@ public class Tool: NSObject, ObservableObject { func selectPhoto(_ image: UIImage, for canvasID: NSManagedObjectID) { guard let (resizedImage, dimension) = resizePhoto(of: image) else { return } let photoItem = bookmarkPhoto(of: resizedImage, in: dimension, with: canvasID) + isLoadingPhoto = false withAnimation { selectedPhotoItem = photoItem } diff --git a/Memola/Features/Memo/Memo/MemoView.swift b/Memola/Features/Memo/Memo/MemoView.swift index 6711e35..c81966b 100644 --- a/Memola/Features/Memo/Memo/MemoView.swift +++ b/Memola/Features/Memo/Memo/MemoView.swift @@ -46,7 +46,7 @@ struct MemoView: View { .overlay(alignment: .bottomLeading) { zoomControl } - .disabled(textFieldState) + .disabled(textFieldState || tool.isLoadingPhoto) .overlay(alignment: .top) { Toolbar(size: size, memo: memo, tool: tool, canvas: canvas, history: history) } @@ -61,6 +61,11 @@ struct MemoView: View { EmptyView() } } + .overlay { + if tool.isLoadingPhoto { + loadingIndicator("Loading photo...") + } + } } @ViewBuilder diff --git a/Memola/Features/Memo/Toolbar/Toolbar.swift b/Memola/Features/Memo/Toolbar/Toolbar.swift index 226c11f..15d2546 100644 --- a/Memola/Features/Memo/Toolbar/Toolbar.swift +++ b/Memola/Features/Memo/Toolbar/Toolbar.swift @@ -62,6 +62,7 @@ struct Toolbar: View { .onChange(of: photosPickerItem) { oldValue, newValue in if newValue != nil { Task { + tool.isLoadingPhoto = true let data = try? await newValue?.loadTransferable(type: Data.self) if let data, let image = UIImage(data: data) { tool.selectPhoto(image, for: canvas.canvasID)