Implemented the FeedItem component in the Feed framework.
This commit is contained in:
parent
58ac11eaf7
commit
de79b45b16
90
Frameworks/Feed/Bundle/Sources/UI/Components/FeedItem.swift
Normal file
90
Frameworks/Feed/Bundle/Sources/UI/Components/FeedItem.swift
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
//
|
||||||
|
// FeedItem.swift
|
||||||
|
// ReviewsFeed
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 19/03/2024.
|
||||||
|
// Copyright © 2024 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct FeedItem: View {
|
||||||
|
|
||||||
|
// MARK: Constants
|
||||||
|
private let item: Review
|
||||||
|
|
||||||
|
// MARK: Initialisers
|
||||||
|
init(_ item: Review) {
|
||||||
|
self.item = item
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Body
|
||||||
|
var body: some View {
|
||||||
|
VStack(
|
||||||
|
alignment: .leading,
|
||||||
|
spacing: 16
|
||||||
|
) {
|
||||||
|
HStack(
|
||||||
|
alignment: .bottom,
|
||||||
|
spacing: 8
|
||||||
|
) {
|
||||||
|
Image(systemName: "person.crop.circle")
|
||||||
|
|
||||||
|
Text(item.author)
|
||||||
|
.font(.subheadline)
|
||||||
|
}
|
||||||
|
|
||||||
|
VStack(spacing: 8) {
|
||||||
|
Text(item.title)
|
||||||
|
.font(.headline)
|
||||||
|
.lineLimit(2)
|
||||||
|
.fullWidth()
|
||||||
|
|
||||||
|
Text(item.comment)
|
||||||
|
.font(.body)
|
||||||
|
.lineLimit(4)
|
||||||
|
.fullWidth()
|
||||||
|
}
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
|
||||||
|
HStack(alignment: .bottom) {
|
||||||
|
ForEach(1...5, id: \.self) { index in
|
||||||
|
if #available(iOS 15.0, *) {
|
||||||
|
Image(systemName: "star")
|
||||||
|
.symbolVariant(index <= item.rating.stars ? .fill : .none)
|
||||||
|
} else {
|
||||||
|
Image(systemName: index <= item.rating.stars ? "star.fill" : "star")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
HStack(
|
||||||
|
alignment: .bottom,
|
||||||
|
spacing: 4
|
||||||
|
) {
|
||||||
|
Text(item.rating.appVersion)
|
||||||
|
|
||||||
|
Image(systemName: "iphone.gen3.circle")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.font(.subheadline)
|
||||||
|
}
|
||||||
|
.padding(.vertical, 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Previews
|
||||||
|
#Preview("Feed Item") {
|
||||||
|
FeedItem(.init(
|
||||||
|
author: "Some author name here...",
|
||||||
|
comment: "Some review comment here...",
|
||||||
|
id: 0,
|
||||||
|
rating: .init(
|
||||||
|
stars: 1,
|
||||||
|
appVersion: "v1.2.3"
|
||||||
|
),
|
||||||
|
title: "Some review title here..."
|
||||||
|
))
|
||||||
|
}
|
@ -7,6 +7,7 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
0220ADA32BA90646001E6A9F /* FeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0220ADA22BA90646001E6A9F /* FeedItem.swift */; };
|
||||||
02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */; };
|
02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */; };
|
||||||
02DC7F9F2BA51793000EEEBE /* ReviewsFeed.h in Headers */ = {isa = PBXBuildFile; fileRef = 02DC7F912BA51793000EEEBE /* ReviewsFeed.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
02DC7F9F2BA51793000EEEBE /* ReviewsFeed.h in Headers */ = {isa = PBXBuildFile; fileRef = 02DC7F912BA51793000EEEBE /* ReviewsFeed.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
02DC7FA22BA51793000EEEBE /* ReviewsFeed.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */; };
|
02DC7FA22BA51793000EEEBE /* ReviewsFeed.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */; };
|
||||||
@ -47,6 +48,7 @@
|
|||||||
/* End PBXCopyFilesBuildPhase section */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
0220ADA22BA90646001E6A9F /* FeedItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItem.swift; sourceTree = "<group>"; };
|
||||||
02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedViewModel.swift; sourceTree = "<group>"; };
|
02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedViewModel.swift; sourceTree = "<group>"; };
|
||||||
02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReviewsFeed.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReviewsFeed.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
02DC7F912BA51793000EEEBE /* ReviewsFeed.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReviewsFeed.h; sourceTree = "<group>"; };
|
02DC7F912BA51793000EEEBE /* ReviewsFeed.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReviewsFeed.h; sourceTree = "<group>"; };
|
||||||
@ -122,6 +124,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
345AD13024C6EE64004E2EE1 /* ReviewCell.swift */,
|
345AD13024C6EE64004E2EE1 /* ReviewCell.swift */,
|
||||||
|
0220ADA22BA90646001E6A9F /* FeedItem.swift */,
|
||||||
);
|
);
|
||||||
path = Components;
|
path = Components;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -367,6 +370,7 @@
|
|||||||
files = (
|
files = (
|
||||||
02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */,
|
02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */,
|
||||||
02DC7FAC2BA51B4C000EEEBE /* DetailsViewController.swift in Sources */,
|
02DC7FAC2BA51B4C000EEEBE /* DetailsViewController.swift in Sources */,
|
||||||
|
0220ADA32BA90646001E6A9F /* FeedItem.swift in Sources */,
|
||||||
02DC7FAF2BA51B4C000EEEBE /* Review.swift in Sources */,
|
02DC7FAF2BA51B4C000EEEBE /* Review.swift in Sources */,
|
||||||
02DC7FAE2BA51B4C000EEEBE /* FeedViewController.swift in Sources */,
|
02DC7FAE2BA51B4C000EEEBE /* FeedViewController.swift in Sources */,
|
||||||
02DC7FAD2BA51B4C000EEEBE /* ReviewCell.swift in Sources */,
|
02DC7FAD2BA51B4C000EEEBE /* ReviewCell.swift in Sources */,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user