[MAPSME-5820] [ios] Added booking availability support.

This commit is contained in:
Ilya Grechuhin 2017-12-01 16:32:57 +03:00 committed by Roman Kuznetsov
parent c5e5cef5a3
commit 6c37e0b75e
13 changed files with 779 additions and 347 deletions

View file

@ -25,6 +25,7 @@ class Result;
+ (search::Result const &)resultWithContainerIndex:(NSUInteger)index;
+ (BOOL)isLocalAdsWithContainerIndex:(NSUInteger)index;
+ (id<MWMBanner>)adWithContainerIndex:(NSUInteger)index;
+ (BOOL)isBookingAvailableWithContainerIndex:(NSUInteger)index;
+ (void)update;
+ (void)clear;

View file

@ -53,8 +53,9 @@ using Observers = NSHashTable<Observer>;
search::EverywhereSearchParams m_everywhereParams;
search::ViewportSearchParams m_viewportParams;
search::Results m_everywhereResults;
vector<bool> m_isLocalAdsCustomer;
string m_filterQuery;
std::vector<bool> m_isLocalAdsCustomer;
std::vector<FeatureID> m_bookingAvailableFeatureIDs;
std::string m_filterQuery;
}
#pragma mark - Instance
@ -125,6 +126,18 @@ using Observers = NSHashTable<Observer>;
self.searchCount -= 1;
};
}
{
__weak auto weakSelf = self;
m_everywhereParams.m_bookingFilterParams.m_callback =
[weakSelf](booking::AvailabilityParams const & params,
std::vector<FeatureID> const & featuresSorted) {
__strong auto self = weakSelf;
if (!self || self->m_everywhereParams.m_bookingFilterParams.m_params != params)
return;
self->m_bookingAvailableFeatureIDs = featuresSorted;
[self onSearchResultsUpdated];
};
}
{
__weak auto weakSelf = self;
m_viewportParams.m_onStarted = [weakSelf] {
@ -169,6 +182,11 @@ using Observers = NSHashTable<Observer>;
shared_ptr<search::hotels_filter::Rule> const hotelsRules = self.filter ? [self.filter rules] : nullptr;
m_viewportParams.m_hotelsFilter = hotelsRules;
m_everywhereParams.m_hotelsFilter = hotelsRules;
auto const availabilityParams =
self.filter ? [self.filter availabilityParams] : booking::filter::availability::Params();
m_viewportParams.m_bookingFilterParams = availabilityParams;
m_everywhereParams.m_bookingFilterParams = availabilityParams;
}
- (void)update
@ -176,8 +194,8 @@ using Observers = NSHashTable<Observer>;
[MWMSearch reset];
if (m_everywhereParams.m_query.empty())
return;
[self updateCallbacks];
[self updateFilters];
[self updateCallbacks];
auto & f = GetFramework();
if ([MWMSearch isCianSearch:@(m_everywhereParams.m_query.c_str())])
f.SearchInViewport(m_viewportParams);
@ -252,6 +270,14 @@ using Observers = NSHashTable<Observer>;
return [[MWMSearch manager].banners bannerAtIndex:index];
}
+ (BOOL)isBookingAvailableWithContainerIndex:(NSUInteger)index
{
auto const & resultFeatureID = [self resultWithContainerIndex:index].GetFeatureID();
auto const & bookingAvailableIDs = [MWMSearch manager]->m_bookingAvailableFeatureIDs;
return std::binary_search(bookingAvailableIDs.begin(), bookingAvailableIDs.end(),
resultFeatureID);
}
+ (MWMSearchItemType)resultTypeWithRow:(NSUInteger)row
{
auto itemsIndex = [MWMSearch manager].itemsIndex;
@ -273,6 +299,11 @@ using Observers = NSHashTable<Observer>;
GetFramework().CancelAllSearches();
manager.everywhereSearchCompleted = NO;
manager.viewportSearchCompleted = NO;
manager->m_everywhereResults.Clear();
manager->m_bookingAvailableFeatureIDs.clear();
auto const availabilityParams = booking::filter::availability::Params();
manager->m_viewportParams.m_bookingFilterParams = availabilityParams;
manager->m_everywhereParams.m_bookingFilterParams = availabilityParams;
if (manager->m_filterQuery != manager->m_everywhereParams.m_query)
manager.isHotelResults = NO;
[manager onSearchResultsUpdated];
@ -281,11 +312,10 @@ using Observers = NSHashTable<Observer>;
+ (void)clear
{
auto manager = [MWMSearch manager];
manager->m_everywhereResults.Clear();
manager->m_everywhereParams.m_query.clear();
manager->m_viewportParams.m_query.clear();
manager.suggestionsCount = 0;
[manager.filter reset];
manager.filter = nil;
[self reset];
}
@ -305,7 +335,15 @@ using Observers = NSHashTable<Observer>;
#pragma mark - Filters
+ (BOOL)hasFilter { return [[MWMSearch manager].filter rules] != nullptr; }
+ (BOOL)hasFilter
{
auto filter = [MWMSearch manager].filter;
if (!filter)
return NO;
auto const hasRules = [filter rules] != nullptr;
auto const hasBookingParams = ![filter availabilityParams].IsEmpty();
return hasRules || hasBookingParams;
}
+ (MWMSearchFilterViewController *)getFilter
{
@ -318,7 +356,7 @@ using Observers = NSHashTable<Observer>;
+ (void)clearFilter
{
MWMSearch * manager = [MWMSearch manager];
[manager.filter reset];
manager.filter = nil;
[manager update];
}

View file

@ -117,6 +117,9 @@
3408963E1F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3408963D1F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm */; };
3408963F1F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3408963D1F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm */; };
340896401F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3408963D1F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm */; };
3409D50A1FC6D8D2000F9B3E /* FilterCheckCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3409D5091FC6D8D2000F9B3E /* FilterCheckCell.swift */; };
3409D50B1FC6D8D2000F9B3E /* FilterCheckCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3409D5091FC6D8D2000F9B3E /* FilterCheckCell.swift */; };
3409D50C1FC6D8D2000F9B3E /* FilterCheckCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3409D5091FC6D8D2000F9B3E /* FilterCheckCell.swift */; };
340B33C51F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340B33C41F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm */; };
340B33C61F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340B33C41F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm */; };
340B33C71F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340B33C41F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm */; };
@ -1972,6 +1975,7 @@
340837151B72451A00B5C185 /* MWMShareActivityItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMShareActivityItem.mm; sourceTree = "<group>"; };
3408963C1F83CEDE00BC7117 /* MWMAuthorizationViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMAuthorizationViewModel.h; sourceTree = "<group>"; };
3408963D1F83CEDE00BC7117 /* MWMAuthorizationViewModel.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAuthorizationViewModel.mm; sourceTree = "<group>"; };
3409D5091FC6D8D2000F9B3E /* FilterCheckCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterCheckCell.swift; sourceTree = "<group>"; };
340B33C41F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MWMRouter+RouteManager.mm"; sourceTree = "<group>"; };
340DC82B1C4E72C700EAA2CC /* liboauthcpp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liboauthcpp.a; path = "../../../omim-xcode-build/Debug/liboauthcpp.a"; sourceTree = "<group>"; };
340E1EE41E2F614400CE49BF /* Authorization.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Authorization.storyboard; sourceTree = "<group>"; };
@ -4795,21 +4799,22 @@
F6E2FCE51E097B9F0083EBEC /* Filters */ = {
isa = PBXGroup;
children = (
3409D5091FC6D8D2000F9B3E /* FilterCheckCell.swift */,
F63AF5111EA6250F00A1DB98 /* FilterCollectionHolderCell.swift */,
F63AF50D1EA6215100A1DB98 /* FilterPriceCategoryCell.swift */,
F63AF5091EA6213F00A1DB98 /* FilterRatingCell.swift */,
F63AF5041EA6162400A1DB98 /* FilterTypeCell.swift */,
F6E2FCE61E097B9F0083EBEC /* MWMSearchFilterPresentationController.h */,
F6E2FCE71E097B9F0083EBEC /* MWMSearchFilterPresentationController.mm */,
F6E2FCE91E097B9F0083EBEC /* MWMSearchFilterTransitioning.h */,
F6E2FCEA1E097B9F0083EBEC /* MWMSearchFilterTransitioning.mm */,
F6E2FCEB1E097B9F0083EBEC /* MWMSearchFilterTransitioningManager.h */,
F6E2FCEC1E097B9F0083EBEC /* MWMSearchFilterTransitioningManager.mm */,
F6E2FCEF1E097B9F0083EBEC /* MWMSearchFilterViewController_Protected.h */,
F6E2FCED1E097B9F0083EBEC /* MWMSearchFilterViewController.h */,
F6E2FCEE1E097B9F0083EBEC /* MWMSearchFilterViewController.mm */,
F6E2FCEF1E097B9F0083EBEC /* MWMSearchFilterViewController_Protected.h */,
F6E2FCF01E097B9F0083EBEC /* MWMSearchHotelsFilterViewController.h */,
F6E2FCF11E097B9F0083EBEC /* MWMSearchHotelsFilterViewController.mm */,
F63AF5091EA6213F00A1DB98 /* FilterRatingCell.swift */,
F63AF50D1EA6215100A1DB98 /* FilterPriceCategoryCell.swift */,
F63AF5111EA6250F00A1DB98 /* FilterCollectionHolderCell.swift */,
F63AF5041EA6162400A1DB98 /* FilterTypeCell.swift */,
);
path = Filters;
sourceTree = "<group>";
@ -6162,6 +6167,7 @@
F6E2FE811E097BA00083EBEC /* MWMPlacePageOpeningHoursDayView.mm in Sources */,
340416571E7C0D4100E2B6D6 /* PhotosOverlayView.swift in Sources */,
F6E2FD6A1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */,
3409D50A1FC6D8D2000F9B3E /* FilterCheckCell.swift in Sources */,
FAA614B8155F16950031C345 /* AddSetVC.mm in Sources */,
F6E2FF681E097BA00083EBEC /* MWMUnitsController.mm in Sources */,
34FE5A6E1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */,
@ -6535,6 +6541,7 @@
340416581E7C0D4100E2B6D6 /* PhotosOverlayView.swift in Sources */,
F6E2FE821E097BA00083EBEC /* MWMPlacePageOpeningHoursDayView.mm in Sources */,
F6E2FD6B1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */,
3409D50B1FC6D8D2000F9B3E /* FilterCheckCell.swift in Sources */,
6741AA021BF340DE002C974C /* BookmarksRootVC.mm in Sources */,
34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */,
F6E2FF691E097BA00083EBEC /* MWMUnitsController.mm in Sources */,
@ -6908,6 +6915,7 @@
849CF70D1DE842290024A8A5 /* MWMAddPlaceNavigationBar.mm in Sources */,
F6E2FE831E097BA00083EBEC /* MWMPlacePageOpeningHoursDayView.mm in Sources */,
340416591E7C0D4100E2B6D6 /* PhotosOverlayView.swift in Sources */,
3409D50C1FC6D8D2000F9B3E /* FilterCheckCell.swift in Sources */,
F6E2FD6C1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */,
F6E2FF6A1E097BA00083EBEC /* MWMUnitsController.mm in Sources */,
34FE5A701F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */,

View file

@ -0,0 +1,80 @@
@objc(MWMFilterCheckCellDelegate)
protocol FilterCheckCellDelegate {
func checkCellButtonTap(_ button: UIButton)
}
@objc(MWMFilterCheckCell)
final class FilterCheckCell: MWMTableViewCell {
@IBOutlet private var checkButtons: [UIButton]!
@IBOutlet private var checkLabels: [UILabel]!
@IBOutlet weak var checkInLabel: UILabel! {
didSet {
checkInLabel.text = L("booking_filters_check_in")
}
}
@IBOutlet weak var checkOutLabel: UILabel! {
didSet {
checkOutLabel.text = L("booking_filters_check_out")
}
}
@IBOutlet weak var checkIn: UIButton!
@IBOutlet weak var checkOut: UIButton!
@IBOutlet private weak var offlineLabel: UILabel! {
didSet {
offlineLabel.font = UIFont.regular12()
offlineLabel.textColor = UIColor.red
offlineLabel.text = L("booking_filters_offline")
}
}
@IBOutlet private weak var offlineLabelBottomOffset: NSLayoutConstraint!
@objc var isOffline = false {
didSet {
offlineLabel.isHidden = !isOffline
offlineLabelBottomOffset.priority = isOffline ? .defaultHigh : .defaultLow
checkLabels.forEach { $0.isEnabled = !isOffline }
checkButtons.forEach { $0.isEnabled = !isOffline }
}
}
@objc weak var delegate: FilterCheckCellDelegate?
@IBAction private func tap(sender: UIButton!) {
delegate?.checkCellButtonTap(sender)
}
fileprivate func setupButton(_ button: UIButton) {
button.setTitleColor(UIColor.blackPrimaryText(), for: .normal)
button.setTitleColor(UIColor.blackDividers(), for: .disabled)
button.setBackgroundColor(UIColor.white(), for: .normal)
let label = button.titleLabel!
label.textAlignment = .natural
label.font = UIFont.regular14()
let layer = button.layer
layer.cornerRadius = 4
layer.borderWidth = 1
layer.borderColor = UIColor.blackDividers().cgColor
}
@objc func refreshButtonsAppearance() {
checkButtons.forEach { setupButton($0) }
}
fileprivate func setupLabel(_ label: UILabel) {
label.font = UIFont.bold12()
label.textColor = UIColor.blackSecondaryText()
}
@objc func refreshLabelsAppearance() {
checkLabels.forEach { setupLabel($0) }
}
override func awakeFromNib() {
super.awakeFromNib()
isSeparatorHidden = true
backgroundColor = UIColor.clear
}
}

View file

@ -1,4 +1,6 @@
#import "MWMTableViewController.h"
#import "MWMViewController.h"
#include "map/booking_filter_availability_params.hpp"
#include "std/shared_ptr.hpp"
@ -10,12 +12,11 @@ struct Rule;
} // namespace hotels_filter
} // namespace search
@interface MWMSearchFilterViewController : MWMTableViewController
@interface MWMSearchFilterViewController : MWMViewController
+ (MWMSearchFilterViewController *)controller;
- (shared_ptr<search::hotels_filter::Rule>)rules;
- (void)reset;
- (booking::filter::availability::Params)availabilityParams;
@end

