From 63f02a0c7ce46a1127fc6d90d89d67915b48be30 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Wed, 3 Apr 2019 17:05:21 -0400 Subject: [PATCH] code review --- MVMCoreUI/Atoms/Buttons/PrimaryButton.m | 20 +----- MVMCoreUI/Atoms/TextFields/MFTextField.m | 24 +++---- MVMCoreUI/BaseControllers/MFViewController.m | 14 ++-- .../Models/FormValidator+FormParams.swift | 23 +++--- .../Models/FormValidator+TextFields.swift | 70 ++++++++++++++++--- 5 files changed, 90 insertions(+), 61 deletions(-) diff --git a/MVMCoreUI/Atoms/Buttons/PrimaryButton.m b/MVMCoreUI/Atoms/Buttons/PrimaryButton.m index 6c3ed6a9..9a4c06a1 100644 --- a/MVMCoreUI/Atoms/Buttons/PrimaryButton.m +++ b/MVMCoreUI/Atoms/Buttons/PrimaryButton.m @@ -709,21 +709,6 @@ [self setEnabledByValidity]; } -- (void)addTextFieldsForValidation:(nonnull MFTextField *)textField { - if (self.textFields == nil) { - self.textFields = [NSMutableArray array]; - } - if (textField) { - [self.textFields addObject:textField]; - } - - for (MFTextField *field in self.textFields) { - field.mfTextFieldDelegate = self; - [field setDefaultValidationBlock]; - } - [self setEnabledByValidity]; -} - - (void)handleEnablingWithTextFields:(nullable NSArray *)textFields { if (self.textFields) { @@ -758,9 +743,8 @@ #pragma mark - FormValidationProtocol -- (void)enableField:(BOOL) enable { - - if (self.validationRequired == NO) { +- (void)enableField:(BOOL)enable { + if (!self.validationRequired) { self.enabled = YES; } else { self.enabled = enable; diff --git a/MVMCoreUI/Atoms/TextFields/MFTextField.m b/MVMCoreUI/Atoms/TextFields/MFTextField.m index 67b3f73a..b5dfdcef 100644 --- a/MVMCoreUI/Atoms/TextFields/MFTextField.m +++ b/MVMCoreUI/Atoms/TextFields/MFTextField.m @@ -51,10 +51,9 @@ [self.dashLine updateView:size]; if (self.isMolecule) { - [self setVerticalPadding:[MFStyler defaultHorizontalPaddingForApplicationWidth]]; - + [self setHorizontalPadding:[MFStyler defaultHorizontalPaddingForSize:size]]; } else { - [self setVerticalPadding:0]; + [self setHorizontalPadding:0]; } }]; } @@ -116,18 +115,17 @@ return textField; } -- (void)setWithJSON:(NSDictionary *)json delegate:(nullable id)delegate additionalData:(NSDictionary *)additionalData { - +- (void)setAsMolecule { self.isMolecule = YES; - [FormValidator setupValidationWithMolecule:self delegate:(id)delegate]; - [self setWithMap:json bothDelegates:delegate]; - - FormValidator *formValidator = [FormValidator getFormValidatorForDelegate:(id)delegate]; - self.mfTextFieldDelegate = formValidator; - self.uiTextFieldDelegate = formValidator; } -- (void)setVerticalPadding:(CGFloat) padding { +- (void)setWithJSON:(NSDictionary *)json delegate:(nullable id)delegate additionalData:(NSDictionary *)additionalData { + [FormValidator setupValidationWithMolecule:self delegate:(id)delegate]; + FormValidator *formValidator = [FormValidator getFormValidatorForDelegate:(id)delegate]; + [self setWithMap:json bothDelegates:formValidator]; +} + +- (void)setHorizontalPadding:(CGFloat) padding { self.textContainerLeftPin.constant = padding; self.errorLableLeftPin.constant = padding; self.formLabelLeftPin.constant = padding; @@ -568,7 +566,7 @@ #pragma mark - MVMCoreUIMoleculeViewProtocol -- (BOOL) isValidField { +- (BOOL)isValidField { return self.valid; } diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 28c3c625..1b880cc3 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -55,7 +55,7 @@ // title view for navigation bar, used for custom navigation titles @property (weak, nonatomic) UILabel *titleLabel; -@property (strong, nonatomic) FormValidator* formValidator; +@property (strong, nonatomic) FormValidator *formValidator; @end @@ -254,9 +254,7 @@ self.loadObject.pageJSON = page; } - [self updateUI]; -// [self newDataBuildScreen]; -// self.needToUpdateUI = YES; + [self updateUI]; [self.view setNeedsLayout]; [self.view layoutIfNeeded]; }]; @@ -416,6 +414,10 @@ // Since we have new data, build stuff for the screen. [self updateUI]; + // Update the UI after the view is loaded. + self.needToUpdateUI = YES; + self.needToupdateUIOnScreenSizeChanges = YES; + if (UIAccessibilityIsVoiceOverRunning()) { self.disableAnimations = YES; } @@ -428,10 +430,6 @@ - (void) updateUI { [self newDataBuildScreen]; [self.formValidator enableByValidation]; - - // Update the UI after the view is loaded. - self.needToUpdateUI = YES; - self.needToupdateUIOnScreenSizeChanges = YES; } - (void)didReceiveMemoryWarning { diff --git a/MVMCoreUI/Models/FormValidator+FormParams.swift b/MVMCoreUI/Models/FormValidator+FormParams.swift index 2c6c1d2a..2f1e9f99 100644 --- a/MVMCoreUI/Models/FormValidator+FormParams.swift +++ b/MVMCoreUI/Models/FormValidator+FormParams.swift @@ -10,23 +10,22 @@ import Foundation @objc public extension FormValidator { @objc public func addFormParams(requestParameters: MVMCoreRequestParameters) { - DispatchQueue.main.sync { - requestParameters.add(self.getFormParams()) - } + requestParameters.add(self.getFormParams()) } @objc public func getFormParams() -> [String: Any] { - var extraParam: [String: Any] = [:] - for molecule in self.molecules { - if let formFieldName = molecule.formFieldName, - let formFieldValue = molecule.formFieldValue, - let fieldName = formFieldName(), - let fieldValue = formFieldValue() { - - extraParam[fieldName] = fieldValue + MVMCoreDispatchUtility.performSyncBlock(onMainThread: { + for molecule in self.molecules { + if let formFieldName = molecule.formFieldName, + let formFieldValue = molecule.formFieldValue, + let fieldName = formFieldName(), + let fieldValue = formFieldValue() { + + extraParam[fieldName] = fieldValue + } } - } + }) return extraParam } } diff --git a/MVMCoreUI/Models/FormValidator+TextFields.swift b/MVMCoreUI/Models/FormValidator+TextFields.swift index d95a4cbb..04437f0a 100644 --- a/MVMCoreUI/Models/FormValidator+TextFields.swift +++ b/MVMCoreUI/Models/FormValidator+TextFields.swift @@ -8,27 +8,67 @@ import Foundation -@objc extension FormValidator: UITextFieldDelegate, UITextViewDelegate, MFTextFieldDelegate{ +@objc extension FormValidator: UITextFieldDelegate { public func textFieldDidEndEditing(_ textField: UITextField) { enableByValidation() - } - - public func dismissFieldInput(_ sender: Any?) { - if let delegate = delegate as? MFTextFieldDelegate, - let dismissFieldInput = delegate.dismissFieldInput { - dismissFieldInput(sender) + if let delegate = delegate as? UITextFieldDelegate { + delegate.textFieldDidEndEditing?(textField) } } public func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() + if let delegate = delegate as? UITextFieldDelegate { + return delegate.textFieldShouldReturn?(textField) ?? true + } return true } public func textFieldDidBeginEditing(_ textField: UITextField) { - if let delegate = delegate as? UITextFieldDelegate, - let textFieldDidBeginEditing = delegate.textFieldDidBeginEditing { - textFieldDidBeginEditing(textField) + if let delegate = delegate as? UITextFieldDelegate { + delegate.textFieldDidBeginEditing?(textField) + } + } + + public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { + if let delegate = delegate as? UITextFieldDelegate { + return delegate.textFieldShouldBeginEditing?(textField) ?? true + } + return true + } + + public func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { + if let delegate = delegate as? UITextFieldDelegate { + return delegate.textFieldShouldEndEditing?(textField) ?? true + } + return true + } + + public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) { + if let delegate = delegate as? UITextFieldDelegate { + delegate.textFieldDidEndEditing?(textField, reason: reason) + } + } + + public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + if let delegate = delegate as? UITextFieldDelegate { + return delegate.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) ?? true + } + return true + } + + public func textFieldShouldClear(_ textField: UITextField) -> Bool { + if let delegate = delegate as? UITextFieldDelegate { + return delegate.textFieldShouldClear?(textField) ?? true + } + return true + } +} + +@objc extension FormValidator: MFTextFieldDelegate { + public func dismissFieldInput(_ sender: Any?) { + if let delegate = delegate as? MFTextFieldDelegate { + delegate.dismissFieldInput?(sender) } } @@ -36,11 +76,21 @@ import Foundation DispatchQueue.main.async { self.enableByValidation() } + MVMCoreDispatchUtility.performBlock(onMainThread: { + if let delegate = self.delegate as? MFTextFieldDelegate { + delegate.entryIsValid?(textfield) + } + }) } public func entryIsInvalid(_ textfield: MFTextField?) { DispatchQueue.main.async { self.enableByValidation() } + MVMCoreDispatchUtility.performBlock(onMainThread: { + if let delegate = self.delegate as? MFTextFieldDelegate { + delegate.entryIsInvalid?(textfield) + } + }) } }