Skip to content

Commit

Permalink
Hidden field order (3lvis#571)
Browse files Browse the repository at this point in the history
* Set field order based on original JSON order

* Copy the selected segment index before updating field
  • Loading branch information
jeffleeismyhero authored and 3lvis committed Jul 5, 2017
1 parent 3a157de commit adb81bd
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
6 changes: 5 additions & 1 deletion Source/Cells/Switch/FORMSegmentFieldCell.m
Expand Up @@ -40,12 +40,16 @@ - (void)updateWithField:(FORMField *)field {
self.segment.enabled = !field.disabled;
self.disabled = field.disabled;

NSInteger *selectedIndex = [self.segment selectedSegmentIndex];

[self.segment removeAllSegments];

[field.values enumerateObjectsUsingBlock:^(FORMFieldValue *value, NSUInteger index, BOOL *stop) {
[self.segment insertSegmentWithTitle:value.title atIndex:index animated:NO];

if (value.defaultValue) {
if (selectedIndex || selectedIndex == 0) {
[self.segment setSelectedSegmentIndex:selectedIndex];
} else if (value.defaultValue) {
[self.segment setSelectedSegmentIndex:index];
}
}];
Expand Down
42 changes: 42 additions & 0 deletions Source/FORMData.m
Expand Up @@ -22,6 +22,7 @@ @interface FORMData ()

@property (nonatomic) DDMathEvaluator *evaluator;
@property (nonatomic) BOOL disabledForm;
@property (nonatomic) id JSON;

@end

Expand All @@ -34,6 +35,7 @@ - (instancetype)initWithJSON:(id)JSON
self = [super init];
if (!self) return nil;

_JSON = JSON;
_disabledFieldsIDs = disabledFieldIDs;
_disabledForm = disabled;

Expand Down Expand Up @@ -684,6 +686,16 @@ - (NSArray *)showTargets:(NSArray *)targets {
if ([section.sectionID isEqualToString:field.section.sectionID]) {
foundSection = YES;
NSInteger fieldIndex = [field indexInSectionUsingGroups:self.groups];

NSArray *fieldIDs = [self fieldIDsFromJSON];
if ([fieldIDs containsObject:field.fieldID]) {
fieldIndex = [fieldIDs indexOfObject:field.fieldID];

while([section.fields count] < fieldIndex) {
fieldIndex--;
}
}

[section.fields insertObject:field atIndex:fieldIndex];
[section resetFieldPositions];
}
Expand Down Expand Up @@ -1222,4 +1234,34 @@ - (void)updateValuesFromFields:(NSArray *)fields {
}
}

- (NSArray *)fieldIDsFromJSON {
NSMutableArray *fieldIDs = [[_JSON valueForKeyPath:@"groups.sections.fields.id"] mutableCopy];
[fieldIDs removeObjectIdenticalTo:[NSNull null]];

return [self flatten:fieldIDs];
}

- (NSArray *)flatten:(NSArray *)array {
__weak NSArray *nestedArray = array;
__block NSArray *(^flatten)(NSArray *) = ^NSArray *(NSArray *input) {
NSMutableArray *result = [NSMutableArray array];

for (id obj in input) {
if ([obj isKindOfClass:[NSArray class]]) {
[result addObjectsFromArray:flatten(obj)];
} else {
[result addObject:obj];
}
}

if (input == nestedArray) {
flatten = nil;
}

return result;
};

return flatten(array);
}

@end

0 comments on commit adb81bd

Please sign in to comment.