View file

@ -18,10 +18,6 @@
- (void)mwm_refreshUI { [self.view mwm_refreshUI]; }
- (shared_ptr<search::hotels_filter::Rule>)rules { return nullptr; }
- (void)reset
{
[self doesNotRecognizeSelector:_cmd];
}
- (booking::filter::availability::Params)availabilityParams { return {}; }
@end

View file

@ -1,4 +1,6 @@
#import "MWMSearchHotelsFilterViewController.h"
#import <CoreActionSheetPicker/ActionSheetPicker.h>
#import "MWMSearch.h"
#import "MWMSearchFilterViewController_Protected.h"
#import "SwiftBridge.h"
@ -6,7 +8,11 @@
namespace
{
static NSTimeInterval kDayInterval = 24 * 60 * 60;
static NSTimeInterval k30DaysInterval = 30 * kDayInterval;
static NSTimeInterval k360DaysInterval = 360 * kDayInterval;
static uint8_t kAdultsCount = 2;
static int8_t kAgeOfChild = 5;
static NSString * const kHotelTypePattern = @"search_hotel_filter_%@";
std::array<ftypes::IsHotelChecker::Type, static_cast<size_t>(ftypes::IsHotelChecker::Type::Count)> const kTypes = {{
@ -31,6 +37,7 @@ unsigned makeMask(std::vector<ftypes::IsHotelChecker::Type> const & items)
enum class Section
{
Check,
Rating,
PriceCategory,
Type,
@ -90,14 +97,21 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
}
} // namespace
@interface MWMSearchHotelsFilterViewController () <UICollectionViewDelegate, UICollectionViewDataSource>
@interface MWMSearchHotelsFilterViewController ()<
UICollectionViewDelegate, UICollectionViewDataSource, MWMFilterCheckCellDelegate>
{
std::vector<ftypes::IsHotelChecker::Type> m_selectedTypes;
}
@property(nonatomic) MWMFilterCheckCell * check;
@property(nonatomic) MWMFilterRatingCell * rating;
@property(nonatomic) MWMFilterPriceCategoryCell * price;
@property(nonatomic) MWMFilterCollectionHolderCell * type;
@property(weak, nonatomic) IBOutlet UITableView * tableView;
@property(weak, nonatomic) IBOutlet UIButton * doneButton;
@property(nonatomic) NSDate * checkInDate;
@property(nonatomic) NSDate * checkOutDate;
@end
@ -110,11 +124,50 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
[self controllerWithIdentifier:identifier]);
}
- (void)viewDidLoad
- (void)viewWillAppear:(BOOL)animated
{
[super viewDidLoad];
self.tableView.estimatedRowHeight = 48;
self.tableView.rowHeight = UITableViewAutomaticDimension;
[super viewWillAppear:animated];
[self.tableView reloadData];
[self refreshAppearance];
[self setNeedsStatusBarAppearanceUpdate];
}
- (void)refreshStatusBarAppearance
{
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
}
- (void)refreshTableViewAppearance { self.tableView.backgroundColor = [UIColor pressBackground]; }
- (void)refreshDoneButtonAppearance
{
UIButton * doneButton = self.doneButton;
doneButton.backgroundColor = [UIColor linkBlue];
doneButton.titleLabel.font = [UIFont bold16];
[doneButton setTitle:L(@"done") forState:UIControlStateNormal];
[doneButton setTitleColor:[UIColor white] forState:UIControlStateNormal];
}
- (void)refreshAppearance
{
[self refreshStatusBarAppearance];
[self refreshTableViewAppearance];
[self refreshDoneButtonAppearance];
}
- (IBAction)applyAction
{
[MWMSearch update];
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)initialCheckConfig
{
MWMFilterCheckCell * check = self.check;
[check refreshLabelsAppearance];
[check refreshButtonsAppearance];
check.isOffline = !Platform::IsConnected();
check.delegate = self;
}
- (void)initialRatingConfig
@ -124,8 +177,6 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
configButton(rating.good, L(@"7.0+"), L(@"booking_filters_ragting_good"));
configButton(rating.veryGood, L(@"8.0+"), L(@"booking_filters_rating_very_good"));
configButton(rating.excellent, L(@"9.0+"), L(@"booking_filters_rating_excellent"));
rating.any.selected = YES;
[self resetRating];
}
- (void)initialPriceCategoryConfig
@ -134,23 +185,17 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
configButton(price.one, L(@"$"), nil);
configButton(price.two, L(@"$$"), nil);
configButton(price.three, L(@"$$$"), nil);
price.one.selected = NO;
price.two.selected = NO;
price.three.selected = NO;
[self resetPriceCategory];
}
- (void)initialTypeConfig
{
[self.type configWithTableView:self.tableView];
[self resetTypes];
}
- (void)reset
- (void)resetCheck
{
[self resetRating];
[self resetPriceCategory];
[self resetTypes];
self.checkInDate = [NSDate date];
self.checkOutDate = [[NSDate date] dateByAddingTimeInterval:kDayInterval];
}
- (void)resetRating
@ -207,6 +252,65 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
return And(And(ratingRule, priceRule), typeRule);
}
- (booking::filter::availability::Params)availabilityParams
{
using Clock = booking::AvailabilityParams::Clock;
booking::filter::availability::Params params;
params.m_params.m_rooms = {{kAdultsCount, kAgeOfChild}};
params.m_params.m_checkin = Clock::from_time_t(self.checkInDate.timeIntervalSince1970);
params.m_params.m_checkout = Clock::from_time_t(self.checkOutDate.timeIntervalSince1970);
return params;
}
#pragma mark - MWMFilterCheckCellDelegate
- (void)checkCellButtonTap:(UIButton * _Nonnull)button
{
NSString * title;
NSDate * selectedDate;
NSDate * minimumDate;
NSDate * maximumDate;
if (button == self.check.checkIn)
{
[Statistics logEvent:kStatSearchFilterClick
withParameters:@{kStatCategory: kStatHotel, kStatDate: kStatCheckIn}];
title = L(@"booking_filters_check_in");
selectedDate = self.checkInDate;
minimumDate = [[NSDate date] earlierDate:self.checkOutDate];
maximumDate = [minimumDate dateByAddingTimeInterval:k360DaysInterval];
}
else
{
[Statistics logEvent:kStatSearchFilterClick
withParameters:@{kStatCategory: kStatHotel, kStatDate: kStatCheckOut}];
title = L(@"booking_filters_check_out");
selectedDate = self.checkOutDate;
minimumDate =
[[[NSDate date] laterDate:self.checkInDate] dateByAddingTimeInterval:kDayInterval];
maximumDate = [minimumDate dateByAddingTimeInterval:k30DaysInterval];
}
auto picker = [[ActionSheetDatePicker alloc] initWithTitle:title
datePickerMode:UIDatePickerModeDate
selectedDate:selectedDate
minimumDate:minimumDate
maximumDate:maximumDate
target:self
action:@selector(datePickerDate:origin:)
origin:button];
picker.tapDismissAction = TapActionCancel;
picker.hideCancel = YES;
[picker showActionSheetPicker];
}
- (void)datePickerDate:(NSDate *)date origin:(id)origin
{
if (origin == self.check.checkIn)
self.checkInDate = date;
else
self.checkOutDate = date;
}
#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
@ -224,29 +328,42 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
UITableViewCell * cell = nil;
switch (static_cast<Section>(indexPath.section))
{
case Section::Check:
cell = [tableView dequeueReusableCellWithIdentifier:[MWMFilterCheckCell className]
forIndexPath:indexPath];
if (!self.check)
{
self.check = static_cast<MWMFilterCheckCell *>(cell);
[self resetCheck];
}
[self initialCheckConfig];
break;
case Section::Rating:
cell = [tableView dequeueReusableCellWithIdentifier:[MWMFilterRatingCell className] forIndexPath:indexPath];
if (!self.rating)
{
self.rating = static_cast<MWMFilterRatingCell *>(cell);
[self initialRatingConfig];
[self resetRating];
}
[self initialRatingConfig];
break;
case Section::PriceCategory:
cell = [tableView dequeueReusableCellWithIdentifier:[MWMFilterPriceCategoryCell className] forIndexPath:indexPath];
if (!self.price)
{
self.price = static_cast<MWMFilterPriceCategoryCell *>(cell);
[self initialPriceCategoryConfig];
[self resetPriceCategory];
}
[self initialPriceCategoryConfig];
break;
case Section::Type:
cell = [tableView dequeueReusableCellWithIdentifier:[MWMFilterCollectionHolderCell className] forIndexPath:indexPath];
if (!self.type)
{
self.type = static_cast<MWMFilterCollectionHolderCell *>(cell);
[self initialTypeConfig];
[self resetTypes];
}
[self initialTypeConfig];
break;
case Section::Count:
NSAssert(false, @"Incorrect section!");
@ -296,4 +413,33 @@ void configButton(UIButton * button, NSString * primaryText, NSString * secondar
m_selectedTypes.erase(remove(m_selectedTypes.begin(), m_selectedTypes.end(), type));
}
#pragma mark - Properties
- (void)setCheckInDate:(NSDate *)checkInDate
{
_checkInDate = checkInDate;
if (auto check = self.check)
{
[check.checkIn setTitle:[NSDateFormatter localizedStringFromDate:checkInDate
dateStyle:NSDateFormatterMediumStyle
timeStyle:NSDateFormatterNoStyle]
forState:UIControlStateNormal];
}
self.checkOutDate = [[checkInDate dateByAddingTimeInterval:k30DaysInterval]
earlierDate:[[checkInDate dateByAddingTimeInterval:kDayInterval]
laterDate:self.checkOutDate]];
}
- (void)setCheckOutDate:(NSDate *)checkOutDate
{
_checkOutDate = checkOutDate;
if (auto check = self.check)
{
[check.checkOut setTitle:[NSDateFormatter localizedStringFromDate:checkOutDate
dateStyle:NSDateFormatterMediumStyle
timeStyle:NSDateFormatterNoStyle]
forState:UIControlStateNormal];
}
}
@end

View file

@ -30,12 +30,6 @@
popover.permittedArrowDirections = UIPopoverArrowDirectionLeft;
popover.delegate = self;
}
else
{
navController.modalPresentationStyle = UIModalPresentationCustom;
self.filterTransitioningManager = [[MWMSearchFilterTransitioningManager alloc] init];
navController.transitioningDelegate = self.filterTransitioningManager;
}
[self configNavigationBar:navController.navigationBar];
[self configNavigationItem:navController.topViewController.navigationItem];
@ -102,9 +96,9 @@
#pragma mark - Actions
- (void)doneAction
- (void)closeAction
{
[MWMSearch update];
[Statistics logEvent:kStatSearchFilterCancel withParameters:@{kStatCategory: kStatHotel}];
[self.ownerController dismissViewControllerAnimated:YES completion:nil];
}

