Skip to content

Commit

Permalink
Changed design
Browse files Browse the repository at this point in the history
  • Loading branch information
cp-nirali-s committed Nov 20, 2024
1 parent 4e7ab1a commit c685efd
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 75 deletions.
4 changes: 2 additions & 2 deletions Data/Data/Repository/ExpenseRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class ExpenseRepository: ObservableObject {
try await updateExpense(group: group, expense: updatedExpense, oldExpense: oldExpense, type: type)
return updatedExpense
}

private func uploadImage(imageData: Data, expense: Expense) async throws -> String {
guard let expenseId = expense.id else { return "" }
return try await storageManager.uploadImage(for: .expense, id: expenseId, imageData: imageData) ?? ""
Expand All @@ -70,7 +70,7 @@ public class ExpenseRepository: ObservableObject {
try await store.updateExpense(groupId: groupId, expense: expense)
try await addActivityLogForExpense(group: group, expense: expense, oldExpense: oldExpense, type: type)
}

public func deleteExpense(group: Groups, expense: Expense) async throws {
guard let userId = preference.user?.id else { return }

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"images" : [
{
"filename" : "date.icon.svg",
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "date.icon (1).svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
114 changes: 44 additions & 70 deletions Splito/UI/Home/Expense/AddExpenseView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,14 @@ struct AddExpenseView: View {
VSpacer(16)

ExpenseInfoView(viewModel: viewModel, focusedField: $focusedField)

ExpenseImageView(showImagePickerOptions: $viewModel.showImagePickerOptions, image: viewModel.image, imageUrl: viewModel.imageUrl,
handleProfileTap: viewModel.handleImageTap, handleActionSelection: viewModel.handleActionSelection(_:))


Spacer(minLength: 40)
}
}
.scrollIndicators(.hidden)
.scrollBounceBehavior(.basedOnSize)

BottomCardView(date: $viewModel.expenseDate, handleCameraBtnTap: viewModel.handleCameraBtnTap)
}
}
.padding(.horizontal, 16)
Expand Down Expand Up @@ -78,6 +77,9 @@ struct AddExpenseView: View {
sourceType: !viewModel.sourceTypeIsCamera ? .photoLibrary : .camera,
image: $viewModel.image, isPresented: $viewModel.showImagePicker)
}
.confirmationDialog("", isPresented: $viewModel.showImagePickerOptions, titleVisibility: .hidden) {
ImagePickerOptionsView(image: viewModel.image, imageUrl: viewModel.imageUrl, handleActionSelection: viewModel.handleActionSelection(_:))
}
.toolbar {
ToolbarItem(placement: .topBarLeading) {
Button("Cancel") {
Expand All @@ -104,6 +106,33 @@ struct AddExpenseView: View {
}
}

private struct BottomCardView: View {

@Binding var date: Date

let handleCameraBtnTap: (() -> Void)

var body: some View {
HStack(spacing: 16) {
Spacer()

DatePickerRow(date: $date)

Button {
handleCameraBtnTap()
} label: {
Image(systemName: "camera")
.resizable()
.scaledToFit()
.frame(width: 16, height: 14)
.padding(.horizontal, 5)
.padding(.vertical, 6)
}
}
.padding(.vertical, 8)
}
}

private struct ExpenseInfoView: View {

@ObservedObject var viewModel: AddExpenseViewModel
Expand All @@ -124,10 +153,6 @@ private struct ExpenseInfoView: View {
focusedField.wrappedValue = .amount
}
.focused(focusedField, equals: .amount)
.padding(.vertical, 8)

ExpenseDetailRow(name: $viewModel.expenseName, date: $viewModel.expenseDate,
focusedField: focusedField, subtitle: "Date", field: .date)

HStack(alignment: .top, spacing: 16) {
ExpenseDetailRow(name: $viewModel.expenseName, date: $viewModel.expenseDate, focusedField: focusedField,
Expand Down Expand Up @@ -229,25 +254,24 @@ struct DatePickerRow: View {
}

var body: some View {
HStack {
Text(dateFormatter.string(from: date))
.font(.subTitle2())
.foregroundStyle(primaryText)
.frame(maxWidth: .infinity, alignment: .leading)
.contentShape(Rectangle())
}
.onTapGesture {
Button {
tempDate = date
showDatePicker = true
UIApplication.shared.endEditing()
} label: {
Image(.calendarIcon)
.resizable()
.scaledToFit()
.frame(width: 16, height: 16)
.padding(4)
}
.sheet(isPresented: $showDatePicker) {
VStack(spacing: 0) {
NavigationBarTopView(title: "Choose date", leadingButton: EmptyView(),
trailingButton: DismissButton(padding: (16, 0), foregroundColor: primaryText, onDismissAction: {
showDatePicker = false
})
.fontWeight(.regular)
trailingButton: DismissButton(padding: (16, 0), foregroundColor: primaryText, onDismissAction: {
showDatePicker = false
})
.fontWeight(.regular)
)
.padding(.leading, 16)

Expand All @@ -272,53 +296,3 @@ struct DatePickerRow: View {
}
}
}

private struct ExpenseImageView: View {

@Binding var showImagePickerOptions: Bool

let image: UIImage?
let imageUrl: String?

let handleProfileTap: (() -> Void)
let handleActionSelection: ((ActionsOfSheet) -> Void)

var body: some View {
ZStack {
if let image {
Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fill)
} else if let imageUrl, let url = URL(string: imageUrl) {
KFImage(url)
.placeholder({ _ in
ImageLoaderView()
})
.resizable()
.aspectRatio(contentMode: .fill)
} else {
Image(.group)
.resizable()
.scaledToFill()
}
}
.frame(width: 80, height: 80)
.background(container2Color)
.clipShape(RoundedRectangle(cornerRadius: 12))
.overlay {
Image(.editPencilIcon)
.resizable()
.scaledToFit()
.frame(width: 18, height: 18, alignment: .center)
.padding(4)
.background(containerColor)
.clipShape(Circle())
.padding([.top, .leading], 67)
}
.padding(.horizontal, 16)
.onTapGesture(perform: handleProfileTap)
.confirmationDialog("", isPresented: $showImagePickerOptions, titleVisibility: .hidden) {
ImagePickerOptionsView(image: image, imageUrl: imageUrl, handleActionSelection: handleActionSelection)
}
}
}
6 changes: 3 additions & 3 deletions Splito/UI/Home/Expense/AddExpenseViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ class AddExpenseViewModel: BaseViewModel, ObservableObject {
@Inject private var userRepository: UserRepository
@Inject private var groupRepository: GroupRepository
@Inject private var expenseRepository: ExpenseRepository

@Published var expenseName = ""
@Published var imageUrl: String?
@Published private(set) var payerName = "You"

@Published var image: UIImage?
@Published var expenseDate = Date()
@Published var expenseAmount: Double = 0
Expand Down Expand Up @@ -211,7 +211,7 @@ extension AddExpenseViewModel {
showGroupSelection = expenseId == nil
}

func handleImageTap() {
func handleCameraBtnTap() {
showImagePickerOptions = true
}

Expand Down

0 comments on commit c685efd

Please sign in to comment.