Skip to content

Commit f3a91c1

Browse files
authored
Merge pull request #230 from woocommerce/feature/177-dashboard-mark5
Dashboard Mark 5: Paged UI + Live data
2 parents 04c0460 + 7509551 commit f3a91c1

27 files changed

+999
-47
lines changed

Networking/Networking/Model/Stats/OrderStats.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ public struct OrderStats: Decodable {
88
public let granularity: StatGranularity
99
public let quantity: String
1010
public let fields: [String]
11-
public let totalGrossSales: Float
12-
public let totalNetSales: Float
11+
public let totalGrossSales: Double
12+
public let totalNetSales: Double
1313
public let totalOrders: Int
1414
public let totalProducts: Int
15-
public let averageGrossSales: Float
16-
public let averageNetSales: Float
17-
public let averageOrders: Float
18-
public let averageProducts: Float
15+
public let averageGrossSales: Double
16+
public let averageNetSales: Double
17+
public let averageOrders: Double
18+
public let averageProducts: Double
1919
public let items: [OrderStatsItem]?
2020

2121

@@ -31,15 +31,15 @@ public struct OrderStats: Decodable {
3131
let fields = try container.decode([String].self, forKey: .fields)
3232
let rawData: [[AnyCodable]] = try container.decode([[AnyCodable]].self, forKey: .data)
3333

34-
let totalGrossSales = try container.decode(Float.self, forKey: .totalGrossSales)
35-
let totalNetSales = try container.decode(Float.self, forKey: .totalNetSales)
34+
let totalGrossSales = try container.decode(Double.self, forKey: .totalGrossSales)
35+
let totalNetSales = try container.decode(Double.self, forKey: .totalNetSales)
3636
let totalOrders = try container.decode(Int.self, forKey: .totalOrders)
3737
let totalProducts = try container.decode(Int.self, forKey: .totalProducts)
3838

39-
let averageGrossSales = try container.decode(Float.self, forKey: .averageGrossSales)
40-
let averageNetSales = try container.decode(Float.self, forKey: .averageNetSales)
41-
let averageOrders = try container.decode(Float.self, forKey: .averageOrders)
42-
let averageProducts = try container.decode(Float.self, forKey: .averageProducts)
39+
let averageGrossSales = try container.decode(Double.self, forKey: .averageGrossSales)
40+
let averageNetSales = try container.decode(Double.self, forKey: .averageNetSales)
41+
let averageOrders = try container.decode(Double.self, forKey: .averageOrders)
42+
let averageProducts = try container.decode(Double.self, forKey: .averageProducts)
4343

4444
let items = rawData.map({ OrderStatsItem(fieldNames: fields, rawData: $0) })
4545

@@ -49,7 +49,7 @@ public struct OrderStats: Decodable {
4949

5050
/// OrderStats struct initializer.
5151
///
52-
public init(date: String, granularity: StatGranularity, quantity: String, fields: [String], items: [OrderStatsItem]?, totalGrossSales: Float, totalNetSales: Float, totalOrders: Int, totalProducts: Int, averageGrossSales: Float, averageNetSales: Float, averageOrders: Float, averageProducts: Float) {
52+
public init(date: String, granularity: StatGranularity, quantity: String, fields: [String], items: [OrderStatsItem]?, totalGrossSales: Double, totalNetSales: Double, totalOrders: Int, totalProducts: Int, averageGrossSales: Double, averageNetSales: Double, averageOrders: Double, averageProducts: Double) {
5353
self.date = date
5454
self.granularity = granularity
5555
self.quantity = quantity

Networking/Networking/Model/Stats/SiteVisitStats.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ public struct SiteVisitStats: Decodable {
3434
self.fields = fields
3535
self.items = items
3636
}
37+
38+
// MARK: Computed Properties
39+
40+
public var totalVisitors: Int {
41+
return items?.map({ $0.visitors }).reduce(0, +) ?? 0
42+
}
3743
}
3844

3945

Networking/Networking/Model/Stats/StatGranularity.swift

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ public enum StatGranularity: String, Decodable {
88
case week
99
case month
1010
case year
11+
12+
public var pluralizedString: String {
13+
switch self {
14+
case .day:
15+
return NSLocalizedString("Days", comment: "Plural of 'day' — a statistical unit")
16+
case .week:
17+
return NSLocalizedString("Weeks", comment: "Plural of 'week' — a statistical unit")
18+
case .month:
19+
return NSLocalizedString("Months", comment: "Plural of 'month' — a statistical unit")
20+
case .year:
21+
return NSLocalizedString("Years", comment: "Plural of 'year' — a statistical unit")
22+
}
23+
}
24+
1125
}
1226

1327
// MARK: - StringConvertible Conformance
@@ -19,13 +33,13 @@ extension StatGranularity: CustomStringConvertible {
1933
public var description: String {
2034
switch self {
2135
case .day:
22-
return NSLocalizedString("Day", comment: "Order statistics unit - a single day")
36+
return NSLocalizedString("Day", comment: "Statistical unit - a single day")
2337
case .week:
24-
return NSLocalizedString("Week", comment: "Order statistics unit - a single week")
38+
return NSLocalizedString("Week", comment: "Statistical unit - a single week")
2539
case .month:
26-
return NSLocalizedString("Month", comment: "Order statistics unit - a single week")
40+
return NSLocalizedString("Month", comment: "Statistical unit - a single week")
2741
case .year:
28-
return NSLocalizedString("Year", comment: "Order statistics unit - a single year")
42+
return NSLocalizedString("Year", comment: "Statistical unit - a single year")
2943
}
3044
}
3145
}

Networking/NetworkingTests/Mapper/OrderStatsMapperTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class OrderStatsMapperTests: XCTestCase {
8484
XCTAssertEqual(weekStats.totalOrders, 65)
8585
XCTAssertEqual(weekStats.totalProducts, 87)
8686
XCTAssertEqual(weekStats.totalGrossSales, 2858.52)
87-
XCTAssertEqual(weekStats.totalNetSales, 2833.55)
87+
XCTAssertEqual(weekStats.totalNetSales, 2833.5499999999997)
8888
XCTAssertEqual(weekStats.averageGrossSales, 92.2103)
8989
XCTAssertEqual(weekStats.averageNetSales, 91.4048)
9090
XCTAssertEqual(weekStats.averageOrders, 2.0968)

Networking/NetworkingTests/Mapper/SiteVisitStatsMapperTests.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class SiteVisitStatsMapperTests: XCTestCase {
1818
XCTAssertEqual(dayStats.date, "2018-08-06")
1919
XCTAssertEqual(dayStats.fields.count, 7)
2020
XCTAssertEqual(dayStats.items!.count, 12)
21+
XCTAssertEqual(dayStats.totalVisitors, 105)
2122

2223
let sampleItem1 = dayStats.items![0]
2324
XCTAssertEqual(sampleItem1.period, "2018-07-26")
@@ -50,6 +51,7 @@ class SiteVisitStatsMapperTests: XCTestCase {
5051
XCTAssertEqual(weekStats.date, "2018-08-06")
5152
XCTAssertEqual(weekStats.fields.count, 7)
5253
XCTAssertEqual(weekStats.items!.count, 12)
54+
XCTAssertEqual(weekStats.totalVisitors, 123123241)
5355

5456
let sampleItem1 = weekStats.items![0]
5557
XCTAssertEqual(sampleItem1.period, "2018W05W21")
@@ -83,11 +85,12 @@ class SiteVisitStatsMapperTests: XCTestCase {
8385
XCTAssertEqual(monthStats.date, "2018-08-06")
8486
XCTAssertEqual(monthStats.fields.count, 7)
8587
XCTAssertEqual(monthStats.items!.count, 12)
88+
XCTAssertEqual(monthStats.totalVisitors, 292)
8689

8790
let sampleItem1 = monthStats.items![0]
8891
XCTAssertEqual(sampleItem1.period, "2017-09-01")
8992
XCTAssertEqual(sampleItem1.views, 36)
90-
XCTAssertEqual(sampleItem1.visitors, 24)
93+
XCTAssertEqual(sampleItem1.visitors, 224)
9194
XCTAssertEqual(sampleItem1.likes, 1)
9295
XCTAssertEqual(sampleItem1.reblogs, 0)
9396
XCTAssertEqual(sampleItem1.comments, 3)
@@ -115,11 +118,12 @@ class SiteVisitStatsMapperTests: XCTestCase {
115118
XCTAssertEqual(yearStats.date, "2018-08-06")
116119
XCTAssertEqual(yearStats.fields.count, 7)
117120
XCTAssertEqual(yearStats.items!.count, 5)
121+
XCTAssertEqual(yearStats.totalVisitors, 3336)
118122

119123
let sampleItem1 = yearStats.items![0]
120124
XCTAssertEqual(sampleItem1.period, "2014-01-01")
121125
XCTAssertEqual(sampleItem1.views, 12821)
122-
XCTAssertEqual(sampleItem1.visitors, 1135)
126+
XCTAssertEqual(sampleItem1.visitors, 1145)
123127
XCTAssertEqual(sampleItem1.likes, 1094)
124128
XCTAssertEqual(sampleItem1.reblogs, 0)
125129
XCTAssertEqual(sampleItem1.comments, 1611)

Networking/NetworkingTests/Responses/site-visits-month.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
[
1515
"2017-09-01",
1616
36,
17-
24,
17+
224,
1818
1,
1919
0,
2020
3,

Networking/NetworkingTests/Responses/site-visits-week.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
[
105105
"2018W07W30",
106106
2,
107-
2,
107+
100,
108108
0,
109109
0,
110110
0,

Networking/NetworkingTests/Responses/site-visits-year.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
[
1515
"2014-01-01",
1616
12821,
17-
1135,
17+
1145,
1818
1094,
1919
0,
2020
1611,

Podfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ target 'WooCommerce' do
2929
pod 'Crashlytics', '~> 3.10'
3030
pod 'KeychainAccess', '~> 3.1'
3131
pod 'CocoaLumberjack/Swift', '~> 3.4'
32+
pod 'XLPagerTabStrip', '~> 8.0'
3233

3334
# Unit Tests
3435
# ==========

Podfile.lock

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ PODS:
6464
- FormatterKit/TimeIntervalFormatter (= 1.8.2)
6565
- WordPressUI (1.0.6)
6666
- wpxmlrpc (0.8.3)
67+
- XLPagerTabStrip (8.0.1)
6768

6869
DEPENDENCIES:
6970
- Alamofire (~> 4.7)
@@ -74,6 +75,7 @@ DEPENDENCIES:
7475
- KeychainAccess (~> 3.1)
7576
- WordPressAuthenticator (= 1.0.5)
7677
- WordPressShared (= 1.0.8)
78+
- XLPagerTabStrip (~> 8.0)
7779

7880
SPEC REPOS:
7981
https://github.com/cocoapods/specs.git:
@@ -98,6 +100,7 @@ SPEC REPOS:
98100
- WordPressShared
99101
- WordPressUI
100102
- wpxmlrpc
103+
- XLPagerTabStrip
101104

102105
EXTERNAL SOURCES:
103106
Automattic-Tracks-iOS:
@@ -132,7 +135,8 @@ SPEC CHECKSUMS:
132135
WordPressShared: 063e1e8b1a7aaf635abf17f091a2d235a068abdc
133136
WordPressUI: af141587ec444f9af753a00605bd0d3f14d8d8a3
134137
wpxmlrpc: bfc572f62ce7ee897f6f38b098d2ba08732ecef4
138+
XLPagerTabStrip: c908b17cbf42fcd2598ee1adfc49bae25444d88a
135139

136-
PODFILE CHECKSUM: 9c0f38b4e1f7d6de164e2c4279a5112a7f95f936
140+
PODFILE CHECKSUM: fad8937db279e4bf9807a4985a2418c4832c9b35
137141

138142
COCOAPODS: 1.5.3

0 commit comments

Comments
 (0)