Adding new report sharing variant - copy report url (useful for catalyst)
This commit is contained in:
parent
69fdd322b0
commit
24e9b90c16
@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 52;
|
objectVersion = 54;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@ -25,6 +25,8 @@
|
|||||||
7A11471623FDEB2A00B424AF /* MainSplitController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11471523FDEB2A00B424AF /* MainSplitController.swift */; };
|
7A11471623FDEB2A00B424AF /* MainSplitController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11471523FDEB2A00B424AF /* MainSplitController.swift */; };
|
||||||
7A11471823FDEBFA00B424AF /* ReportController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11471723FDEBFA00B424AF /* ReportController.swift */; };
|
7A11471823FDEBFA00B424AF /* ReportController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11471723FDEBFA00B424AF /* ReportController.swift */; };
|
||||||
7A11471A23FE839000B424AF /* AuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11471923FE839000B424AF /* AuthController.swift */; };
|
7A11471A23FE839000B424AF /* AuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11471923FE839000B424AF /* AuthController.swift */; };
|
||||||
|
7A17CE4A2A2E820300626A6E /* UIStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A17CE492A2E820300626A6E /* UIStackView.swift */; };
|
||||||
|
7A17CE4C2A2E850200626A6E /* UISegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A17CE4B2A2E850200626A6E /* UISegmentedControl.swift */; };
|
||||||
7A1CF80329A41C62007962DA /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 7A1CF80229A41C62007962DA /* Realm */; };
|
7A1CF80329A41C62007962DA /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 7A1CF80229A41C62007962DA /* Realm */; };
|
||||||
7A1CF80529A41C66007962DA /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7A1CF80429A41C66007962DA /* RealmSwift */; };
|
7A1CF80529A41C66007962DA /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7A1CF80429A41C66007962DA /* RealmSwift */; };
|
||||||
7A1CF80829A41D58007962DA /* RxBlocking in Frameworks */ = {isa = PBXBuildFile; productRef = 7A1CF80729A41D58007962DA /* RxBlocking */; };
|
7A1CF80829A41D58007962DA /* RxBlocking in Frameworks */ = {isa = PBXBuildFile; productRef = 7A1CF80729A41D58007962DA /* RxBlocking */; };
|
||||||
@ -198,6 +200,8 @@
|
|||||||
7A11474A23FF368B00B424AF /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
|
7A11474A23FF368B00B424AF /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
|
||||||
7A11474D23FFEE8800B424AF /* SVProgressHUD.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SVProgressHUD.framework; path = Carthage/Build/iOS/SVProgressHUD.framework; sourceTree = "<group>"; };
|
7A11474D23FFEE8800B424AF /* SVProgressHUD.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SVProgressHUD.framework; path = Carthage/Build/iOS/SVProgressHUD.framework; sourceTree = "<group>"; };
|
||||||
7A15051124DB3E3000F39631 /* AnyEncodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyEncodable.swift; sourceTree = "<group>"; };
|
7A15051124DB3E3000F39631 /* AnyEncodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyEncodable.swift; sourceTree = "<group>"; };
|
||||||
|
7A17CE492A2E820300626A6E /* UIStackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIStackView.swift; sourceTree = "<group>"; };
|
||||||
|
7A17CE4B2A2E850200626A6E /* UISegmentedControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UISegmentedControl.swift; sourceTree = "<group>"; };
|
||||||
7A1CF81529A42117007962DA /* Realm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Realm.swift; sourceTree = "<group>"; };
|
7A1CF81529A42117007962DA /* Realm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Realm.swift; sourceTree = "<group>"; };
|
||||||
7A1DC38D2517ED98002E9C99 /* BlockBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockBarButtonItem.swift; sourceTree = "<group>"; };
|
7A1DC38D2517ED98002E9C99 /* BlockBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockBarButtonItem.swift; sourceTree = "<group>"; };
|
||||||
7A21112924FC3D7E003BBF6F /* AudioEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioEngine.swift; sourceTree = "<group>"; };
|
7A21112924FC3D7E003BBF6F /* AudioEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioEngine.swift; sourceTree = "<group>"; };
|
||||||
@ -611,6 +615,8 @@
|
|||||||
7AC355582969746600889457 /* UIControl.swift */,
|
7AC355582969746600889457 /* UIControl.swift */,
|
||||||
7AC3555A296995B200889457 /* UIEdgeInsets.swift */,
|
7AC3555A296995B200889457 /* UIEdgeInsets.swift */,
|
||||||
7A91894E29A2BD8700519C74 /* GestureRecognizers.swift */,
|
7A91894E29A2BD8700519C74 /* GestureRecognizers.swift */,
|
||||||
|
7A17CE492A2E820300626A6E /* UIStackView.swift */,
|
||||||
|
7A17CE4B2A2E850200626A6E /* UISegmentedControl.swift */,
|
||||||
);
|
);
|
||||||
path = Extensions;
|
path = Extensions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -865,6 +871,7 @@
|
|||||||
7AB67E8C2435C38700258F61 /* CustomTextField.swift in Sources */,
|
7AB67E8C2435C38700258F61 /* CustomTextField.swift in Sources */,
|
||||||
7A0420B62568650C00034941 /* DkbmController.swift in Sources */,
|
7A0420B62568650C00034941 /* DkbmController.swift in Sources */,
|
||||||
7A27ADF5249FD2F90035F39E /* FileManagerExt.swift in Sources */,
|
7A27ADF5249FD2F90035F39E /* FileManagerExt.swift in Sources */,
|
||||||
|
7A17CE4A2A2E820300626A6E /* UIStackView.swift in Sources */,
|
||||||
7A1DC38E2517ED98002E9C99 /* BlockBarButtonItem.swift in Sources */,
|
7A1DC38E2517ED98002E9C99 /* BlockBarButtonItem.swift in Sources */,
|
||||||
7AE26A3324EEF9EC00625033 /* UIViewControllerExt.swift in Sources */,
|
7AE26A3324EEF9EC00625033 /* UIViewControllerExt.swift in Sources */,
|
||||||
7A27ADF3249F8B650035F39E /* RecordsController.swift in Sources */,
|
7A27ADF3249F8B650035F39E /* RecordsController.swift in Sources */,
|
||||||
@ -916,6 +923,7 @@
|
|||||||
7A64AE732469DFB600ABE48E /* DismissAnimationController.swift in Sources */,
|
7A64AE732469DFB600ABE48E /* DismissAnimationController.swift in Sources */,
|
||||||
7ADF6C97250F41B000F237B2 /* PNKeyboard.swift in Sources */,
|
7ADF6C97250F41B000F237B2 /* PNKeyboard.swift in Sources */,
|
||||||
7A7547E024032CB6004E8406 /* VehiclePhotoCell.swift in Sources */,
|
7A7547E024032CB6004E8406 /* VehiclePhotoCell.swift in Sources */,
|
||||||
|
7A17CE4C2A2E850200626A6E /* UISegmentedControl.swift in Sources */,
|
||||||
6841A85D4B60DB71D1E68DA0 /* ImageGrid.swift in Sources */,
|
6841A85D4B60DB71D1E68DA0 /* ImageGrid.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -1150,7 +1158,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 116;
|
CURRENT_PROJECT_VERSION = 117;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
||||||
@ -1178,7 +1186,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 116;
|
CURRENT_PROJECT_VERSION = 117;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
BreakpointExtensionID = "Xcode.Breakpoint.SymbolicBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.SymbolicBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
uuid = "676638C8-1CC5-4C04-98B0-1C0D6CB28B76"
|
uuid = "676638C8-1CC5-4C04-98B0-1C0D6CB28B76"
|
||||||
shouldBeEnabled = "Yes"
|
shouldBeEnabled = "No"
|
||||||
ignoreCount = "0"
|
ignoreCount = "0"
|
||||||
continueAfterRunningActions = "No"
|
continueAfterRunningActions = "No"
|
||||||
symbolName = "UITableViewAlertForLayoutOutsideViewHierarchy"
|
symbolName = "UITableViewAlertForLayoutOutsideViewHierarchy"
|
||||||
@ -27,5 +27,53 @@
|
|||||||
</Locations>
|
</Locations>
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "2786565A-9610-4232-920E-0763816C4DBF"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "../../../Library/Developer/Xcode/DerivedData/AutoCat-fhilwnlnsrpirleiajogdcyhyyey/SourcePackages/checkouts/Eureka/Source/Rows/DateInlineRow.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "37"
|
||||||
|
endingLineNumber = "37"
|
||||||
|
landmarkName = "configurePickerStyle(_:_:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
<Locations>
|
||||||
|
<Location
|
||||||
|
uuid = "2786565A-9610-4232-920E-0763816C4DBF - f20dc4504decd67d"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "Eureka.DatePickerRowProtocol.configurePickerStyle(Eureka.DatePickerCell, __C.UIDatePickerMode) -> ()"
|
||||||
|
moduleName = "AutoCat"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/selim/Library/Developer/Xcode/DerivedData/AutoCat-fhilwnlnsrpirleiajogdcyhyyey/SourcePackages/checkouts/Eureka/Source/Rows/DateInlineRow.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "37"
|
||||||
|
endingLineNumber = "37"
|
||||||
|
offsetFromSymbolStart = "260">
|
||||||
|
</Location>
|
||||||
|
<Location
|
||||||
|
uuid = "2786565A-9610-4232-920E-0763816C4DBF - f20dc4504decd67d"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "Eureka.DatePickerRowProtocol.configurePickerStyle(Eureka.DatePickerCell, __C.UIDatePickerMode) -> ()"
|
||||||
|
moduleName = "AutoCat"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/selim/Library/Developer/Xcode/DerivedData/AutoCat-fhilwnlnsrpirleiajogdcyhyyey/SourcePackages/checkouts/Eureka/Source/Rows/DateInlineRow.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "37"
|
||||||
|
endingLineNumber = "37"
|
||||||
|
offsetFromSymbolStart = "256">
|
||||||
|
</Location>
|
||||||
|
</Locations>
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
</Breakpoints>
|
</Breakpoints>
|
||||||
</Bucket>
|
</Bucket>
|
||||||
|
|||||||
42
AutoCat/ACUIKit/Extensions/UISegmentedControl.swift
Normal file
42
AutoCat/ACUIKit/Extensions/UISegmentedControl.swift
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// UISegmentedControl.swift
|
||||||
|
// AutoCat
|
||||||
|
//
|
||||||
|
// Created by Selim Mustafaev on 06.06.2023.
|
||||||
|
// Copyright © 2023 Selim Mustafaev. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UISegmentedControl {
|
||||||
|
|
||||||
|
static func segments(titles: [String]) -> UISegmentedControl {
|
||||||
|
let view = UISegmentedControl(items: titles)
|
||||||
|
view.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
static func segments(images: [UIImage?]) -> UISegmentedControl {
|
||||||
|
let view = UISegmentedControl(items: images.compactMap { $0 })
|
||||||
|
view.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
func onValueChanged(_ closure: @escaping (Int) -> Void) -> UISegmentedControl {
|
||||||
|
addActionImpl(for: .valueChanged) { [weak self] in
|
||||||
|
guard let index = self?.selectedSegmentIndex else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
closure(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
|
||||||
|
func select(index: Int) -> UISegmentedControl {
|
||||||
|
selectedSegmentIndex = index
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
43
AutoCat/ACUIKit/Extensions/UIStackView.swift
Normal file
43
AutoCat/ACUIKit/Extensions/UIStackView.swift
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//
|
||||||
|
// UIStackView.swift
|
||||||
|
// AutoCat
|
||||||
|
//
|
||||||
|
// Created by Selim Mustafaev on 05.06.2023.
|
||||||
|
// Copyright © 2023 Selim Mustafaev. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIStackView {
|
||||||
|
|
||||||
|
static func horizontal(_ views: [UIView]) -> UIStackView {
|
||||||
|
let stack = UIStackView(arrangedSubviews: views)
|
||||||
|
stack.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
stack.axis = .horizontal
|
||||||
|
stack.spacing = 16
|
||||||
|
return stack
|
||||||
|
}
|
||||||
|
|
||||||
|
static func vertical(_ views: [UIView]) -> UIStackView {
|
||||||
|
let stack = UIStackView(arrangedSubviews: views)
|
||||||
|
stack.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
stack.axis = .vertical
|
||||||
|
stack.spacing = 16
|
||||||
|
return stack
|
||||||
|
}
|
||||||
|
|
||||||
|
func spacing(_ spacing: CGFloat) -> UIStackView {
|
||||||
|
self.spacing = spacing
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
|
||||||
|
func alignment(_ alignment: Alignment) -> UIStackView {
|
||||||
|
self.alignment = alignment
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
|
||||||
|
func distribution(_ distribution: Distribution) -> UIStackView {
|
||||||
|
self.distribution = distribution
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,9 +1,24 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import AutoCatCore
|
import AutoCatCore
|
||||||
|
|
||||||
|
// MARK: - Types
|
||||||
|
|
||||||
|
enum NumberType: Int, CaseIterable {
|
||||||
|
|
||||||
|
case plateNumber = 0
|
||||||
|
case vin = 1
|
||||||
|
|
||||||
|
var title: String {
|
||||||
|
switch self {
|
||||||
|
case .plateNumber: return "GRZ"
|
||||||
|
case .vin: return "VIN"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class NewNumberController: UIViewController {
|
class NewNumberController: UIViewController {
|
||||||
|
|
||||||
public var onCheck: ((String) -> Void)?
|
// MARK: - Views
|
||||||
|
|
||||||
private lazy var keyboardView: PNKeyboard = {
|
private lazy var keyboardView: PNKeyboard = {
|
||||||
let keyboard = PNKeyboard(target: self.plateView)
|
let keyboard = PNKeyboard(target: self.plateView)
|
||||||
@ -21,6 +36,13 @@ class NewNumberController: UIViewController {
|
|||||||
return view
|
return view
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
private lazy var vinField: UITextField = {
|
||||||
|
let view = UITextField()
|
||||||
|
view.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
view.isHidden = true
|
||||||
|
return view
|
||||||
|
}()
|
||||||
|
|
||||||
private lazy var checkButton: ACButton = {
|
private lazy var checkButton: ACButton = {
|
||||||
let button = ACButton(title: NSLocalizedString("Check", comment: ""), onTap: check)
|
let button = ACButton(title: NSLocalizedString("Check", comment: ""), onTap: check)
|
||||||
button.isEnabled = false
|
button.isEnabled = false
|
||||||
@ -29,13 +51,9 @@ class NewNumberController: UIViewController {
|
|||||||
return button
|
return button
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var stackView: UIStackView = {
|
private lazy var stackView: UIStackView = .horizontal([
|
||||||
let stack = UIStackView(arrangedSubviews: [plateView, checkButton])
|
plateView, vinField, checkButton
|
||||||
stack.axis = .horizontal
|
])
|
||||||
stack.spacing = 16
|
|
||||||
stack.translatesAutoresizingMaskIntoConstraints = false
|
|
||||||
return stack
|
|
||||||
}()
|
|
||||||
|
|
||||||
private let titleLabel: UILabel = {
|
private let titleLabel: UILabel = {
|
||||||
let label = UILabel()
|
let label = UILabel()
|
||||||
@ -46,42 +64,35 @@ class NewNumberController: UIViewController {
|
|||||||
return label
|
return label
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var mainStackView: UIStackView = {
|
private lazy var mainStackView: UIStackView = .vertical([
|
||||||
let stack = UIStackView(arrangedSubviews: [titleLabel, stackView, settingsStackView, keyboardView])
|
titleLabel,
|
||||||
stack.axis = .vertical
|
stackView,
|
||||||
stack.spacing = 16
|
//settingsStackView,
|
||||||
stack.translatesAutoresizingMaskIntoConstraints = false
|
keyboardView
|
||||||
return stack
|
])
|
||||||
}()
|
|
||||||
|
|
||||||
private lazy var locationSwitcherView: UISegmentedControl = {
|
private let locationSwitcherView: UISegmentedControl = .segments(images: [
|
||||||
let view = UISegmentedControl()
|
UIImage(systemName: "location.fill"),
|
||||||
view.translatesAutoresizingMaskIntoConstraints = false
|
UIImage(systemName: "location"),
|
||||||
view.insertSegment(with: UIImage(systemName: "location.fill"), at: 0, animated: false)
|
UIImage(systemName: "location.slash")
|
||||||
view.insertSegment(with: UIImage(systemName: "location"), at: 1, animated: false)
|
])
|
||||||
view.insertSegment(with: UIImage(systemName: "location.slash"), at: 2, animated: false)
|
|
||||||
return view
|
|
||||||
}()
|
|
||||||
|
|
||||||
private lazy var numTypeSwitcherView: UISegmentedControl = {
|
private lazy var numTypeSwitcherView: UISegmentedControl = .segments(titles: NumberType.allCases.map(\.title))
|
||||||
let view = UISegmentedControl()
|
.select(index: NumberType.plateNumber.rawValue)
|
||||||
view.translatesAutoresizingMaskIntoConstraints = false
|
.onValueChanged(onNumberTypeChanged)
|
||||||
view.insertSegment(withTitle: "ГРЗ", at: 0, animated: false)
|
|
||||||
view.insertSegment(withTitle: "VIN", at: 1, animated: false)
|
|
||||||
view.selectedSegmentIndex = 0
|
|
||||||
view.isEnabled = false
|
|
||||||
return view
|
|
||||||
}()
|
|
||||||
|
|
||||||
private lazy var settingsStackView: UIStackView = {
|
private lazy var settingsStackView: UIStackView = .horizontal([
|
||||||
let stack = UIStackView(arrangedSubviews: [numTypeSwitcherView, locationSwitcherView])
|
numTypeSwitcherView,
|
||||||
stack.axis = .horizontal
|
locationSwitcherView
|
||||||
stack.spacing = 16
|
])
|
||||||
stack.distribution = .fillProportionally
|
.distribution(.fillProportionally)
|
||||||
stack.translatesAutoresizingMaskIntoConstraints = false
|
|
||||||
stack.isHidden = true
|
// MARK: - Variables
|
||||||
return stack
|
|
||||||
}()
|
public var onCheck: ((String) -> Void)?
|
||||||
|
private var numberType: NumberType = .plateNumber
|
||||||
|
|
||||||
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
@ -108,6 +119,23 @@ class NewNumberController: UIViewController {
|
|||||||
func onNumberChanged() {
|
func onNumberChanged() {
|
||||||
checkButton.isEnabled = plateView.number?.isValid ?? false
|
checkButton.isEnabled = plateView.number?.isValid ?? false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func onNumberTypeChanged(_ index: Int) {
|
||||||
|
guard let type = NumberType(rawValue: index) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
numberType = type
|
||||||
|
|
||||||
|
switch type {
|
||||||
|
case .plateNumber:
|
||||||
|
plateView.isHidden = false
|
||||||
|
vinField.isHidden = true
|
||||||
|
case .vin:
|
||||||
|
plateView.isHidden = true
|
||||||
|
vinField.isHidden = false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension NewNumberController: PNKeyboardDelegate {
|
extension NewNumberController: PNKeyboardDelegate {
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import RealmSwift
|
|||||||
import Eureka
|
import Eureka
|
||||||
import AutoCatCore
|
import AutoCatCore
|
||||||
import SwiftEntryKit
|
import SwiftEntryKit
|
||||||
|
import MobileCoreServices
|
||||||
|
|
||||||
class ReportController: FormViewController, MediaBrowserViewControllerDataSource, MediaBrowserViewControllerDelegate, UIActivityItemSource {
|
class ReportController: FormViewController, MediaBrowserViewControllerDataSource, MediaBrowserViewControllerDelegate, UIActivityItemSource {
|
||||||
|
|
||||||
@ -348,16 +349,29 @@ class ReportController: FormViewController, MediaBrowserViewControllerDataSource
|
|||||||
let shareLink = UIAlertAction(title: NSLocalizedString("As link", comment: ""), style: .default) { _ in
|
let shareLink = UIAlertAction(title: NSLocalizedString("As link", comment: ""), style: .default) { _ in
|
||||||
guard let vehicle = self.vehicle else { return }
|
guard let vehicle = self.vehicle else { return }
|
||||||
|
|
||||||
if let jwt = try? JWT<EmptyPayload>.generate(for: vehicle.getNumber()), let url = URL(string: Constants.reportLinkBaseURL + "?token=" + jwt) {
|
if let jwt = try? JWT<EmptyPayload>.generate(for: vehicle.getNumber()),
|
||||||
|
let url = URL(string: Constants.reportLinkBaseURL + "?token=" + jwt)
|
||||||
|
{
|
||||||
let controller = UIActivityViewController(activityItems: [url], applicationActivities: nil)
|
let controller = UIActivityViewController(activityItems: [url], applicationActivities: nil)
|
||||||
controller.popoverPresentationController?.barButtonItem = sender
|
controller.popoverPresentationController?.barButtonItem = sender
|
||||||
self.present(controller, animated: true)
|
self.present(controller, animated: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let copyLink = UIAlertAction(title: NSLocalizedString("Copy link to report", comment: ""), style: .default) { _ in
|
||||||
|
guard let vehicle = self.vehicle else { return }
|
||||||
|
|
||||||
|
if let jwt = try? JWT<EmptyPayload>.generate(for: vehicle.getNumber()),
|
||||||
|
let url = URL(string: Constants.reportLinkBaseURL + "?token=" + jwt)
|
||||||
|
{
|
||||||
|
UIPasteboard.general.string = url.absoluteString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sheet.addAction(shareImage)
|
sheet.addAction(shareImage)
|
||||||
sheet.addAction(shareTextAndImage)
|
sheet.addAction(shareTextAndImage)
|
||||||
sheet.addAction(shareLink)
|
sheet.addAction(shareLink)
|
||||||
|
sheet.addAction(copyLink)
|
||||||
sheet.addAction(cancel)
|
sheet.addAction(cancel)
|
||||||
self.present(sheet, animated: true, completion: nil)
|
self.present(sheet, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -403,3 +403,5 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"ZIP (or OKTMO) code" = "Индекс (или ОКТМО)";
|
"ZIP (or OKTMO) code" = "Индекс (или ОКТМО)";
|
||||||
|
|
||||||
|
/* No comment provided by engineer. */
|
||||||
|
"Copy link to report" = "Копировать ссылку на отчет";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user