View file

@ -4,6 +4,8 @@
@interface MWMSearchCommonCell : MWMSearchCell
- (void)config:(search::Result const &)result isLocalAds:(BOOL)isLocalAds;
- (void)config:(search::Result const &)result
isLocalAds:(BOOL)isLocalAds
isAvailable:(BOOL)isAvailable;
@end

View file

@ -7,23 +7,27 @@
@interface MWMSearchCommonCell ()
@property(weak, nonatomic) IBOutlet UILabel * typeLabel;
@property(weak, nonatomic) IBOutlet UIView * infoView;
@property(weak, nonatomic) IBOutlet UILabel * infoLabel;
@property(weak, nonatomic) IBOutlet UIView * infoRatingView;
@property(nonatomic) IBOutletCollection(UIImageView) NSArray * infoRatingStars;
@property(weak, nonatomic) IBOutlet UILabel * locationLabel;
@property(weak, nonatomic) IBOutlet UILabel * distanceLabel;
@property(weak, nonatomic) IBOutlet UILabel * ratingLabel;
@property(weak, nonatomic) IBOutlet UILabel * infoLabel;
@property(weak, nonatomic) IBOutlet UILabel * locationLabel;
@property(weak, nonatomic) IBOutlet UILabel * priceLabel;
@property(weak, nonatomic) IBOutlet UILabel * ratingLabel;
@property(weak, nonatomic) IBOutlet UILabel * typeLabel;
@property(weak, nonatomic) IBOutlet UIView * closedView;
@property(weak, nonatomic) IBOutlet UIView * infoRatingView;
@property(weak, nonatomic) IBOutlet UIView * infoView;
@property(weak, nonatomic) IBOutlet UIView * availableView;
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * availableTypeOffset;
@property(weak, nonatomic) IBOutlet UIView * sideAvailableMarker;
@end
@implementation MWMSearchCommonCell
- (void)config:(search::Result const &)result isLocalAds:(BOOL)isLocalAds
- (void)config:(search::Result const &)result
isLocalAds:(BOOL)isLocalAds
isAvailable:(BOOL)isAvailable
{
[super config:result];
self.typeLabel.text = @(result.GetFeatureType().c_str()).capitalizedString;
@ -35,6 +39,10 @@
self.locationLabel.text = @(result.GetAddress().c_str());
[self.locationLabel sizeToFit];
self.availableTypeOffset.priority = UILayoutPriorityDefaultHigh;
self.availableView.hidden = !isAvailable;
self.sideAvailableMarker.hidden = !isAvailable;
NSUInteger const starsCount = result.GetStarsCount();
NSString * cuisine = @(result.GetCuisine().c_str());
if (starsCount > 0)
@ -44,28 +52,26 @@
else
[self clearInfo];
switch (result.IsOpenNow())
self.closedView.hidden = (result.IsOpenNow() != osm::No);
if (result.HasPoint())
{
case osm::Unknown:
// TODO: Correctly handle Open Now = YES value (show "OPEN" mark).
case osm::Yes: self.closedView.hidden = YES; break;
case osm::No: self.closedView.hidden = NO; break;
}
if (result.HasPoint())
string distanceStr;
CLLocation * lastLocation = [MWMLocationManager lastLocation];
if (lastLocation)
{
string distanceStr;
CLLocation * lastLocation = [MWMLocationManager lastLocation];
if (lastLocation)
{
double const dist =
MercatorBounds::DistanceOnEarth(lastLocation.mercator, result.GetFeatureCenter());
measurement_utils::FormatDistance(dist, distanceStr);
}
self.distanceLabel.text = @(distanceStr.c_str());
double const dist =
MercatorBounds::DistanceOnEarth(lastLocation.mercator, result.GetFeatureCenter());
measurement_utils::FormatDistance(dist, distanceStr);
}
self.distanceLabel.text = @(distanceStr.c_str());
}
self.backgroundColor = isLocalAds ? [UIColor bannerBackground] : [UIColor white];
if (isLocalAds)
self.backgroundColor = [UIColor bannerBackground];
else if (isAvailable)
self.backgroundColor = [UIColor transparentGreen];
else
self.backgroundColor = [UIColor white];
}
- (void)setInfoText:(NSString *)infoText
@ -74,6 +80,7 @@
self.infoLabel.hidden = NO;
self.infoRatingView.hidden = YES;
self.infoLabel.text = infoText;
self.availableTypeOffset.priority = UILayoutPriorityDefaultLow;
}
- (void)setInfoRating:(NSUInteger)infoRating
@ -81,6 +88,7 @@
self.infoView.hidden = NO;
self.infoRatingView.hidden = NO;
self.infoLabel.hidden = YES;
self.availableTypeOffset.priority = UILayoutPriorityDefaultLow;
[self.infoRatingStars
enumerateObjectsUsingBlock:^(UIImageView * star, NSUInteger idx, BOOL * stop) {
star.highlighted = star.tag <= infoRating;

View file

@ -1,13 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13527"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<array key="HelveticaNeue.ttc">
<string>HelveticaNeue</string>
</array>
</customFonts>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
@ -94,10 +99,10 @@
</userDefinedRuntimeAttributes>
</label>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AXe-5n-maZ" userLabel="Info">
<rect key="frame" x="42" y="36" width="120" height="14"/>
<rect key="frame" x="42" y="36" width="79" height="14"/>
<subviews>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vjT-oU-iIA">
<rect key="frame" x="10" y="0.0" width="110" height="14"/>
<rect key="frame" x="8" y="0.0" width="71" height="14"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
@ -107,10 +112,10 @@
</userDefinedRuntimeAttributes>
</label>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aNp-Yw-io2">
<rect key="frame" x="10" y="0.0" width="110" height="14"/>
<rect key="frame" x="8" y="0.0" width="71" height="14"/>
<subviews>
<imageView userInteractionEnabled="NO" tag="1" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hotel_star" translatesAutoresizingMaskIntoConstraints="NO" id="yWm-az-pkX">
<rect key="frame" x="4" y="2" width="11" height="10"/>
<rect key="frame" x="0.0" y="2" width="11" height="10"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="PlQ-4v-w8M"/>
<constraint firstAttribute="width" constant="11" id="jwv-No-JFH"/>
@ -120,7 +125,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hotel_star" translatesAutoresizingMaskIntoConstraints="NO" id="fU0-W2-tgC">
<rect key="frame" x="19" y="2" width="11" height="10"/>
<rect key="frame" x="15" y="2" width="11" height="10"/>
<constraints>
<constraint firstAttribute="width" constant="11" id="12P-aP-Fcq"/>
<constraint firstAttribute="height" constant="10" id="fci-53-ClD"/>
@ -130,7 +135,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hotel_star" translatesAutoresizingMaskIntoConstraints="NO" id="E8B-4H-1PX">
<rect key="frame" x="34" y="2" width="11" height="10"/>
<rect key="frame" x="30" y="2" width="11" height="10"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="ZSp-E8-lN4"/>
<constraint firstAttribute="width" constant="11" id="wJe-R5-W1w"/>
@ -140,7 +145,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" tag="4" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hotel_star" translatesAutoresizingMaskIntoConstraints="NO" id="RuV-jO-kmE">
<rect key="frame" x="49" y="2" width="11" height="10"/>
<rect key="frame" x="45" y="2" width="11" height="10"/>
<constraints>
<constraint firstAttribute="width" constant="11" id="FuT-Ha-33O"/>
<constraint firstAttribute="height" constant="10" id="QrV-px-9rk"/>
@ -150,7 +155,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" tag="5" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hotel_star" translatesAutoresizingMaskIntoConstraints="NO" id="A5b-Hv-xec">
<rect key="frame" x="64" y="2" width="11" height="10"/>
<rect key="frame" x="60" y="2" width="11" height="10"/>
<constraints>
<constraint firstAttribute="width" constant="11" id="5Ka-eP-MPM"/>
<constraint firstAttribute="height" constant="10" id="AcP-KG-fP6"/>
@ -163,21 +168,19 @@
<constraints>
<constraint firstAttribute="centerY" secondItem="yWm-az-pkX" secondAttribute="centerY" id="0E9-Bm-hXQ"/>
<constraint firstItem="A5b-Hv-xec" firstAttribute="leading" secondItem="RuV-jO-kmE" secondAttribute="trailing" constant="4" id="4pz-gI-6hO"/>
<constraint firstAttribute="trailing" secondItem="A5b-Hv-xec" secondAttribute="trailing" id="CJY-w3-EOs"/>
<constraint firstAttribute="centerY" secondItem="RuV-jO-kmE" secondAttribute="centerY" id="CaG-re-wuW"/>
<constraint firstAttribute="centerY" secondItem="E8B-4H-1PX" secondAttribute="centerY" id="ECo-SI-dTA"/>
<constraint firstItem="E8B-4H-1PX" firstAttribute="leading" secondItem="fU0-W2-tgC" secondAttribute="trailing" constant="4" id="GhI-aZ-fUY"/>
<constraint firstItem="fU0-W2-tgC" firstAttribute="leading" secondItem="yWm-az-pkX" secondAttribute="trailing" constant="4" id="JIo-XT-WI2"/>
<constraint firstAttribute="centerY" secondItem="A5b-Hv-xec" secondAttribute="centerY" id="UbM-hL-vjc"/>
<constraint firstItem="yWm-az-pkX" firstAttribute="leading" secondItem="aNp-Yw-io2" secondAttribute="leading" constant="4" id="mlJ-5B-sYc"/>
<constraint firstItem="yWm-az-pkX" firstAttribute="leading" secondItem="aNp-Yw-io2" secondAttribute="leading" id="mlJ-5B-sYc"/>
<constraint firstAttribute="centerY" secondItem="fU0-W2-tgC" secondAttribute="centerY" id="qss-XT-v7k"/>
<constraint firstItem="RuV-jO-kmE" firstAttribute="leading" secondItem="E8B-4H-1PX" secondAttribute="trailing" constant="4" id="xJk-34-X2s"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="•" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tUT-ew-nNT" userLabel="Dot">
<rect key="frame" x="2" y="0.0" width="4" height="14"/>
<constraints>
<constraint firstAttribute="width" constant="4" id="bMy-k8-Iqu"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
@ -195,11 +198,50 @@
<constraint firstItem="aNp-Yw-io2" firstAttribute="top" secondItem="AXe-5n-maZ" secondAttribute="top" id="ICI-zF-5uv"/>
<constraint firstAttribute="trailing" secondItem="aNp-Yw-io2" secondAttribute="trailing" id="OQb-HD-Hbv"/>
<constraint firstAttribute="bottom" secondItem="vjT-oU-iIA" secondAttribute="bottom" id="PuH-9D-3T5"/>
<constraint firstItem="vjT-oU-iIA" firstAttribute="leading" secondItem="tUT-ew-nNT" secondAttribute="trailing" constant="4" id="UAm-zh-FNA"/>
<constraint firstItem="vjT-oU-iIA" firstAttribute="leading" secondItem="tUT-ew-nNT" secondAttribute="trailing" constant="2" id="UAm-zh-FNA"/>
<constraint firstItem="tUT-ew-nNT" firstAttribute="leading" secondItem="AXe-5n-maZ" secondAttribute="leading" constant="2" id="aGr-G1-DAx"/>
<constraint firstItem="tUT-ew-nNT" firstAttribute="top" secondItem="AXe-5n-maZ" secondAttribute="top" id="gG3-v0-sqQ"/>
<constraint firstItem="aNp-Yw-io2" firstAttribute="leading" secondItem="tUT-ew-nNT" secondAttribute="trailing" constant="4" id="jed-QI-J5C"/>
<constraint firstAttribute="width" constant="120" id="w0I-4z-Bix"/>
<constraint firstItem="aNp-Yw-io2" firstAttribute="leading" secondItem="tUT-ew-nNT" secondAttribute="trailing" constant="2" id="jed-QI-J5C"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Pt3-c2-zwP">
<rect key="frame" x="121" y="36" width="53.5" height="14"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.40000000000000002" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="•" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="j80-N8-LC8" userLabel="Dot">
<rect key="frame" x="2" y="0.0" width="4" height="14"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular12"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sold out" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xc4-cr-hoV">
<rect key="frame" x="8" y="0.0" width="45.5" height="14"/>
<accessibility key="accessibilityConfiguration" identifier="searchType"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="26" id="NiX-u2-WX2"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular12"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="ratingGreen"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="hotel_available"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="j80-N8-LC8" firstAttribute="top" secondItem="Pt3-c2-zwP" secondAttribute="top" id="gb0-9i-6yX"/>
<constraint firstAttribute="bottom" secondItem="j80-N8-LC8" secondAttribute="bottom" id="ibb-r7-1jR"/>
<constraint firstAttribute="bottom" secondItem="Xc4-cr-hoV" secondAttribute="bottom" id="kOc-m4-00i"/>
<constraint firstItem="Xc4-cr-hoV" firstAttribute="leading" secondItem="j80-N8-LC8" secondAttribute="trailing" constant="2" id="oXc-ZH-w9P"/>
<constraint firstItem="Xc4-cr-hoV" firstAttribute="top" secondItem="Pt3-c2-zwP" secondAttribute="top" id="p4B-vN-DSf"/>
<constraint firstAttribute="trailing" secondItem="Xc4-cr-hoV" secondAttribute="trailing" id="s9Y-eb-cPp"/>
<constraint firstItem="j80-N8-LC8" firstAttribute="leading" secondItem="Pt3-c2-zwP" secondAttribute="leading" constant="2" id="tON-mp-4GU"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="253" verticalCompressionResistancePriority="753" text="Rating" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="70N-Lq-mj9">
@ -233,6 +275,16 @@
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ygy-0c-QWk">
<rect key="frame" x="0.0" y="0.0" width="2" height="108.5"/>
<color key="backgroundColor" red="0.1215686275" green="0.59999999999999998" blue="0.32156862749999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="2" id="ftl-SQ-Gfg"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="ratingGreen"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
@ -240,33 +292,42 @@
<constraint firstItem="70N-Lq-mj9" firstAttribute="top" secondItem="5UO-MD-Hgx" secondAttribute="bottom" constant="4" id="5D1-Su-Oke"/>
<constraint firstItem="5UO-MD-Hgx" firstAttribute="top" secondItem="4FD-RE-ffF" secondAttribute="bottom" constant="4" id="5dn-ca-dCn"/>
<constraint firstItem="AXe-5n-maZ" firstAttribute="leading" secondItem="5UO-MD-Hgx" secondAttribute="trailing" id="61j-Xn-Fhq"/>
<constraint firstAttribute="bottom" secondItem="ygy-0c-QWk" secondAttribute="bottom" id="8Js-dA-NXL"/>
<constraint firstAttribute="trailing" secondItem="WOF-of-CqB" secondAttribute="trailing" constant="16" id="AUe-ro-9nc"/>
<constraint firstItem="70N-Lq-mj9" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="G9m-Dr-gz2"/>
<constraint firstItem="ygy-0c-QWk" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="MPB-mh-INv"/>
<constraint firstItem="AXe-5n-maZ" firstAttribute="height" secondItem="5UO-MD-Hgx" secondAttribute="height" id="Q8G-UX-dmf"/>
<constraint firstItem="4FD-RE-ffF" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="Qld-dY-CQN"/>
<constraint firstAttribute="trailing" secondItem="4FD-RE-ffF" secondAttribute="trailing" constant="84" id="Ugu-lP-b9G"/>
<constraint firstAttribute="trailing" secondItem="P8X-Xp-AaE" secondAttribute="trailing" constant="16" id="VJE-wo-TBb"/>
<constraint firstItem="6pc-4s-GyP" firstAttribute="top" secondItem="70N-Lq-mj9" secondAttribute="bottom" constant="4" id="aFG-lW-QGv"/>
<constraint firstItem="WOF-of-CqB" firstAttribute="centerY" secondItem="70N-Lq-mj9" secondAttribute="centerY" id="drZ-ks-Xr4"/>
<constraint firstItem="Pt3-c2-zwP" firstAttribute="leading" secondItem="5UO-MD-Hgx" secondAttribute="trailing" priority="250" id="epG-jY-kzY"/>
<constraint firstItem="Pt3-c2-zwP" firstAttribute="bottom" secondItem="AXe-5n-maZ" secondAttribute="bottom" id="gmr-zk-MiU"/>
<constraint firstItem="4FD-RE-ffF" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="hM6-br-iKE"/>
<constraint firstItem="6pc-4s-GyP" firstAttribute="leading" secondItem="5UO-MD-Hgx" secondAttribute="leading" id="jvQ-jd-XUJ"/>
<constraint firstItem="AXe-5n-maZ" firstAttribute="centerY" secondItem="5UO-MD-Hgx" secondAttribute="centerY" id="kfK-H3-3fw"/>
<constraint firstAttribute="trailing" secondItem="V8w-dT-7B1" secondAttribute="trailing" constant="16" id="lr7-cG-wNo"/>
<constraint firstItem="HGm-lZ-JNr" firstAttribute="top" secondItem="6pc-4s-GyP" secondAttribute="bottom" constant="12" id="m1K-R2-0LQ"/>
<constraint firstItem="Pt3-c2-zwP" firstAttribute="leading" secondItem="AXe-5n-maZ" secondAttribute="trailing" priority="500" id="mhG-aw-lzf"/>
<constraint firstItem="5UO-MD-Hgx" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="nGL-Ta-pBZ"/>
<constraint firstAttribute="trailing" secondItem="6pc-4s-GyP" secondAttribute="trailing" constant="84" id="nfE-NI-LX9"/>
<constraint firstItem="6pc-4s-GyP" firstAttribute="bottom" secondItem="P8X-Xp-AaE" secondAttribute="bottom" id="q7E-Jg-MYT"/>
<constraint firstItem="P8X-Xp-AaE" firstAttribute="top" relation="greaterThanOrEqual" secondItem="WOF-of-CqB" secondAttribute="bottom" constant="4" id="rfU-L8-Nem"/>
<constraint firstItem="HGm-lZ-JNr" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="sq9-C3-M3R"/>
<constraint firstAttribute="bottom" secondItem="HGm-lZ-JNr" secondAttribute="bottom" id="vJc-aE-MsA"/>
<constraint firstItem="Pt3-c2-zwP" firstAttribute="top" secondItem="AXe-5n-maZ" secondAttribute="top" id="wiM-xV-kJd"/>
<constraint firstItem="V8w-dT-7B1" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="16" id="x1p-sf-n4c"/>
<constraint firstAttribute="trailing" secondItem="HGm-lZ-JNr" secondAttribute="trailing" id="xt0-86-Efu"/>
<constraint firstItem="ygy-0c-QWk" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="yMv-MH-rXf"/>
</constraints>
</tableViewCellContentView>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="availableTypeOffset" destination="epG-jY-kzY" id="Pun-hS-54k"/>
<outlet property="availableView" destination="Pt3-c2-zwP" id="XIQ-kb-EZd"/>
<outlet property="closedView" destination="V8w-dT-7B1" id="5by-Nb-6Ch"/>
<outlet property="distanceLabel" destination="P8X-Xp-AaE" id="Kaw-aR-8uJ"/>
<outlet property="infoLabel" destination="vjT-oU-iIA" id="K5N-O7-B0x"/>
@ -275,6 +336,7 @@
<outlet property="locationLabel" destination="6pc-4s-GyP" id="Te0-y3-sVQ"/>
<outlet property="priceLabel" destination="WOF-of-CqB" id="Qbd-jK-n6t"/>
<outlet property="ratingLabel" destination="70N-Lq-mj9" id="Ubw-Oy-p1k"/>
<outlet property="sideAvailableMarker" destination="ygy-0c-QWk" id="6XC-pj-HE0"/>
<outlet property="titleLabel" destination="4FD-RE-ffF" id="OQm-o8-LUd"/>
<outlet property="typeLabel" destination="5UO-MD-Hgx" id="lgJ-zE-omX"/>
<outletCollection property="infoRatingStars" destination="yWm-az-pkX" id="KH2-Ui-WLS"/>

View file

@ -87,7 +87,8 @@
indexPath:indexPath]);
auto const & result = [MWMSearch resultWithContainerIndex:containerIndex];
auto const isLocalAds = [MWMSearch isLocalAdsWithContainerIndex:containerIndex];
[cell config:result isLocalAds:isLocalAds];
auto const isBookingAvailable = [MWMSearch isBookingAvailableWithContainerIndex:containerIndex];
[cell config:result isLocalAds:isLocalAds isAvailable:isBookingAvailable];
return cell;
}
case MWMSearchItemTypeMopub:

