-
246GME Remit.xcodeproj/project.pbxproj
-
24GME Remit/APIs/Router/APIRouter.swift
-
24GME Remit/AppDelegate.swift
-
6GME Remit/Modules/Home/User Interface/View/HomeViewController.swift
-
41GME Remit/Modules/Notice/DetailNotification/Application Logic/Interactor/DetailNotificationInteractor.swift
-
16GME Remit/Modules/Notice/DetailNotification/Application Logic/Interactor/DetailNotificationInteractorIO.swift
-
27GME Remit/Modules/Notice/DetailNotification/Application Logic/Model/DetailNoticeModel.swift
-
19GME Remit/Modules/Notice/DetailNotification/Application Logic/Service/DetailNotificationService.swift
-
15GME Remit/Modules/Notice/DetailNotification/Application Logic/Service/DetailNotificationServiceType.swift
-
64GME Remit/Modules/Notice/DetailNotification/User Interface/Presenter/DetailNotificationPresenter.swift
-
186GME Remit/Modules/Notice/DetailNotification/User Interface/View/DetailNotification.storyboard
-
97GME Remit/Modules/Notice/DetailNotification/User Interface/View/DetailNotificationViewController.swift
-
48GME Remit/Modules/Notice/DetailNotification/User Interface/Wireframe/DetailNotificationWireframe.swift
-
13GME Remit/Modules/Notice/DetailNotification/User Interface/Wireframe/DetailNotificationWireframeInput.swift
-
43GME Remit/Modules/Notice/NotificationHistory/Application Logic/Interactor/NotificationHistoryInteractor.swift
-
16GME Remit/Modules/Notice/NotificationHistory/Application Logic/Interactor/NotificationHistoryInteractorIO.swift
-
27GME Remit/Modules/Notice/NotificationHistory/Application Logic/Model/NoticeModel.swift
-
19GME Remit/Modules/Notice/NotificationHistory/Application Logic/Service/NotificationHistoryService.swift
-
14GME Remit/Modules/Notice/NotificationHistory/Application Logic/Service/NotificationHistoryServiceType.swift
-
68GME Remit/Modules/Notice/NotificationHistory/User Interface/Presenter/NotificationHistoryPresenter.swift
-
25GME Remit/Modules/Notice/NotificationHistory/User Interface/View/NotificationCell.swift
-
179GME Remit/Modules/Notice/NotificationHistory/User Interface/View/NotificationHistory.storyboard
-
109GME Remit/Modules/Notice/NotificationHistory/User Interface/View/NotificationHistoryViewController.swift
-
44GME Remit/Modules/Notice/NotificationHistory/User Interface/Wireframe/NotificationHistoryWireframe.swift
-
13GME Remit/Modules/Notice/NotificationHistory/User Interface/Wireframe/NotificationHistoryWireframeInput.swift
-
0GME Remit/Modules/Notice/PopupNotification/Application Logic/Interactor/PopupNotificationInteractor.swift
-
0GME Remit/Modules/Notice/PopupNotification/Application Logic/Interactor/PopupNotificationInteractorIO.swift
-
0GME Remit/Modules/Notice/PopupNotification/Application Logic/Service/PopupNotificationService.swift
-
0GME Remit/Modules/Notice/PopupNotification/Application Logic/Service/PopupNotificationServiceType.swift
-
0GME Remit/Modules/Notice/PopupNotification/Module Interface/PopupNotificationModuleInterface.swift
-
0GME Remit/Modules/Notice/PopupNotification/User Interface/Presenter/PopupNotificationPresenter.swift
-
0GME Remit/Modules/Notice/PopupNotification/User Interface/View/PopupNotification.storyboard
-
0GME Remit/Modules/Notice/PopupNotification/User Interface/View/PopupNotificationViewController.swift
-
0GME Remit/Modules/Notice/PopupNotification/User Interface/View/PopupNotificationViewInterface.swift
-
0GME Remit/Modules/Notice/PopupNotification/User Interface/Wireframe/PopupNotificationWireframe.swift
-
0GME Remit/Modules/Notice/PopupNotification/User Interface/Wireframe/PopupNotificationWireframeInput.swift
-
BINGME Remit/Modules/PopupNotification/User Interface/View/.DS_Store
-
BINGME Remit/Modules/PopupNotification/User Interface/Wireframe/.DS_Store
-
2GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KYCInfromation.swift
-
7GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/PersonalInformation.swift
-
17GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/Presenter/NewRegisterStep1Presenter.swift
-
33GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/View/NewRegisterStep1.storyboard
-
20GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/View/NewRegisterStep1ViewController.swift
-
2GME Remit/Modules/RemittanceModules/InboundModules/InboundPennyTestSubmit/User Interface/Wireframe/InboundPennyTestSubmitWireframe.swift
-
4GME Remit/Modules/RemittanceModules/TransactionHistoryModules/TransactionHistory/User Interface/View/TransactionHistory.storyboard
-
183GME Remit/Modules/SideMenu/SideMenu.storyboard
-
8GME Remit/Modules/SideMenu/SideMenuViewController.swift
-
21GME Remit/Supported Files/Assets.xcassets/ic_account.imageset/Contents 2.json
-
BINGME Remit/Supported Files/Assets.xcassets/ic_account.imageset/ic_account 2.png
-
21GME Remit/Supported Files/Assets.xcassets/ic_koreaBankBig.imageset/Contents 2.json
-
BINGME Remit/Supported Files/Assets.xcassets/ic_koreaBankBig.imageset/ic_koreaBank 2.png
-
6GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/Contents 2.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/Information.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/Information.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/Information.imageset/Information 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/Information.imageset/Information 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/address.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/address.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/address.imageset/address 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/address.imageset/address 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/asia.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/asia.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/asia.imageset/asia 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/asia.imageset/asia 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/call.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/call.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/call.imageset/call 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/call.imageset/call 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/dob.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/dob.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/dob.imageset/dob 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/dob.imageset/dob 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/email.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/email.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/email.imageset/email 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/email.imageset/email 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gender.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gender.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gender.imageset/gender 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gender.imageset/gender 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gps.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gps.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gps.imageset/gps 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/gps.imageset/gps 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_alien_card.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_alien_card.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_alien_card.imageset/ic_alien_card 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_alien_card.imageset/ic_alien_card 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_another_id_picture.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_another_id_picture.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_another_id_picture.imageset/ic_another_id_picture 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_another_id_picture.imageset/ic_another_id_picture 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_driving_license.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_driving_license.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_driving_license.imageset/ic_driving_license 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_driving_license.imageset/ic_driving_license 4.png
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_koreaBank.imageset/Contents 3.json
-
21GME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_koreaBank.imageset/Contents 4.json
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_koreaBank.imageset/ic_koreaBank 3.png
-
BINGME Remit/Supported Files/Assets.xcassets/icons/NewRegistration/ic_koreaBank.imageset/ic_koreaBank 4.png
@ -0,0 +1,41 @@ |
|||
// |
|||
// DetailNotificationInteractor.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class DetailNotificationInteractor { |
|||
|
|||
// MARK: Properties |
|||
|
|||
weak var output: DetailNotificationInteractorOutput? |
|||
private let service: DetailNotificationServiceType |
|||
|
|||
// MARK: Initialization |
|||
|
|||
init(service: DetailNotificationServiceType) { |
|||
self.service = service |
|||
} |
|||
|
|||
} |
|||
|
|||
// MARK: DetailNotification interactor input interface |
|||
|
|||
extension DetailNotificationInteractor: DetailNotificationInteractorInput { |
|||
func fetchDetail(_ index: String) { |
|||
service.fetchDetail( |
|||
index: index, |
|||
success: {[weak self] in |
|||
self?.output?.setModel(with: $0) |
|||
}, |
|||
failure: {[weak self] in |
|||
self?.output?.setError(with: $0) |
|||
} |
|||
) |
|||
} |
|||
|
|||
} |
@ -0,0 +1,16 @@ |
|||
// |
|||
// DetailNotificationInteractorIO.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol DetailNotificationInteractorInput: class { |
|||
func fetchDetail(_ index: String) |
|||
} |
|||
|
|||
protocol DetailNotificationInteractorOutput: class { |
|||
func setModel(with model: DetailNoticeModel) |
|||
func setError(with error: Error) |
|||
} |
@ -0,0 +1,27 @@ |
|||
// |
|||
// DetailNoticeModel.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/13. |
|||
// Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import ObjectMapper |
|||
|
|||
struct DetailNoticeModel: Mappable { |
|||
var title: String? |
|||
var body: String? |
|||
var imageURL: String? |
|||
var date: String? |
|||
|
|||
init?(map: Map) { |
|||
|
|||
} |
|||
|
|||
mutating func mapping(map: Map) { |
|||
title <- map["title"] |
|||
body <- map["body"] |
|||
date <- map["createDate"] |
|||
imageURL <- map["url"] |
|||
} |
|||
} |
@ -0,0 +1,19 @@ |
|||
// |
|||
// DetailNotificationService.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class DetailNotificationService: DetailNotificationServiceType { |
|||
func fetchDetail( |
|||
index: String, |
|||
success: @escaping (DetailNoticeModel) -> Void, |
|||
failure: @escaping (Error) -> Void |
|||
) { |
|||
APIRouter.getNotifyDetailInfo(idx: index).json(success: success, failure: failure) |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
// |
|||
// DetailNotificationServiceType.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol DetailNotificationServiceType: class { |
|||
func fetchDetail( |
|||
index: String, |
|||
success: @escaping (DetailNoticeModel) -> Void, |
|||
failure: @escaping (Error) -> Void |
|||
) |
|||
} |
@ -0,0 +1,64 @@ |
|||
// |
|||
// DetailNotificationPresenter.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import RxSwift |
|||
import RxCocoa |
|||
|
|||
class DetailNotificationPresenter: ViewModelType { |
|||
var interactor: DetailNotificationInteractorInput? |
|||
var wireframe: DetailNotificationWireframeInput? |
|||
|
|||
struct Input { |
|||
let viewWillAppear: Driver<Void> |
|||
} |
|||
|
|||
struct Output { |
|||
let isError: Driver<Error> |
|||
let isProgress: Driver<Bool> |
|||
let model: Driver<DetailNoticeModel> |
|||
} |
|||
|
|||
private let disposeBag = DisposeBag() |
|||
|
|||
private let progressLinker = PublishSubject<Bool>() |
|||
private let errorLinker = PublishSubject<Error>() |
|||
private let model = PublishSubject<DetailNoticeModel>() |
|||
|
|||
private var index = "" |
|||
|
|||
init(index: String) { |
|||
self.index = index |
|||
} |
|||
|
|||
func transform(input: Input) -> Output { |
|||
input.viewWillAppear.drive(onNext: {[weak self] in |
|||
guard let `self` = self else { return } |
|||
self.progressLinker.onNext(true) |
|||
self.interactor?.fetchDetail(self.index) |
|||
}).disposed(by: disposeBag) |
|||
|
|||
return Output( |
|||
isError: errorLinker.asDriverOnErrorJustComplete(), |
|||
isProgress: progressLinker.asDriverOnErrorJustComplete(), |
|||
model: model.asDriverOnErrorJustComplete() |
|||
) |
|||
} |
|||
} |
|||
|
|||
// MARK: DetailNotification interactor output interface |
|||
extension DetailNotificationPresenter: DetailNotificationInteractorOutput { |
|||
func setModel(with model: DetailNoticeModel) { |
|||
progressLinker.onNext(false) |
|||
self.model.onNext(model) |
|||
} |
|||
|
|||
func setError(with error: Error) { |
|||
progressLinker.onNext(false) |
|||
errorLinker.onNext(error) |
|||
} |
|||
} |
@ -0,0 +1,186 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="gPa-I4-mGd"> |
|||
<device id="retina4_7" orientation="portrait" appearance="light"/> |
|||
<dependencies> |
|||
<deployment identifier="iOS"/> |
|||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/> |
|||
<capability name="Named colors" minToolsVersion="9.0"/> |
|||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
|||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
|||
</dependencies> |
|||
<customFonts key="customFonts"> |
|||
<array key="SanFranciscoDisplay-Medium.otf"> |
|||
<string>SanFranciscoDisplay-Medium</string> |
|||
</array> |
|||
<array key="SanFranciscoDisplay-Regular.otf"> |
|||
<string>SanFranciscoDisplay-Regular</string> |
|||
</array> |
|||
</customFonts> |
|||
<scenes> |
|||
<!--DetailNotification--> |
|||
<scene sceneID="R60-Pu-Hpy"> |
|||
<objects> |
|||
<viewController storyboardIdentifier="DetailNotificationViewController" title="DetailNotification" id="HSb-ou-7T5" customClass="DetailNotificationViewController" customModule="GME_Remit" sceneMemberID="viewController"> |
|||
<view key="view" contentMode="scaleToFill" id="9Uc-9s-KgO"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|||
<subviews> |
|||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x6S-1E-Rmc"> |
|||
<rect key="frame" x="0.0" y="44" width="375" height="623"/> |
|||
<subviews> |
|||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ML8-hk-1GR"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="819.5"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Wsd-cO-bxJ"> |
|||
<rect key="frame" x="10" y="10" width="355" height="799.5"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="72d-Sq-55k"> |
|||
<rect key="frame" x="0.0" y="0.0" width="355" height="15.5"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="등록일자" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ba0-9X-U4Q"> |
|||
<rect key="frame" x="0.0" y="0.0" width="318.5" height="15.5"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="13"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="252" verticalHuggingPriority="251" text=":" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VtH-Wb-Is9"> |
|||
<rect key="frame" x="323.5" y="0.0" width="4" height="15.5"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="13"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="252" verticalHuggingPriority="251" text="N/A" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fT6-kB-U4e"> |
|||
<rect key="frame" x="332.5" y="0.0" width="22.5" height="15.5"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="13"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
</stackView> |
|||
<view opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MoG-ji-hov"> |
|||
<rect key="frame" x="0.0" y="35.5" width="355" height="764"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="yWn-XD-aDq"> |
|||
<rect key="frame" x="10" y="10" width="335" height="744"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="252" text="" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MTQ-OQ-Ne0"> |
|||
<rect key="frame" x="0.0" y="0.0" width="335" height="0.0"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="20"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<view contentMode="scaleToFill" verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="0ET-dR-bev"> |
|||
<rect key="frame" x="0.0" y="15" width="335" height="0.5"/> |
|||
<color key="backgroundColor" name="ThemeSeparate"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="0.5" id="7jM-hv-uWo"/> |
|||
</constraints> |
|||
</view> |
|||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vi3-zj-Dn3"> |
|||
<rect key="frame" x="0.0" y="30.5" width="335" height="112.5"/> |
|||
</imageView> |
|||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RdF-i6-MM1"> |
|||
<rect key="frame" x="0.0" y="158" width="335" height="586"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="252" text="" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OHE-Xt-dXP"> |
|||
<rect key="frame" x="10" y="10" width="315" height="566"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<constraints> |
|||
<constraint firstAttribute="trailing" secondItem="OHE-Xt-dXP" secondAttribute="trailing" constant="10" id="1xq-tA-nuN"/> |
|||
<constraint firstAttribute="bottom" secondItem="OHE-Xt-dXP" secondAttribute="bottom" constant="10" id="4V7-Va-Uhy"/> |
|||
<constraint firstItem="OHE-Xt-dXP" firstAttribute="leading" secondItem="RdF-i6-MM1" secondAttribute="leading" constant="10" id="C8Y-SG-GyJ"/> |
|||
<constraint firstItem="OHE-Xt-dXP" firstAttribute="top" secondItem="RdF-i6-MM1" secondAttribute="top" constant="10" id="lnN-J5-AIi"/> |
|||
</constraints> |
|||
</view> |
|||
</subviews> |
|||
</stackView> |
|||
</subviews> |
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<constraints> |
|||
<constraint firstItem="yWn-XD-aDq" firstAttribute="top" secondItem="MoG-ji-hov" secondAttribute="top" constant="10" id="kWe-qb-jUq"/> |
|||
<constraint firstAttribute="bottom" secondItem="yWn-XD-aDq" secondAttribute="bottom" constant="10" id="nBc-xF-eq9"/> |
|||
<constraint firstAttribute="trailing" secondItem="yWn-XD-aDq" secondAttribute="trailing" constant="10" id="oNq-JN-xbb"/> |
|||
<constraint firstItem="yWn-XD-aDq" firstAttribute="leading" secondItem="MoG-ji-hov" secondAttribute="leading" constant="10" id="yxq-uX-KJP"/> |
|||
</constraints> |
|||
</view> |
|||
</subviews> |
|||
</stackView> |
|||
</subviews> |
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<constraints> |
|||
<constraint firstAttribute="bottom" secondItem="Wsd-cO-bxJ" secondAttribute="bottom" constant="10" id="2wb-3L-jp6"/> |
|||
<constraint firstItem="Wsd-cO-bxJ" firstAttribute="leading" secondItem="ML8-hk-1GR" secondAttribute="leading" constant="10" id="ICN-YI-aUO"/> |
|||
<constraint firstItem="Wsd-cO-bxJ" firstAttribute="top" secondItem="ML8-hk-1GR" secondAttribute="top" constant="10" id="UEZ-po-hoL"/> |
|||
<constraint firstAttribute="trailing" secondItem="Wsd-cO-bxJ" secondAttribute="trailing" constant="10" id="exN-GK-leQ"/> |
|||
</constraints> |
|||
</view> |
|||
</subviews> |
|||
<constraints> |
|||
<constraint firstItem="ML8-hk-1GR" firstAttribute="width" secondItem="x6S-1E-Rmc" secondAttribute="width" id="8gl-RT-arA"/> |
|||
<constraint firstItem="ML8-hk-1GR" firstAttribute="top" secondItem="x6S-1E-Rmc" secondAttribute="top" id="QD4-oG-HOS"/> |
|||
<constraint firstAttribute="trailing" secondItem="ML8-hk-1GR" secondAttribute="trailing" id="SYX-ZO-dE5"/> |
|||
<constraint firstItem="ML8-hk-1GR" firstAttribute="height" secondItem="x6S-1E-Rmc" secondAttribute="height" priority="250" id="UEr-Ty-qCD"/> |
|||
<constraint firstItem="ML8-hk-1GR" firstAttribute="leading" secondItem="x6S-1E-Rmc" secondAttribute="leading" id="gWC-Ki-DK1"/> |
|||
<constraint firstAttribute="bottom" secondItem="ML8-hk-1GR" secondAttribute="bottom" id="gzb-NO-0QC"/> |
|||
</constraints> |
|||
</scrollView> |
|||
</subviews> |
|||
<color key="backgroundColor" name="ThemeMainBackground"/> |
|||
<constraints> |
|||
<constraint firstItem="x6S-1E-Rmc" firstAttribute="leading" secondItem="O1T-1R-Sun" secondAttribute="leading" id="Ddw-KF-zjP"/> |
|||
<constraint firstItem="O1T-1R-Sun" firstAttribute="bottom" secondItem="x6S-1E-Rmc" secondAttribute="bottom" id="arC-PG-Dhb"/> |
|||
<constraint firstItem="x6S-1E-Rmc" firstAttribute="trailing" secondItem="O1T-1R-Sun" secondAttribute="trailing" id="hzI-l9-Bog"/> |
|||
<constraint firstItem="x6S-1E-Rmc" firstAttribute="top" secondItem="O1T-1R-Sun" secondAttribute="top" id="thZ-2A-kLa"/> |
|||
</constraints> |
|||
<viewLayoutGuide key="safeArea" id="O1T-1R-Sun"/> |
|||
</view> |
|||
<navigationItem key="navigationItem" id="u3R-xM-tZG"/> |
|||
<connections> |
|||
<outlet property="contentLabel" destination="OHE-Xt-dXP" id="NX4-0e-fGm"/> |
|||
<outlet property="contentView" destination="MoG-ji-hov" id="8W5-Es-IzO"/> |
|||
<outlet property="dateLabel" destination="fT6-kB-U4e" id="Uuj-VD-n2h"/> |
|||
<outlet property="imageView" destination="vi3-zj-Dn3" id="Uc2-Yh-aWx"/> |
|||
<outlet property="titleLabel" destination="MTQ-OQ-Ne0" id="Qjy-V5-R16"/> |
|||
</connections> |
|||
</viewController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="847.20000000000005" y="232.53373313343329"/> |
|||
</scene> |
|||
<!--Navigation Controller--> |
|||
<scene sceneID="CQd-Va-RBX"> |
|||
<objects> |
|||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="gPa-I4-mGd" sceneMemberID="viewController"> |
|||
<toolbarItems/> |
|||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="0L8-61-CiB"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/> |
|||
<autoresizingMask key="autoresizingMask"/> |
|||
</navigationBar> |
|||
<nil name="viewControllers"/> |
|||
<connections> |
|||
<segue destination="HSb-ou-7T5" kind="relationship" relationship="rootViewController" id="PgS-7X-tKD"/> |
|||
</connections> |
|||
</navigationController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="avi-Di-bLr" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="-92" y="232.53373313343329"/> |
|||
</scene> |
|||
</scenes> |
|||
<resources> |
|||
<namedColor name="ThemeMainBackground"> |
|||
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</namedColor> |
|||
<namedColor name="ThemeSeparate"> |
|||
<color red="0.82400000095367432" green="0.82400000095367432" blue="0.82400000095367432" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</namedColor> |
|||
<namedColor name="ThemeText"> |
|||
<color red="0.28999999165534973" green="0.28999999165534973" blue="0.28999999165534973" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</namedColor> |
|||
</resources> |
|||
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</document> |
@ -0,0 +1,97 @@ |
|||
// |
|||
// DetailNotificationViewController.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
import RxSwift |
|||
import RxCocoa |
|||
|
|||
class DetailNotificationViewController: UIViewController { |
|||
|
|||
// MARK: Properties |
|||
var presenter: DetailNotificationPresenter! |
|||
|
|||
private let disposeBag = DisposeBag() |
|||
// MARK: Computed Properties |
|||
|
|||
// MARK: IBOutlets |
|||
@IBOutlet private weak var imageView: UIImageView! |
|||
@IBOutlet private weak var titleLabel: UILabel! |
|||
@IBOutlet private weak var contentLabel: UILabel! |
|||
@IBOutlet private weak var dateLabel: UILabel! |
|||
@IBOutlet private weak var contentView: UIView! |
|||
|
|||
// MARK: VC's Life cycle |
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
setup() |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
title = "Notice" |
|||
} |
|||
|
|||
override func viewWillDisappear(_ animated: Bool) { |
|||
super.viewWillDisappear(animated) |
|||
} |
|||
|
|||
// MARK: IBActions |
|||
|
|||
} |
|||
|
|||
// MARK: Other Functions |
|||
extension DetailNotificationViewController { |
|||
|
|||
private func setup() { |
|||
setUI() |
|||
setBinding() |
|||
setUIBinding() |
|||
} |
|||
|
|||
private func setUI() { |
|||
} |
|||
|
|||
private func setUIBinding() { |
|||
} |
|||
|
|||
private func setBinding() { |
|||
let viewWillAppear = rx |
|||
.sentMessage(#selector(UIViewController.viewWillAppear(_:))).mapToVoid().asDriverOnErrorJustComplete() |
|||
|
|||
let input = DetailNotificationPresenter.Input( |
|||
viewWillAppear: viewWillAppear |
|||
) |
|||
|
|||
let output = presenter.transform(input: input) |
|||
|
|||
output.isError |
|||
.drive( |
|||
onNext: { self.alert(type: .error, message: $0.localizedDescription) } |
|||
).disposed(by: disposeBag) |
|||
|
|||
output.isProgress |
|||
.drive( |
|||
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } |
|||
).disposed(by: disposeBag) |
|||
|
|||
output.model.map {$0.body}.drive(contentLabel.rx.text).disposed(by: disposeBag) |
|||
output.model.map {$0.date}.drive(dateLabel.rx.text).disposed(by: disposeBag) |
|||
output.model.map {$0.title ?? ""}.drive(titleLabel.rx.text).disposed(by: disposeBag) |
|||
output.model.map {$0.imageURL}.drive(onNext: {[weak self] in |
|||
guard let imageURL = $0, let url = URL(string: imageURL) else { |
|||
self?.imageView.isHidden = true |
|||
return |
|||
} |
|||
|
|||
self?.showProgressHud() |
|||
self?.imageView.kf.setImage(with: url) { _ in |
|||
self?.hideProgressHud() |
|||
} |
|||
}).disposed(by: disposeBag) |
|||
} |
|||
} |
@ -0,0 +1,48 @@ |
|||
// |
|||
// DetailNotificationWireframe.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
|
|||
class DetailNotificationWireframe { |
|||
weak var view: UIViewController! |
|||
private var index = "" |
|||
} |
|||
|
|||
extension DetailNotificationWireframe: DetailNotificationWireframeInput { |
|||
|
|||
var storyboardName: String {return "DetailNotification"} |
|||
|
|||
func getMainView() -> UIViewController { |
|||
let service = DetailNotificationService() |
|||
let interactor = DetailNotificationInteractor(service: service) |
|||
let presenter = DetailNotificationPresenter(index: self.index) |
|||
let viewController = viewControllerFromStoryboard(of: DetailNotificationViewController.self) |
|||
|
|||
viewController.presenter = presenter |
|||
interactor.output = presenter |
|||
presenter.interactor = interactor |
|||
presenter.wireframe = self |
|||
|
|||
view = viewController |
|||
return viewController |
|||
} |
|||
|
|||
func push(with index: String, at viewController: UIViewController) { |
|||
self.index = index |
|||
let vc = getMainView() |
|||
viewController.navigationController?.pushViewController(vc, animated: true) |
|||
} |
|||
|
|||
func open(with index: String, on viewController: UIViewController?) { |
|||
self.index = index |
|||
let vc = getMainView() |
|||
let naviVC = UINavigationController(rootViewController: vc) |
|||
|
|||
viewController?.present(naviVC, animated: true) |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
// |
|||
// DetailNotificationWireframeInput.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
protocol DetailNotificationWireframeInput: WireframeInput { |
|||
|
|||
} |
@ -0,0 +1,43 @@ |
|||
// |
|||
// NotificationHistoryInteractor.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class NotificationHistoryInteractor { |
|||
|
|||
// MARK: Properties |
|||
|
|||
weak var output: NotificationHistoryInteractorOutput? |
|||
private let service: NotificationHistoryServiceType |
|||
|
|||
// MARK: Initialization |
|||
|
|||
init(service: NotificationHistoryServiceType) { |
|||
self.service = service |
|||
} |
|||
|
|||
} |
|||
|
|||
// MARK: NotificationHistory interactor input interface |
|||
|
|||
extension NotificationHistoryInteractor: NotificationHistoryInteractorInput { |
|||
func fetchNotices() { |
|||
service.fetchNotices( |
|||
success: {[weak self] in |
|||
self?.output?.setNotices(with: $0) |
|||
}, |
|||
failure: {[weak self] in |
|||
self?.output?.setError(with: $0) |
|||
} |
|||
) |
|||
} |
|||
|
|||
func detail(index: String) { |
|||
|
|||
} |
|||
} |
@ -0,0 +1,16 @@ |
|||
// |
|||
// NotificationHistoryInteractorIO.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol NotificationHistoryInteractorInput: class { |
|||
func fetchNotices() |
|||
} |
|||
|
|||
protocol NotificationHistoryInteractorOutput: class { |
|||
func setNotices(with model: [NoticeModel]) |
|||
func setError(with error: Error) |
|||
} |
@ -0,0 +1,27 @@ |
|||
// |
|||
// NoticeModel.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
// Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import ObjectMapper |
|||
|
|||
struct NoticeModel: Mappable { |
|||
var title: String? |
|||
var key: String? |
|||
var date: String? |
|||
var isRead: String? |
|||
|
|||
init?(map: Map) { |
|||
|
|||
} |
|||
|
|||
mutating func mapping(map: Map) { |
|||
title <- map["title"] |
|||
key <- map["rowId"] |
|||
date <- map["createDate"] |
|||
isRead <- map["isRead"] |
|||
} |
|||
} |
@ -0,0 +1,19 @@ |
|||
// |
|||
// NotificationHistoryService.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
class NotificationHistoryService: NotificationHistoryServiceType { |
|||
func fetchNotices( |
|||
success: @escaping ([NoticeModel]) -> Void, |
|||
failure: @escaping (Error) -> Void |
|||
) { |
|||
APIRouter.getNotifyInfo.json(success: success, failure: failure) |
|||
} |
|||
|
|||
} |
@ -0,0 +1,14 @@ |
|||
// |
|||
// NotificationHistoryServiceType.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
protocol NotificationHistoryServiceType: class { |
|||
func fetchNotices( |
|||
success: @escaping ([NoticeModel]) -> Void, |
|||
failure: @escaping (Error) -> Void |
|||
) |
|||
} |
@ -0,0 +1,68 @@ |
|||
// |
|||
// NotificationHistoryPresenter.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import RxSwift |
|||
import RxCocoa |
|||
|
|||
class NotificationHistoryPresenter: ViewModelType { |
|||
var interactor: NotificationHistoryInteractorInput? |
|||
var wireframe: NotificationHistoryWireframeInput? |
|||
|
|||
struct Input { |
|||
let viewWillAppear: Driver<Void> |
|||
let selectNoticeIndex: Driver<Int> |
|||
} |
|||
|
|||
struct Output { |
|||
let isError: Driver<Error> |
|||
let isProgress: Driver<Bool> |
|||
let models: Driver<[NoticeModel]> |
|||
} |
|||
|
|||
private let disposeBag = DisposeBag() |
|||
|
|||
private let progressLinker = PublishSubject<Bool>() |
|||
private let errorLinker = PublishSubject<Error>() |
|||
|
|||
private let model = PublishSubject<[NoticeModel]>() |
|||
|
|||
func transform(input: Input) -> Output { |
|||
|
|||
input.viewWillAppear.drive(onNext: {[weak self] in |
|||
self?.progressLinker.onNext(true) |
|||
self?.interactor?.fetchNotices() |
|||
}).disposed(by: disposeBag) |
|||
|
|||
input.selectNoticeIndex |
|||
.withLatestFrom(model.asDriverOnErrorJustComplete()) { (indexPath, notices) -> NoticeModel in |
|||
return notices[indexPath] |
|||
} |
|||
.drive(onNext: {[weak self] in |
|||
self?.wireframe?.detail(index: $0.key ?? "") |
|||
}).disposed(by: disposeBag) |
|||
|
|||
return Output( |
|||
isError: errorLinker.asDriverOnErrorJustComplete(), |
|||
isProgress: progressLinker.asDriverOnErrorJustComplete(), |
|||
models: model.asDriverOnErrorJustComplete() |
|||
) |
|||
} |
|||
} |
|||
|
|||
// MARK: NotificationHistory interactor output interface |
|||
extension NotificationHistoryPresenter: NotificationHistoryInteractorOutput { |
|||
func setNotices(with model: [NoticeModel]) { |
|||
progressLinker.onNext(false) |
|||
self.model.onNext(model) |
|||
} |
|||
|
|||
func setError(with error: Error) { |
|||
progressLinker.onNext(false) |
|||
errorLinker.onNext(error) |
|||
} |
|||
} |
@ -0,0 +1,25 @@ |
|||
// |
|||
// NotificationCell.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
// Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
|
|||
class NotificationCell: UITableViewCell { |
|||
|
|||
@IBOutlet private weak var titleLabel: UILabel! |
|||
@IBOutlet private weak var dateLabel: UILabel! |
|||
@IBOutlet private weak var newIconImageView: UIImageView! |
|||
|
|||
func setModel(_ model: NoticeModel) { |
|||
newIconImageView.isHidden = false |
|||
|
|||
titleLabel.text = model.title |
|||
dateLabel.text = model.date |
|||
|
|||
newIconImageView.isHidden = model.isRead == "1" |
|||
} |
|||
} |
@ -0,0 +1,179 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="kME-hR-NgN"> |
|||
<device id="retina4_7" orientation="portrait" appearance="light"/> |
|||
<dependencies> |
|||
<deployment identifier="iOS"/> |
|||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/> |
|||
<capability name="Named colors" minToolsVersion="9.0"/> |
|||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
|||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
|||
</dependencies> |
|||
<customFonts key="customFonts"> |
|||
<array key="SanFranciscoDisplay-Medium.otf"> |
|||
<string>SanFranciscoDisplay-Medium</string> |
|||
</array> |
|||
<array key="SanFranciscoDisplay-Regular.otf"> |
|||
<string>SanFranciscoDisplay-Regular</string> |
|||
</array> |
|||
</customFonts> |
|||
<scenes> |
|||
<!--NotificationHistory--> |
|||
<scene sceneID="R60-Pu-Hpy"> |
|||
<objects> |
|||
<viewController storyboardIdentifier="NotificationHistoryViewController" title="NotificationHistory" id="HSb-ou-7T5" customClass="NotificationHistoryViewController" customModule="GME_Remit" sceneMemberID="viewController"> |
|||
<view key="view" contentMode="scaleToFill" id="9Uc-9s-KgO"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|||
<subviews> |
|||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="fmg-qn-Ab0"> |
|||
<rect key="frame" x="0.0" y="44" width="375" height="623"/> |
|||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> |
|||
<color key="separatorColor" name="ThemeSeparate"/> |
|||
<inset key="separatorInset" minX="15" minY="0.0" maxX="15" maxY="0.0"/> |
|||
<view key="tableFooterView" contentMode="scaleToFill" id="dt8-5N-azE"> |
|||
<rect key="frame" x="0.0" y="146" width="375" height="44"/> |
|||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="There is no notice" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hII-jh-P5Z"> |
|||
<rect key="frame" x="123" y="12" width="129" height="20.5"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="17"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> |
|||
<constraints> |
|||
<constraint firstItem="hII-jh-P5Z" firstAttribute="centerX" secondItem="dt8-5N-azE" secondAttribute="centerX" id="aHt-jb-fDd"/> |
|||
<constraint firstItem="hII-jh-P5Z" firstAttribute="centerY" secondItem="dt8-5N-azE" secondAttribute="centerY" id="oMI-tR-I1e"/> |
|||
</constraints> |
|||
</view> |
|||
<prototypes> |
|||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="NotificationCell" rowHeight="90" id="vWC-07-oo2" customClass="NotificationCell" customModule="GME_Remit" customModuleProvider="target"> |
|||
<rect key="frame" x="0.0" y="28" width="375" height="90"/> |
|||
<autoresizingMask key="autoresizingMask"/> |
|||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="vWC-07-oo2" id="jsL-8r-w5O"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="90"/> |
|||
<autoresizingMask key="autoresizingMask"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="3Id-Zk-2a3"> |
|||
<rect key="frame" x="20" y="16" width="315" height="58"/> |
|||
<subviews> |
|||
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="nRW-4q-6W0"> |
|||
<rect key="frame" x="0.0" y="0.0" width="315" height="38"/> |
|||
<subviews> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1FP-bq-7Wa"> |
|||
<rect key="frame" x="0.0" y="0.0" width="36" height="38"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="19"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="new" translatesAutoresizingMaskIntoConstraints="NO" id="tgE-Ed-yVU"> |
|||
<rect key="frame" x="41" y="0.0" width="20" height="38"/> |
|||
<constraints> |
|||
<constraint firstAttribute="width" constant="20" id="m7D-Ev-6yI"/> |
|||
</constraints> |
|||
</imageView> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CcW-YB-c6O"> |
|||
<rect key="frame" x="66" y="0.0" width="249" height="38"/> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Medium" family="San Francisco Display" pointSize="17"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
</stackView> |
|||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Date" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dwW-XM-PeE"> |
|||
<rect key="frame" x="0.0" y="38" width="315" height="20"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="20" id="DCY-zs-RDF"/> |
|||
</constraints> |
|||
<fontDescription key="fontDescription" name="SanFranciscoDisplay-Regular" family="San Francisco Display" pointSize="14"/> |
|||
<color key="textColor" name="ThemeText"/> |
|||
<nil key="highlightedColor"/> |
|||
</label> |
|||
</subviews> |
|||
</stackView> |
|||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="right_arrow" translatesAutoresizingMaskIntoConstraints="NO" id="afR-Xv-eGp"> |
|||
<rect key="frame" x="340" y="5" width="30" height="80"/> |
|||
<constraints> |
|||
<constraint firstAttribute="width" constant="30" id="O5Q-I5-hSG"/> |
|||
</constraints> |
|||
</imageView> |
|||
</subviews> |
|||
<constraints> |
|||
<constraint firstAttribute="trailing" secondItem="afR-Xv-eGp" secondAttribute="trailing" constant="5" id="RAg-TC-MAk"/> |
|||
<constraint firstItem="afR-Xv-eGp" firstAttribute="top" secondItem="jsL-8r-w5O" secondAttribute="top" constant="5" id="YQb-wQ-soU"/> |
|||
<constraint firstItem="3Id-Zk-2a3" firstAttribute="top" secondItem="jsL-8r-w5O" secondAttribute="topMargin" constant="5" id="p0I-oM-urg"/> |
|||
<constraint firstAttribute="bottom" secondItem="afR-Xv-eGp" secondAttribute="bottom" constant="5" id="tR3-t1-gpm"/> |
|||
<constraint firstItem="afR-Xv-eGp" firstAttribute="leading" secondItem="3Id-Zk-2a3" secondAttribute="trailing" constant="5" id="wqz-N9-lGz"/> |
|||
<constraint firstItem="3Id-Zk-2a3" firstAttribute="leading" secondItem="jsL-8r-w5O" secondAttribute="leadingMargin" constant="5" id="zkO-2c-37b"/> |
|||
<constraint firstAttribute="bottomMargin" secondItem="3Id-Zk-2a3" secondAttribute="bottom" constant="5" id="zw9-nN-gfO"/> |
|||
</constraints> |
|||
</tableViewCellContentView> |
|||
<connections> |
|||
<outlet property="dateLabel" destination="dwW-XM-PeE" id="kd7-8a-HPB"/> |
|||
<outlet property="newIconImageView" destination="tgE-Ed-yVU" id="m1x-cJ-TPf"/> |
|||
<outlet property="titleLabel" destination="1FP-bq-7Wa" id="djE-Vd-glM"/> |
|||
</connections> |
|||
</tableViewCell> |
|||
</prototypes> |
|||
</tableView> |
|||
</subviews> |
|||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
<constraints> |
|||
<constraint firstItem="fmg-qn-Ab0" firstAttribute="leading" secondItem="O1T-1R-Sun" secondAttribute="leading" id="Iab-am-UFi"/> |
|||
<constraint firstItem="fmg-qn-Ab0" firstAttribute="bottom" secondItem="O1T-1R-Sun" secondAttribute="bottom" id="XwH-KW-ADa"/> |
|||
<constraint firstItem="fmg-qn-Ab0" firstAttribute="trailing" secondItem="O1T-1R-Sun" secondAttribute="trailing" id="dSo-q4-mWS"/> |
|||
<constraint firstItem="fmg-qn-Ab0" firstAttribute="top" secondItem="O1T-1R-Sun" secondAttribute="top" id="wDW-Oa-CNU"/> |
|||
</constraints> |
|||
<viewLayoutGuide key="safeArea" id="O1T-1R-Sun"/> |
|||
</view> |
|||
<navigationItem key="navigationItem" id="XcP-xq-HWI"> |
|||
<barButtonItem key="leftBarButtonItem" image="ic_cancel" id="XEy-ga-xCy"> |
|||
<color key="tintColor" name="ThemeBlack"/> |
|||
</barButtonItem> |
|||
</navigationItem> |
|||
<connections> |
|||
<outlet property="closeButton" destination="XEy-ga-xCy" id="fu1-Tq-U4b"/> |
|||
<outlet property="noticeErrorLabel" destination="hII-jh-P5Z" id="Ahx-Pi-50w"/> |
|||
<outlet property="tableView" destination="fmg-qn-Ab0" id="gPt-cu-zgE"/> |
|||
</connections> |
|||
</viewController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="847.20000000000005" y="232.53373313343329"/> |
|||
</scene> |
|||
<!--Navigation Controller--> |
|||
<scene sceneID="JEL-xf-oXC"> |
|||
<objects> |
|||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="kME-hR-NgN" sceneMemberID="viewController"> |
|||
<toolbarItems/> |
|||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="pfG-lS-Grr"> |
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/> |
|||
<autoresizingMask key="autoresizingMask"/> |
|||
</navigationBar> |
|||
<nil name="viewControllers"/> |
|||
<connections> |
|||
<segue destination="HSb-ou-7T5" kind="relationship" relationship="rootViewController" id="gOl-2t-4dV"/> |
|||
</connections> |
|||
</navigationController> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="K2p-9I-q0r" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> |
|||
</objects> |
|||
<point key="canvasLocation" x="-92" y="232.53373313343329"/> |
|||
</scene> |
|||
</scenes> |
|||
<resources> |
|||
<image name="ic_cancel" width="12" height="12"/> |
|||
<image name="new" width="17" height="5"/> |
|||
<image name="right_arrow" width="128" height="128"/> |
|||
<namedColor name="ThemeBlack"> |
|||
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
|||
</namedColor> |
|||
<namedColor name="ThemeSeparate"> |
|||
<color red="0.82400000095367432" green="0.82400000095367432" blue="0.82400000095367432" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</namedColor> |
|||
<namedColor name="ThemeText"> |
|||
<color red="0.28999999165534973" green="0.28999999165534973" blue="0.28999999165534973" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</namedColor> |
|||
</resources> |
|||
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
</document> |
@ -0,0 +1,109 @@ |
|||
// |
|||
// NotificationHistoryViewController.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
import RxSwift |
|||
import RxCocoa |
|||
|
|||
class NotificationHistoryViewController: UIViewController { |
|||
|
|||
// MARK: Properties |
|||
var presenter: NotificationHistoryPresenter! |
|||
|
|||
private let disposeBag = DisposeBag() |
|||
// MARK: Computed Properties |
|||
|
|||
// MARK: IBOutlets |
|||
@IBOutlet private weak var tableView: UITableView! |
|||
@IBOutlet private weak var noticeErrorLabel: UILabel! |
|||
@IBOutlet private weak var closeButton: UIBarButtonItem! |
|||
|
|||
// MARK: VC's Life cycle |
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
setup() |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
setupNormalNavigation() |
|||
title = "Notice" |
|||
|
|||
if self.presentingViewController == nil { |
|||
self.navigationItem.leftBarButtonItem = nil |
|||
} |
|||
} |
|||
|
|||
override func viewWillDisappear(_ animated: Bool) { |
|||
super.viewWillDisappear(animated) |
|||
title = "" |
|||
} |
|||
|
|||
// MARK: IBActions |
|||
|
|||
} |
|||
|
|||
// MARK: Other Functions |
|||
extension NotificationHistoryViewController { |
|||
|
|||
private func setup() { |
|||
setUI() |
|||
setBinding() |
|||
setUIBinding() |
|||
} |
|||
|
|||
private func setUI() { |
|||
|
|||
} |
|||
|
|||
private func setUIBinding() { |
|||
closeButton.rx.tap.bind {[weak self] in |
|||
self?.dismiss(animated: true) |
|||
}.disposed(by: disposeBag) |
|||
} |
|||
|
|||
private func setBinding() { |
|||
let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:))) |
|||
.mapToVoid().asDriverOnErrorJustComplete() |
|||
|
|||
let input = NotificationHistoryPresenter.Input( |
|||
viewWillAppear: viewWillAppear, |
|||
selectNoticeIndex: tableView.rx.itemSelected.map {$0.row}.asDriverOnErrorJustComplete() |
|||
) |
|||
|
|||
let output = presenter.transform(input: input) |
|||
|
|||
output.isError |
|||
.drive( |
|||
onNext: { self.alert(type: .error, message: $0.localizedDescription) } |
|||
).disposed(by: disposeBag) |
|||
|
|||
output.isProgress |
|||
.drive( |
|||
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } |
|||
).disposed(by: disposeBag) |
|||
|
|||
output |
|||
.models.drive( |
|||
tableView.rx.items(cellIdentifier: "NotificationCell") |
|||
) { (_, element: NoticeModel, cell: NotificationCell) in |
|||
cell.setModel(element) |
|||
} |
|||
.disposed(by: disposeBag) |
|||
|
|||
output.models.map {$0.count != 0}.drive(noticeErrorLabel.rx.isHidden).disposed(by: disposeBag) |
|||
|
|||
tableView.rx.setDelegate(self).disposed(by: disposeBag) |
|||
} |
|||
} |
|||
|
|||
extension NotificationHistoryViewController: UITableViewDelegate { |
|||
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
|||
return 90 |
|||
} |
|||
} |
@ -0,0 +1,44 @@ |
|||
// |
|||
// NotificationHistoryWireframe.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
|
|||
class NotificationHistoryWireframe { |
|||
weak var view: UIViewController! |
|||
} |
|||
|
|||
extension NotificationHistoryWireframe: NotificationHistoryWireframeInput { |
|||
|
|||
var storyboardName: String {return "NotificationHistory"} |
|||
|
|||
func getMainView() -> UIViewController { |
|||
let service = NotificationHistoryService() |
|||
let interactor = NotificationHistoryInteractor(service: service) |
|||
let presenter = NotificationHistoryPresenter() |
|||
let viewController = viewControllerFromStoryboard(of: NotificationHistoryViewController.self) |
|||
|
|||
viewController.presenter = presenter |
|||
interactor.output = presenter |
|||
presenter.interactor = interactor |
|||
presenter.wireframe = self |
|||
|
|||
view = viewController |
|||
return viewController |
|||
} |
|||
|
|||
func detail(index: String) { |
|||
DetailNotificationWireframe().push(with: index, at: view) |
|||
} |
|||
|
|||
func open(on viewController: UIViewController?) { |
|||
let vc = getMainView() |
|||
let naviVC = UINavigationController(rootViewController: vc) |
|||
|
|||
viewController?.present(naviVC, animated: true) |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
// |
|||
// NotificationHistoryWireframeInput.swift |
|||
// GME Remit |
|||
// |
|||
// Created by InKwon James Kim on 2020/02/11. |
|||
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
protocol NotificationHistoryWireframeInput: WireframeInput { |
|||
func detail(index: String) |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_account.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 100 | Height: 66 | Size: 3.4 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_koreaBank.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 48 | Height: 46 | Size: 731 B |
@ -0,0 +1,6 @@ |
|||
{ |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "Information.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "Information.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 23 KiB |
After Width: 512 | Height: 512 | Size: 23 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "address.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "address.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 27 KiB |
After Width: 512 | Height: 512 | Size: 27 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "asia.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "asia.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 51 KiB |
After Width: 512 | Height: 512 | Size: 51 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "call.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "call.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 25 | Height: 25 | Size: 1.3 KiB |
After Width: 25 | Height: 25 | Size: 1.3 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "dob.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "dob.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 59 KiB |
After Width: 512 | Height: 512 | Size: 59 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "email.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "email.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 40 KiB |
After Width: 512 | Height: 512 | Size: 40 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "gender.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "gender.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 256 | Height: 256 | Size: 19 KiB |
After Width: 256 | Height: 256 | Size: 19 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "gps.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "gps.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 19 KiB |
After Width: 512 | Height: 512 | Size: 19 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_alien_card.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_alien_card.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 22 KiB |
After Width: 512 | Height: 512 | Size: 22 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_another_id_picture.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_another_id_picture.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 17 KiB |
After Width: 512 | Height: 512 | Size: 17 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_driving_license.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_driving_license.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 512 | Height: 512 | Size: 19 KiB |
After Width: 512 | Height: 512 | Size: 19 KiB |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_koreaBank.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"idiom" : "universal", |
|||
"filename" : "ic_koreaBank.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"idiom" : "universal", |
|||
"scale" : "3x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: 100 | Height: 66 | Size: 1.9 KiB |
After Width: 100 | Height: 66 | Size: 1.9 KiB |