Implemented the TopWordsView view in the Feed framework.

This commit is contained in:
Javier Cicchelli 2024-03-21 02:02:28 +01:00
parent c9ea6de3d5
commit 235b8eeba5
2 changed files with 86 additions and 0 deletions

View File

@ -0,0 +1,82 @@
//
// TopWordsView.swift
// ReviewsFeed
//
// Created by Javier Cicchelli on 21/03/2024.
// Copyright © 2024 Röck+Cöde. All rights reserved.
//
import SwiftUI
struct TopWordsView: View {
// MARK: Constants
private let topWords: [TopWord]
// MARK: Initialisers
init(_ topWords: [TopWord]) {
self.topWords = topWords
}
// MARK: Body
var body: some View {
HStack {
Spacer()
HStack(spacing: 12) {
ForEach(topWords) { topWord in
Item(
term: topWord.term,
count: String(topWord.count)
)
}
}
Spacer()
}
}
}
// MARK: - Structs
private extension TopWordsView {
struct Item: View {
// MARK: Constants
let term: String
let count: String
// MARK: Body
var body: some View {
HStack(
alignment: .center,
spacing: 6
) {
Text(count)
.font(.footnote)
.foregroundColor(.primary.opacity(0.75))
Text(term)
.lineLimit(1)
.font(.body.bold())
.foregroundColor(.primary)
}
.padding(.horizontal, 10)
.padding(.vertical, 6)
.background(Color.secondary.opacity(0.75))
.cornerRadius(8)
}
}
}
// MARK: - Previews
#Preview {
TopWordsView([
.init(id: "1", term: "Something", count: 3),
.init(id: "2", term: "Something", count: 2),
.init(id: "3", term: "Something", count: 1),
])
.padding(.horizontal)
}

View File

@ -24,6 +24,7 @@
02DC7FB52BA52520000EEEBE /* ReviewsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 02DC7FB42BA52520000EEEBE /* ReviewsKit */; };
02EACF2E2BABA34600FF8ECD /* FeedItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02EACF2D2BABA34600FF8ECD /* FeedItemCell.swift */; };
02EACF302BABA50D00FF8ECD /* TopWordsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02EACF2F2BABA50D00FF8ECD /* TopWordsCell.swift */; };
02EACF322BABB23A00FF8ECD /* TopWordsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02EACF312BABB23A00FF8ECD /* TopWordsView.swift */; };
02EACF342BABB28900FF8ECD /* TopWord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02EACF332BABB28900FF8ECD /* TopWord.swift */; };
02EACF362BABB2F200FF8ECD /* TopWord+DTOs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02EACF352BABB2F200FF8ECD /* TopWord+DTOs.swift */; };
345AD11C24C6EDD9004E2EE1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345AD11B24C6EDD9004E2EE1 /* AppDelegate.swift */; };
@ -68,6 +69,7 @@
02DC7FB12BA52084000EEEBE /* Libraries */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Libraries; sourceTree = "<group>"; };
02EACF2D2BABA34600FF8ECD /* FeedItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItemCell.swift; sourceTree = "<group>"; };
02EACF2F2BABA50D00FF8ECD /* TopWordsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopWordsCell.swift; sourceTree = "<group>"; };
02EACF312BABB23A00FF8ECD /* TopWordsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopWordsView.swift; sourceTree = "<group>"; };
02EACF332BABB28900FF8ECD /* TopWord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopWord.swift; sourceTree = "<group>"; };
02EACF352BABB2F200FF8ECD /* TopWord+DTOs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TopWord+DTOs.swift"; sourceTree = "<group>"; };
345AD11824C6EDD9004E2EE1 /* Reviews.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Reviews.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -154,6 +156,7 @@
isa = PBXGroup;
children = (
0220ADA22BA90646001E6A9F /* FeedItemView.swift */,
02EACF312BABB23A00FF8ECD /* TopWordsView.swift */,
);
path = Views;
sourceTree = "<group>";
@ -445,6 +448,7 @@
02EACF362BABB2F200FF8ECD /* TopWord+DTOs.swift in Sources */,
02DC7FAF2BA51B4C000EEEBE /* Review.swift in Sources */,
02DC7FAE2BA51B4C000EEEBE /* FeedListViewController.swift in Sources */,
02EACF322BABB23A00FF8ECD /* TopWordsView.swift in Sources */,
02909E792BAB6B0200710E14 /* FilterOption.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;