View file

@ -10,271 +10,366 @@
</dependencies>
<scenes>
<!--Search Hotels Filter View Controller-->
<scene sceneID="Rgk-Uh-KhM">
<scene sceneID="3Lw-zP-9hH">
<objects>
<tableViewController storyboardIdentifier="MWMSearchHotelsFilterViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="ba5-kG-Q6e" customClass="MWMSearchHotelsFilterViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="18" id="h41-fx-HZL">
<viewController storyboardIdentifier="MWMSearchHotelsFilterViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="LNn-Gp-Jtg" customClass="MWMSearchHotelsFilterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="EOv-fJ-aYA"/>
<viewControllerLayoutGuide type="bottom" id="NCN-l0-Vgh"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="a4S-IT-Fgz">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MWMFilterRatingCell" id="S86-4W-dBQ" customClass="MWMFilterRatingCell">
<rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="S86-4W-dBQ" id="k1w-ko-jKp">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="3XN-J7-em8">
<rect key="frame" x="0.0" y="0.0" width="93" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="E58-vc-yBF"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="ANY"/>
<connections>
<action selector="tapWithSender:" destination="S86-4W-dBQ" eventType="touchUpInside" id="exN-EB-T5u"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="Zkg-9y-Z28">
<rect key="frame" x="94" y="0.0" width="93" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="gPX-Bs-KIU"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="7.0+"/>
<state key="disabled">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="tapWithSender:" destination="S86-4W-dBQ" eventType="touchUpInside" id="1At-AL-CFz"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="X6d-fl-45M">
<rect key="frame" x="188" y="0.0" width="93" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="d9u-9o-l3n"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="8.0+"/>
<connections>
<action selector="tapWithSender:" destination="S86-4W-dBQ" eventType="touchUpInside" id="mwC-1w-IHx"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="s7t-4f-3jf">
<rect key="frame" x="282" y="0.0" width="93" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="Une-Xt-NqA"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="9.0+"/>
<connections>
<action selector="tapWithSender:" destination="S86-4W-dBQ" eventType="touchUpInside" id="41Y-td-8L1"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="s7t-4f-3jf" secondAttribute="trailing" id="0HE-4Q-tcV"/>
<constraint firstItem="3XN-J7-em8" firstAttribute="top" secondItem="k1w-ko-jKp" secondAttribute="top" id="2cf-SF-H9J"/>
<constraint firstItem="3XN-J7-em8" firstAttribute="width" secondItem="Zkg-9y-Z28" secondAttribute="width" id="8aj-Y4-3hI"/>
<constraint firstItem="X6d-fl-45M" firstAttribute="top" secondItem="k1w-ko-jKp" secondAttribute="top" id="Fir-ad-qrK"/>
<constraint firstItem="s7t-4f-3jf" firstAttribute="leading" secondItem="X6d-fl-45M" secondAttribute="trailing" constant="1" id="HIv-c2-V2I"/>
<constraint firstItem="X6d-fl-45M" firstAttribute="width" secondItem="s7t-4f-3jf" secondAttribute="width" id="LEq-XC-YxP"/>
<constraint firstAttribute="bottom" secondItem="3XN-J7-em8" secondAttribute="bottom" id="X6N-M7-EPf"/>
<constraint firstItem="Zkg-9y-Z28" firstAttribute="leading" secondItem="3XN-J7-em8" secondAttribute="trailing" constant="1" id="YYA-yc-USl"/>
<constraint firstItem="3XN-J7-em8" firstAttribute="leading" secondItem="k1w-ko-jKp" secondAttribute="leading" id="jSz-Oe-fHi"/>
<constraint firstAttribute="bottom" secondItem="Zkg-9y-Z28" secondAttribute="bottom" id="rMR-zk-TOw"/>
<constraint firstItem="Zkg-9y-Z28" firstAttribute="width" secondItem="X6d-fl-45M" secondAttribute="width" id="srM-9Y-kMU"/>
<constraint firstAttribute="bottom" secondItem="s7t-4f-3jf" secondAttribute="bottom" id="v98-aC-TOi"/>
<constraint firstItem="X6d-fl-45M" firstAttribute="leading" secondItem="Zkg-9y-Z28" secondAttribute="trailing" constant="1" id="vRU-AP-dZP"/>
<constraint firstItem="Zkg-9y-Z28" firstAttribute="top" secondItem="k1w-ko-jKp" secondAttribute="top" id="vdQ-SU-7i3"/>
<constraint firstItem="s7t-4f-3jf" firstAttribute="top" secondItem="k1w-ko-jKp" secondAttribute="top" id="xb2-G6-Ncy"/>
<constraint firstAttribute="bottom" secondItem="X6d-fl-45M" secondAttribute="bottom" id="yf7-5l-fTe"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="blackDividers"/>
</userDefinedRuntimeAttributes>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZN9-tQ-vmX">
<rect key="frame" x="0.0" y="623" width="375" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="5sg-ZZ-930"/>
</constraints>
<state key="normal" title="Button"/>
<connections>
<outlet property="any" destination="3XN-J7-em8" id="iR3-03-gnO"/>
<outlet property="excellent" destination="s7t-4f-3jf" id="JrZ-9W-KEU"/>
<outlet property="good" destination="Zkg-9y-Z28" id="eQR-K6-HcO"/>
<outlet property="veryGood" destination="X6d-fl-45M" id="Um3-VW-zJd"/>
<outletCollection property="ratingButtons" destination="3XN-J7-em8" collectionClass="NSMutableArray" id="z7g-ym-3m2"/>
<outletCollection property="ratingButtons" destination="Zkg-9y-Z28" collectionClass="NSMutableArray" id="mBt-lw-Nxx"/>
<outletCollection property="ratingButtons" destination="X6d-fl-45M" collectionClass="NSMutableArray" id="xtk-MQ-8HY"/>
<outletCollection property="ratingButtons" destination="s7t-4f-3jf" collectionClass="NSMutableArray" id="zBc-kH-uxP"/>
<action selector="applyAction" destination="LNn-Gp-Jtg" eventType="touchUpInside" id="q2Q-O2-QLa"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MWMFilterPriceCategoryCell" id="v9h-eu-GaI" customClass="MWMFilterPriceCategoryCell">
<rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="v9h-eu-GaI" id="BUk-m8-14p">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="mqG-GU-eru">
<rect key="frame" x="0.0" y="0.0" width="124.5" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="q2T-hC-KgK"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="$"/>
<connections>
<action selector="tapWithSender:" destination="v9h-eu-GaI" eventType="touchUpInside" id="3ie-Xj-gi1"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="G1g-Nv-ywz">
<rect key="frame" x="125.5" y="0.0" width="124.5" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="HeG-D3-CJX"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="$$"/>
<connections>
<action selector="tapWithSender:" destination="v9h-eu-GaI" eventType="touchUpInside" id="VR9-bs-JmD"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="bJB-5R-Lwq">
<rect key="frame" x="251" y="0.0" width="124" height="47.5"/>
<constraints>
<constraint firstAttribute="height" constant="47.5" id="zuL-aY-fsx"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="$$$"/>
<connections>
<action selector="tapWithSender:" destination="v9h-eu-GaI" eventType="touchUpInside" id="1xF-dH-zvv"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="G1g-Nv-ywz" firstAttribute="width" secondItem="bJB-5R-Lwq" secondAttribute="width" id="2Rq-QB-wKr"/>
<constraint firstItem="bJB-5R-Lwq" firstAttribute="top" secondItem="BUk-m8-14p" secondAttribute="top" id="Do1-VA-ZF5"/>
<constraint firstItem="bJB-5R-Lwq" firstAttribute="leading" secondItem="G1g-Nv-ywz" secondAttribute="trailing" constant="1" id="G1k-10-O9x"/>
<constraint firstItem="G1g-Nv-ywz" firstAttribute="leading" secondItem="mqG-GU-eru" secondAttribute="trailing" constant="1" id="SpC-Ga-1eL"/>
<constraint firstAttribute="bottom" secondItem="bJB-5R-Lwq" secondAttribute="bottom" id="Vb5-be-4J1"/>
<constraint firstAttribute="bottom" secondItem="G1g-Nv-ywz" secondAttribute="bottom" id="VcP-lH-ev9"/>
<constraint firstAttribute="trailing" secondItem="bJB-5R-Lwq" secondAttribute="trailing" id="Wth-2N-NDF"/>
<constraint firstItem="mqG-GU-eru" firstAttribute="top" secondItem="BUk-m8-14p" secondAttribute="top" id="bhx-Qd-RSN"/>
<constraint firstItem="G1g-Nv-ywz" firstAttribute="top" secondItem="BUk-m8-14p" secondAttribute="top" id="jle-uq-3IR"/>
<constraint firstItem="mqG-GU-eru" firstAttribute="leading" secondItem="BUk-m8-14p" secondAttribute="leading" id="nMS-Dx-9Ry"/>
<constraint firstItem="mqG-GU-eru" firstAttribute="width" secondItem="G1g-Nv-ywz" secondAttribute="width" id="pbq-DX-uvw"/>
<constraint firstAttribute="bottom" secondItem="mqG-GU-eru" secondAttribute="bottom" id="vft-M7-INB"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="blackDividers"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="one" destination="mqG-GU-eru" id="CX5-AR-XDd"/>
<outlet property="three" destination="bJB-5R-Lwq" id="IMN-FB-YEK"/>
<outlet property="two" destination="G1g-Nv-ywz" id="oNr-H9-ySh"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="MWMFilterCollectionHolderCell" id="ZRo-hf-WJG" customClass="MWMFilterCollectionHolderCell">
<rect key="frame" x="0.0" y="143.5" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ZRo-hf-WJG" id="5F8-bU-App">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="v8G-NE-XjS">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" priority="999" constant="43.5" id="b2e-bF-rYZ"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="12" minimumInteritemSpacing="8" id="lQh-zk-VkZ" customClass="TypeCellFlowLayout" customModule="cm_beta" customModuleProvider="target">
<size key="itemSize" width="50" height="36"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="16" minY="0.0" maxX="16" maxY="0.0"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="size" keyPath="estimatedItemSize">
<size key="value" width="100" height="36"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MWMFilterTypeCell" id="aZZ-fh-Eiq" customClass="MWMFilterTypeCell">
<rect key="frame" x="16" y="0.0" width="50" height="36"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="50" height="36"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K5r-3z-T5D">
<rect key="frame" x="12" y="8" width="26" height="20"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
</view>
</button>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="1" estimatedSectionFooterHeight="1" translatesAutoresizingMaskIntoConstraints="NO" id="7db-bh-egf">
<rect key="frame" x="0.0" y="0.0" width="375" height="623"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MWMFilterCheckCell" rowHeight="71" id="kQ5-BZ-yUa" customClass="MWMFilterCheckCell">
<rect key="frame" x="0.0" y="55.5" width="375" height="71"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="kQ5-BZ-yUa" id="vGr-Kk-qrA">
<rect key="frame" x="0.0" y="0.0" width="375" height="70.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7zd-JW-kVE">
<rect key="frame" x="16" y="8" width="42" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5zu-QE-OXk">
<rect key="frame" x="16" y="32.5" width="167.5" height="36"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="K5r-3z-T5D" secondAttribute="trailing" constant="12" id="Eq7-d1-jlZ"/>
<constraint firstAttribute="bottom" secondItem="K5r-3z-T5D" secondAttribute="bottom" constant="8" id="Fle-be-70n"/>
<constraint firstItem="K5r-3z-T5D" firstAttribute="leading" secondItem="aZZ-fh-Eiq" secondAttribute="leading" constant="12" id="HJG-06-Qd2"/>
<constraint firstItem="K5r-3z-T5D" firstAttribute="top" secondItem="aZZ-fh-Eiq" secondAttribute="top" constant="8" id="hm7-jV-X7Q"/>
<constraint firstAttribute="height" constant="36" id="H9S-4G-HPV"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="layer.borderUIColor">
<color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<integer key="value" value="1"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" title="Button"/>
<connections>
<outlet property="tagName" destination="K5r-3z-T5D" id="cmT-Pp-KWq"/>
<action selector="tapWithSender:" destination="kQ5-BZ-yUa" eventType="touchUpInside" id="LTt-Kr-awO"/>
</connections>
</collectionViewCell>
</cells>
<connections>
<outlet property="dataSource" destination="ba5-kG-Q6e" id="LMC-8u-t3q"/>
<outlet property="delegate" destination="ba5-kG-Q6e" id="b9n-gM-3Ra"/>
</connections>
</collectionView>
</subviews>
<constraints>
<constraint firstItem="v8G-NE-XjS" firstAttribute="top" secondItem="5F8-bU-App" secondAttribute="top" id="IQA-OX-qzV"/>
<constraint firstAttribute="bottom" secondItem="v8G-NE-XjS" secondAttribute="bottom" id="TgL-XO-DZm"/>
<constraint firstAttribute="trailing" secondItem="v8G-NE-XjS" secondAttribute="trailing" id="XVe-BC-wbE"/>
<constraint firstItem="v8G-NE-XjS" firstAttribute="leading" secondItem="5F8-bU-App" secondAttribute="leading" id="yNU-lt-sCT"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="pressBackground"/>
</userDefinedRuntimeAttributes>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WZ7-6d-CsM">
<rect key="frame" x="191.5" y="8" width="42" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="leading" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nOA-aX-aet">
<rect key="frame" x="191.5" y="32.5" width="167.5" height="36"/>
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" title="Button"/>
<connections>
<action selector="tapWithSender:" destination="kQ5-BZ-yUa" eventType="touchUpInside" id="O1l-vW-dJm"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pAF-QN-4y0">
<rect key="frame" x="16" y="76.5" width="42" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="nOA-aX-aet" firstAttribute="bottom" secondItem="5zu-QE-OXk" secondAttribute="bottom" id="0JB-kY-iit"/>
<constraint firstItem="pAF-QN-4y0" firstAttribute="leading" secondItem="5zu-QE-OXk" secondAttribute="leading" id="2Zt-jT-kwZ"/>
<constraint firstItem="nOA-aX-aet" firstAttribute="top" secondItem="5zu-QE-OXk" secondAttribute="top" id="5v1-yp-kff"/>
<constraint firstItem="5zu-QE-OXk" firstAttribute="leading" secondItem="vGr-Kk-qrA" secondAttribute="leading" constant="16" id="7oj-bP-c6P"/>
<constraint firstItem="WZ7-6d-CsM" firstAttribute="leading" secondItem="nOA-aX-aet" secondAttribute="leading" id="DrB-ed-dMM"/>
<constraint firstItem="WZ7-6d-CsM" firstAttribute="bottom" secondItem="7zd-JW-kVE" secondAttribute="bottom" id="Mh1-9J-l5L"/>
<constraint firstItem="7zd-JW-kVE" firstAttribute="top" secondItem="vGr-Kk-qrA" secondAttribute="top" constant="8" id="QIX-oz-miD"/>
<constraint firstItem="7zd-JW-kVE" firstAttribute="leading" secondItem="5zu-QE-OXk" secondAttribute="leading" id="QjU-70-ymT"/>
<constraint firstAttribute="bottom" secondItem="pAF-QN-4y0" secondAttribute="bottom" priority="750" id="XhL-YQ-Nqi"/>
<constraint firstItem="5zu-QE-OXk" firstAttribute="top" secondItem="7zd-JW-kVE" secondAttribute="bottom" constant="4" id="YHd-2A-jdm"/>
<constraint firstAttribute="bottom" secondItem="5zu-QE-OXk" secondAttribute="bottom" priority="500" constant="8" id="igX-WT-Sbc"/>
<constraint firstAttribute="trailing" secondItem="nOA-aX-aet" secondAttribute="trailing" constant="16" id="u9s-j0-Ssy"/>
<constraint firstItem="nOA-aX-aet" firstAttribute="width" secondItem="5zu-QE-OXk" secondAttribute="width" id="uQc-tK-bFT"/>
<constraint firstItem="pAF-QN-4y0" firstAttribute="top" secondItem="5zu-QE-OXk" secondAttribute="bottom" constant="8" id="v8t-KD-IId"/>
<constraint firstItem="nOA-aX-aet" firstAttribute="leading" secondItem="5zu-QE-OXk" secondAttribute="trailing" constant="8" id="zsf-4T-2uv"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<connections>
<outlet property="checkIn" destination="5zu-QE-OXk" id="DfS-1D-9nx"/>
<outlet property="checkInLabel" destination="7zd-JW-kVE" id="8Hs-aK-XDs"/>
<outlet property="checkOut" destination="nOA-aX-aet" id="gsb-Iw-kIc"/>
<outlet property="checkOutLabel" destination="WZ7-6d-CsM" id="afZ-dy-Yjd"/>
<outlet property="offlineLabel" destination="pAF-QN-4y0" id="JkR-hq-d64"/>
<outlet property="offlineLabelBottomOffset" destination="XhL-YQ-Nqi" id="nah-9l-cXz"/>
<outletCollection property="checkButtons" destination="5zu-QE-OXk" collectionClass="NSMutableArray" id="Ukb-2q-2B2"/>
<outletCollection property="checkButtons" destination="nOA-aX-aet" collectionClass="NSMutableArray" id="DlI-M0-Dxv"/>
<outletCollection property="checkLabels" destination="7zd-JW-kVE" collectionClass="NSMutableArray" id="cOD-ED-hBW"/>
<outletCollection property="checkLabels" destination="WZ7-6d-CsM" collectionClass="NSMutableArray" id="GLa-Hh-4wW"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MWMFilterRatingCell" rowHeight="52" id="HvO-7t-FdB" customClass="MWMFilterRatingCell">
<rect key="frame" x="0.0" y="126.5" width="375" height="52"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="HvO-7t-FdB" id="waN-Zz-Fjw">
<rect key="frame" x="0.0" y="0.0" width="375" height="51.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="JOt-Yh-HTx">
<rect key="frame" x="16" y="0.0" width="80" height="52.5"/>
<constraints>
<constraint firstAttribute="height" constant="52" id="ruI-U2-WeD"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="ANY"/>
<connections>
<action selector="tapWithSender:" destination="HvO-7t-FdB" eventType="touchUpInside" id="Jn8-i9-S7Z"/>
</connections>
</button>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="tIg-d6-2V9">
<rect key="frame" x="104" y="0.0" width="79.5" height="52.5"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="7.0+"/>
<state key="disabled">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="tapWithSender:" destination="HvO-7t-FdB" eventType="touchUpInside" id="uqM-8E-QJL"/>
</connections>
</button>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="LLw-eV-IqX">
<rect key="frame" x="191.5" y="0.0" width="80" height="52.5"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="8.0+"/>
<connections>
<action selector="tapWithSender:" destination="HvO-7t-FdB" eventType="touchUpInside" id="RPh-fR-jXK"/>
</connections>
</button>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="30K-lZ-hUy">
<rect key="frame" x="279.5" y="0.0" width="79.5" height="52.5"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="9.0+"/>
<connections>
<action selector="tapWithSender:" destination="HvO-7t-FdB" eventType="touchUpInside" id="qSN-2y-IEP"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="LLw-eV-IqX" firstAttribute="width" secondItem="30K-lZ-hUy" secondAttribute="width" id="4pP-Zp-y9U"/>
<constraint firstItem="LLw-eV-IqX" firstAttribute="leading" secondItem="tIg-d6-2V9" secondAttribute="trailing" constant="8" id="6xc-9x-zVh"/>
<constraint firstItem="30K-lZ-hUy" firstAttribute="top" secondItem="waN-Zz-Fjw" secondAttribute="top" id="ABJ-9a-bvf"/>
<constraint firstItem="30K-lZ-hUy" firstAttribute="leading" secondItem="LLw-eV-IqX" secondAttribute="trailing" constant="8" id="AVD-bt-Tbf"/>
<constraint firstAttribute="bottom" secondItem="30K-lZ-hUy" secondAttribute="bottom" id="Dhh-yh-cUj"/>
<constraint firstItem="30K-lZ-hUy" firstAttribute="height" secondItem="JOt-Yh-HTx" secondAttribute="height" id="P4S-QP-iMi"/>
<constraint firstItem="tIg-d6-2V9" firstAttribute="leading" secondItem="JOt-Yh-HTx" secondAttribute="trailing" constant="8" id="Xt5-Ci-dPe"/>
<constraint firstItem="JOt-Yh-HTx" firstAttribute="leading" secondItem="waN-Zz-Fjw" secondAttribute="leading" constant="16" id="afW-S8-Vvt"/>
<constraint firstItem="tIg-d6-2V9" firstAttribute="width" secondItem="LLw-eV-IqX" secondAttribute="width" id="bLN-Qd-LXf"/>
<constraint firstItem="LLw-eV-IqX" firstAttribute="top" secondItem="waN-Zz-Fjw" secondAttribute="top" id="bMV-s9-W6R"/>
<constraint firstAttribute="bottom" secondItem="tIg-d6-2V9" secondAttribute="bottom" id="kFc-Xp-xXa"/>
<constraint firstAttribute="bottom" secondItem="JOt-Yh-HTx" secondAttribute="bottom" id="mIW-AM-ash"/>
<constraint firstItem="JOt-Yh-HTx" firstAttribute="width" secondItem="tIg-d6-2V9" secondAttribute="width" id="mX9-mR-CLA"/>
<constraint firstAttribute="trailing" secondItem="30K-lZ-hUy" secondAttribute="trailing" constant="16" id="qh1-59-b43"/>
<constraint firstItem="LLw-eV-IqX" firstAttribute="height" secondItem="JOt-Yh-HTx" secondAttribute="height" id="sMz-Th-Ffa"/>
<constraint firstItem="tIg-d6-2V9" firstAttribute="top" secondItem="waN-Zz-Fjw" secondAttribute="top" id="sx2-3N-F0c"/>
<constraint firstAttribute="bottom" secondItem="LLw-eV-IqX" secondAttribute="bottom" id="uJE-dI-FWa"/>
<constraint firstItem="JOt-Yh-HTx" firstAttribute="top" secondItem="waN-Zz-Fjw" secondAttribute="top" id="w1L-U4-tNT"/>
<constraint firstItem="tIg-d6-2V9" firstAttribute="height" secondItem="JOt-Yh-HTx" secondAttribute="height" id="wuT-Sx-ZCB"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<connections>
<outlet property="any" destination="JOt-Yh-HTx" id="XYj-2S-NPG"/>
<outlet property="excellent" destination="30K-lZ-hUy" id="LEk-O4-QOB"/>
<outlet property="good" destination="tIg-d6-2V9" id="Me8-mF-006"/>
<outlet property="veryGood" destination="LLw-eV-IqX" id="L4g-3p-3ch"/>
<outletCollection property="ratingButtons" destination="JOt-Yh-HTx" collectionClass="NSMutableArray" id="y4B-tS-zYK"/>
<outletCollection property="ratingButtons" destination="tIg-d6-2V9" collectionClass="NSMutableArray" id="fBL-hc-tOP"/>
<outletCollection property="ratingButtons" destination="LLw-eV-IqX" collectionClass="NSMutableArray" id="CCq-jP-1fW"/>
<outletCollection property="ratingButtons" destination="30K-lZ-hUy" collectionClass="NSMutableArray" id="Iys-NH-dNe"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MWMFilterPriceCategoryCell" rowHeight="40" id="Awa-kZ-hF2" customClass="MWMFilterPriceCategoryCell">
<rect key="frame" x="0.0" y="178.5" width="375" height="40"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Awa-kZ-hF2" id="m4Z-4y-BeU">
<rect key="frame" x="0.0" y="0.0" width="375" height="39.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="cm9-a2-KtE">
<rect key="frame" x="16" y="0.0" width="108.5" height="40"/>
<constraints>
<constraint firstAttribute="height" constant="40" id="ntq-iz-6Ov"/>
</constraints>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="$"/>
<connections>
<action selector="tapWithSender:" destination="Awa-kZ-hF2" eventType="touchUpInside" id="ghA-FY-nXb"/>
</connections>
</button>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="eEn-77-iwI">
<rect key="frame" x="132.5" y="0.0" width="109.5" height="40"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="$$"/>
<connections>
<action selector="tapWithSender:" destination="Awa-kZ-hF2" eventType="touchUpInside" id="J3i-Eu-nrp"/>
</connections>
</button>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="wordWrap" translatesAutoresizingMaskIntoConstraints="NO" id="96b-HD-t1A">
<rect key="frame" x="250" y="0.0" width="109" height="40"/>
<color key="tintColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" title="$$$"/>
<connections>
<action selector="tapWithSender:" destination="Awa-kZ-hF2" eventType="touchUpInside" id="Yxp-Ek-iI8"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="cm9-a2-KtE" firstAttribute="leading" secondItem="m4Z-4y-BeU" secondAttribute="leading" constant="16" id="0k7-Q1-vkR"/>
<constraint firstItem="96b-HD-t1A" firstAttribute="top" secondItem="m4Z-4y-BeU" secondAttribute="top" id="5c1-no-GfT"/>
<constraint firstItem="cm9-a2-KtE" firstAttribute="top" secondItem="m4Z-4y-BeU" secondAttribute="top" id="9V5-CQ-aOf"/>
<constraint firstItem="eEn-77-iwI" firstAttribute="top" secondItem="m4Z-4y-BeU" secondAttribute="top" id="Ccf-cE-dtW"/>
<constraint firstAttribute="trailing" secondItem="96b-HD-t1A" secondAttribute="trailing" constant="16" id="Dws-aA-Sq6"/>
<constraint firstItem="eEn-77-iwI" firstAttribute="height" secondItem="cm9-a2-KtE" secondAttribute="height" id="IpR-r7-Ulf"/>
<constraint firstItem="eEn-77-iwI" firstAttribute="leading" secondItem="cm9-a2-KtE" secondAttribute="trailing" constant="8" id="MIs-g5-t7c"/>
<constraint firstItem="96b-HD-t1A" firstAttribute="height" secondItem="cm9-a2-KtE" secondAttribute="height" id="Vyv-zn-rua"/>
<constraint firstAttribute="bottom" secondItem="cm9-a2-KtE" secondAttribute="bottom" id="XHZ-oV-OhQ"/>
<constraint firstAttribute="bottom" secondItem="eEn-77-iwI" secondAttribute="bottom" id="Y5W-vQ-0t9"/>
<constraint firstItem="96b-HD-t1A" firstAttribute="leading" secondItem="eEn-77-iwI" secondAttribute="trailing" constant="8" id="YDc-oc-0nt"/>
<constraint firstItem="cm9-a2-KtE" firstAttribute="width" secondItem="eEn-77-iwI" secondAttribute="width" id="dF7-hb-fIR"/>
<constraint firstAttribute="bottom" secondItem="96b-HD-t1A" secondAttribute="bottom" id="dxf-Rz-kpg"/>
<constraint firstItem="eEn-77-iwI" firstAttribute="width" secondItem="96b-HD-t1A" secondAttribute="width" id="wq7-TT-8Vy"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<connections>
<outlet property="one" destination="cm9-a2-KtE" id="IJD-ag-dAe"/>
<outlet property="three" destination="96b-HD-t1A" id="8Am-J8-Uh9"/>
<outlet property="two" destination="eEn-77-iwI" id="4cE-Rj-xc4"/>
<outletCollection property="priceButtons" destination="cm9-a2-KtE" collectionClass="NSMutableArray" id="HOG-o8-6O8"/>
<outletCollection property="priceButtons" destination="eEn-77-iwI" collectionClass="NSMutableArray" id="y0p-cb-9yN"/>
<outletCollection property="priceButtons" destination="96b-HD-t1A" collectionClass="NSMutableArray" id="A2o-QC-xn7"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="MWMFilterCollectionHolderCell" id="MeX-wf-jsM" customClass="MWMFilterCollectionHolderCell">
<rect key="frame" x="0.0" y="218.5" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="MeX-wf-jsM" id="Kwo-Nv-Eyz">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<collectionView clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" bouncesZoom="NO" dataMode="prototypes" prefetchingEnabled="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PXc-fE-tNi">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" priority="999" constant="43.5" id="wiY-V3-s47"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="12" minimumInteritemSpacing="8" id="hQi-pH-6ln" customClass="TypeCellFlowLayout" customModule="cm_dbg" customModuleProvider="target">
<size key="itemSize" width="50" height="36"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="16" minY="0.0" maxX="16" maxY="0.0"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="size" keyPath="estimatedItemSize">
<size key="value" width="100" height="36"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MWMFilterTypeCell" id="hww-0Y-dGV" customClass="MWMFilterTypeCell">
<rect key="frame" x="16" y="0.0" width="50" height="36"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="50" height="36"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3gV-WJ-Hqd">
<rect key="frame" x="12" y="8" width="26" height="20"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
</view>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="3gV-WJ-Hqd" firstAttribute="top" secondItem="hww-0Y-dGV" secondAttribute="top" constant="8" id="CzM-fK-u9K"/>
<constraint firstItem="3gV-WJ-Hqd" firstAttribute="leading" secondItem="hww-0Y-dGV" secondAttribute="leading" constant="12" id="mfs-Ep-xlJ"/>
<constraint firstAttribute="bottom" secondItem="3gV-WJ-Hqd" secondAttribute="bottom" constant="8" id="nag-Fr-Z0G"/>
<constraint firstAttribute="trailing" secondItem="3gV-WJ-Hqd" secondAttribute="trailing" constant="12" id="sBl-KU-nY0"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="layer.borderUIColor">
<color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<integer key="value" value="1"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="tagName" destination="3gV-WJ-Hqd" id="3iN-Tf-ZKI"/>
</connections>
</collectionViewCell>
</cells>
<connections>
<outlet property="dataSource" destination="LNn-Gp-Jtg" id="4a4-kY-JAr"/>
<outlet property="delegate" destination="LNn-Gp-Jtg" id="foC-FM-cC6"/>
</connections>
</collectionView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="PXc-fE-tNi" secondAttribute="trailing" id="KCm-4i-Mtq"/>
<constraint firstAttribute="bottom" secondItem="PXc-fE-tNi" secondAttribute="bottom" id="Qrg-ec-3nv"/>
<constraint firstItem="PXc-fE-tNi" firstAttribute="leading" secondItem="Kwo-Nv-Eyz" secondAttribute="leading" id="cwj-sE-sNS"/>
<constraint firstItem="PXc-fE-tNi" firstAttribute="top" secondItem="Kwo-Nv-Eyz" secondAttribute="top" id="eOR-FB-guZ"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<connections>
<outlet property="collectionView" destination="PXc-fE-tNi" id="rN7-zo-kWI"/>
<outlet property="collectionViewHeight" destination="wiY-V3-s47" id="2HB-Yh-vMR"/>
</connections>
</tableViewCell>
</prototypes>
<sections/>
<connections>
<outlet property="collectionView" destination="v8G-NE-XjS" id="Csm-Es-fPO"/>
<outlet property="collectionViewHeight" destination="b2e-bF-rYZ" id="kVU-Mw-tCL"/>
<outlet property="dataSource" destination="LNn-Gp-Jtg" id="rq0-5v-lvv"/>
</connections>
</tableViewCell>
</prototypes>
<sections/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="pressBackground"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="dataSource" destination="ba5-kG-Q6e" id="kJJ-6Q-QN1"/>
<outlet property="delegate" destination="ba5-kG-Q6e" id="1rN-r0-boA"/>
</connections>
</tableView>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="bP0-hk-aQt" userLabel="First Responder" sceneMemberID="firstResponder"/>
</tableView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="7db-bh-egf" firstAttribute="leading" secondItem="a4S-IT-Fgz" secondAttribute="leading" id="391-VR-alp"/>
<constraint firstAttribute="trailing" secondItem="7db-bh-egf" secondAttribute="trailing" id="5VV-72-Y7v"/>
<constraint firstItem="ZN9-tQ-vmX" firstAttribute="leading" secondItem="a4S-IT-Fgz" secondAttribute="leading" id="VQ6-h4-L6t"/>
<constraint firstItem="7db-bh-egf" firstAttribute="top" secondItem="a4S-IT-Fgz" secondAttribute="top" id="f0d-a8-5Mp"/>
<constraint firstItem="NCN-l0-Vgh" firstAttribute="top" secondItem="ZN9-tQ-vmX" secondAttribute="bottom" id="z2w-0r-wN3"/>
<constraint firstItem="ZN9-tQ-vmX" firstAttribute="top" secondItem="7db-bh-egf" secondAttribute="bottom" id="zDx-DX-vJL"/>
<constraint firstAttribute="trailing" secondItem="ZN9-tQ-vmX" secondAttribute="trailing" id="zVX-kB-p39"/>
</constraints>
</view>
<connections>
<outlet property="doneButton" destination="ZN9-tQ-vmX" id="yjh-3u-Occ"/>
<outlet property="tableView" destination="7db-bh-egf" id="rYy-3D-opK"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="KeS-zw-DbF" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="114.40000000000001" y="39.130434782608695"/>
<point key="canvasLocation" x="808.79999999999995" y="42.728635682158924"/>
</scene>
</scenes>
</document>