Manos Chorianopoulos

Add OffersViewController

...@@ -4222,17 +4222,239 @@ ...@@ -4222,17 +4222,239 @@
4222 <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> 4222 <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
4223 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 4223 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
4224 <subviews> 4224 <subviews>
4225 - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="OffersViewController" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gBj-Dk-4Cd"> 4225 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hUt-Dt-44M" userLabel="Main View">
4226 - <rect key="frame" x="124" y="437" width="159" height="21"/> 4226 + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
4227 - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> 4227 + <subviews>
4228 - <fontDescription key="fontDescription" type="system" pointSize="17"/> 4228 + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="fWD-iY-Bmd">
4229 - <nil key="textColor"/> 4229 + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
4230 - <nil key="highlightedColor"/> 4230 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4231 - </label> 4231 + <color key="sectionIndexBackgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4232 + <prototypes>
4233 + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="OffersTableViewCellId" id="qj2-71-gcS" customClass="OffersTableViewCell" customModule="SwiftWarplyFramework">
4234 + <rect key="frame" x="0.0" y="50" width="414" height="288"/>
4235 + <autoresizingMask key="autoresizingMask"/>
4236 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="qj2-71-gcS" id="kjE-xJ-Y7S">
4237 + <rect key="frame" x="0.0" y="0.0" width="414" height="288"/>
4238 + <autoresizingMask key="autoresizingMask"/>
4239 + <subviews>
4240 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2H8-bM-vZr" userLabel="Cell View">
4241 + <rect key="frame" x="20" y="0.0" width="374" height="288"/>
4242 + <subviews>
4243 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ugy-l0-Fp3" userLabel="Campaign Image View">
4244 + <rect key="frame" x="0.0" y="0.0" width="374" height="178"/>
4245 + <constraints>
4246 + <constraint firstAttribute="height" constant="178" id="3xe-hD-xPM"/>
4247 + </constraints>
4248 + </imageView>
4249 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kZI-mH-ph2" userLabel="Info View">
4250 + <rect key="frame" x="0.0" y="178" width="374" height="110"/>
4251 + <subviews>
4252 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aZR-b5-0QS" userLabel="Info Inner View">
4253 + <rect key="frame" x="20" y="32" width="334" height="46"/>
4254 + <subviews>
4255 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qfZ-mQ-mRL" userLabel="Title Label">
4256 + <rect key="frame" x="0.0" y="0.0" width="224" height="21.5"/>
4257 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
4258 + <color key="textColor" red="0.36078431372549019" green="0.36078431372549019" blue="0.36078431372549019" alpha="1" colorSpace="calibratedRGB"/>
4259 + <nil key="highlightedColor"/>
4260 + </label>
4261 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Seo-yy-aMh" userLabel="Subtitle Label">
4262 + <rect key="frame" x="0.0" y="24.5" width="224" height="21.5"/>
4263 + <fontDescription key="fontDescription" type="system" pointSize="18"/>
4264 + <color key="textColor" red="0.36078431372549019" green="0.36078431372549019" blue="0.36078431372549019" alpha="1" colorSpace="calibratedRGB"/>
4265 + <nil key="highlightedColor"/>
4266 + </label>
4267 + </subviews>
4268 + <color key="backgroundColor" systemColor="systemBackgroundColor"/>
4269 + <constraints>
4270 + <constraint firstAttribute="bottom" secondItem="Seo-yy-aMh" secondAttribute="bottom" id="28O-Bf-5yx"/>
4271 + <constraint firstItem="Seo-yy-aMh" firstAttribute="top" secondItem="qfZ-mQ-mRL" secondAttribute="bottom" constant="3" id="3E4-m4-kYZ"/>
4272 + <constraint firstItem="qfZ-mQ-mRL" firstAttribute="leading" secondItem="aZR-b5-0QS" secondAttribute="leading" id="UT7-mm-qE8"/>
4273 + <constraint firstItem="Seo-yy-aMh" firstAttribute="leading" secondItem="aZR-b5-0QS" secondAttribute="leading" id="e4w-de-uGd"/>
4274 + <constraint firstItem="qfZ-mQ-mRL" firstAttribute="top" secondItem="aZR-b5-0QS" secondAttribute="top" id="rXT-QO-ygA"/>
4275 + </constraints>
4276 + </view>
4277 + </subviews>
4278 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4279 + <constraints>
4280 + <constraint firstAttribute="height" constant="110" id="4yV-XS-4PN"/>
4281 + <constraint firstAttribute="trailing" secondItem="aZR-b5-0QS" secondAttribute="trailing" constant="20" id="p1K-A5-Xlv"/>
4282 + <constraint firstItem="aZR-b5-0QS" firstAttribute="leading" secondItem="kZI-mH-ph2" secondAttribute="leading" constant="20" id="qq7-8z-dyM"/>
4283 + <constraint firstItem="aZR-b5-0QS" firstAttribute="centerY" secondItem="kZI-mH-ph2" secondAttribute="centerY" id="swJ-jz-XdS"/>
4284 + </constraints>
4285 + </view>
4286 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yY1-NG-BaX" userLabel="Discount View">
4287 + <rect key="frame" x="244" y="120" width="130" height="130"/>
4288 + <subviews>
4289 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="B4P-VR-pDO" userLabel="Discount Image View">
4290 + <rect key="frame" x="0.0" y="0.0" width="130" height="130"/>
4291 + <constraints>
4292 + <constraint firstAttribute="width" constant="130" id="1pT-MH-uoQ"/>
4293 + <constraint firstAttribute="height" constant="130" id="h5Y-Yv-qc3"/>
4294 + </constraints>
4295 + </imageView>
4296 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="f0e-Lz-WQc" userLabel="Discount Inner View">
4297 + <rect key="frame" x="33" y="34.5" width="64" height="61"/>
4298 + <subviews>
4299 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Msk-Tt-0US">
4300 + <rect key="frame" x="18" y="0.0" width="28" height="28"/>
4301 + <constraints>
4302 + <constraint firstAttribute="width" constant="28" id="Plb-6p-pox"/>
4303 + <constraint firstAttribute="height" constant="28" id="g4M-Nh-h4e"/>
4304 + </constraints>
4305 + </imageView>
4306 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lL4-jJ-mTZ">
4307 + <rect key="frame" x="0.0" y="31" width="64" height="30"/>
4308 + <fontDescription key="fontDescription" type="boldSystem" pointSize="25"/>
4309 + <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4310 + <nil key="highlightedColor"/>
4311 + </label>
4312 + </subviews>
4313 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4314 + <constraints>
4315 + <constraint firstItem="lL4-jJ-mTZ" firstAttribute="leading" secondItem="f0e-Lz-WQc" secondAttribute="leading" id="4xE-ie-F0U"/>
4316 + <constraint firstItem="Msk-Tt-0US" firstAttribute="top" secondItem="f0e-Lz-WQc" secondAttribute="top" id="GDu-Ps-8GB"/>
4317 + <constraint firstItem="Msk-Tt-0US" firstAttribute="centerX" secondItem="f0e-Lz-WQc" secondAttribute="centerX" id="Itg-2D-x2c"/>
4318 + <constraint firstAttribute="bottom" secondItem="lL4-jJ-mTZ" secondAttribute="bottom" id="Nsw-9N-Z3M"/>
4319 + <constraint firstAttribute="trailing" secondItem="lL4-jJ-mTZ" secondAttribute="trailing" id="Xxw-w1-4u9"/>
4320 + <constraint firstItem="lL4-jJ-mTZ" firstAttribute="top" secondItem="Msk-Tt-0US" secondAttribute="bottom" constant="3" id="ftg-Mz-i7E"/>
4321 + </constraints>
4322 + </view>
4323 + </subviews>
4324 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4325 + <constraints>
4326 + <constraint firstItem="f0e-Lz-WQc" firstAttribute="centerX" secondItem="yY1-NG-BaX" secondAttribute="centerX" id="GO4-hM-RK0"/>
4327 + <constraint firstItem="B4P-VR-pDO" firstAttribute="leading" secondItem="yY1-NG-BaX" secondAttribute="leading" id="Oz5-XX-Bl1"/>
4328 + <constraint firstItem="f0e-Lz-WQc" firstAttribute="centerY" secondItem="yY1-NG-BaX" secondAttribute="centerY" id="Qyg-fx-qUn"/>
4329 + <constraint firstAttribute="bottom" secondItem="B4P-VR-pDO" secondAttribute="bottom" id="fOo-OH-cTL"/>
4330 + <constraint firstAttribute="trailing" secondItem="B4P-VR-pDO" secondAttribute="trailing" id="fc9-Yr-nWo"/>
4331 + <constraint firstItem="B4P-VR-pDO" firstAttribute="top" secondItem="yY1-NG-BaX" secondAttribute="top" id="vr6-Nu-eDg"/>
4332 + </constraints>
4333 + </view>
4334 + </subviews>
4335 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4336 + <constraints>
4337 + <constraint firstAttribute="bottom" secondItem="kZI-mH-ph2" secondAttribute="bottom" id="6Vd-QN-Sy0"/>
4338 + <constraint firstItem="ugy-l0-Fp3" firstAttribute="leading" secondItem="2H8-bM-vZr" secondAttribute="leading" id="EPW-zB-5L5"/>
4339 + <constraint firstItem="yY1-NG-BaX" firstAttribute="leading" secondItem="Seo-yy-aMh" secondAttribute="trailing" id="Eq3-Wz-PV7"/>
4340 + <constraint firstItem="ugy-l0-Fp3" firstAttribute="top" secondItem="2H8-bM-vZr" secondAttribute="top" id="GBz-dh-6OV"/>
4341 + <constraint firstItem="kZI-mH-ph2" firstAttribute="leading" secondItem="2H8-bM-vZr" secondAttribute="leading" id="Mut-DB-tiP"/>
4342 + <constraint firstAttribute="trailing" secondItem="ugy-l0-Fp3" secondAttribute="trailing" id="UAw-w8-61R"/>
4343 + <constraint firstItem="yY1-NG-BaX" firstAttribute="leading" secondItem="qfZ-mQ-mRL" secondAttribute="trailing" id="VPy-aa-ulj"/>
4344 + <constraint firstAttribute="trailing" secondItem="kZI-mH-ph2" secondAttribute="trailing" id="gwi-NX-Lvz"/>
4345 + <constraint firstItem="yY1-NG-BaX" firstAttribute="top" secondItem="kZI-mH-ph2" secondAttribute="top" constant="-58" id="hrV-4a-Fyv"/>
4346 + <constraint firstItem="kZI-mH-ph2" firstAttribute="top" secondItem="ugy-l0-Fp3" secondAttribute="bottom" id="o7R-PR-ttI"/>
4347 + <constraint firstAttribute="trailing" secondItem="yY1-NG-BaX" secondAttribute="trailing" id="yPX-zT-MZh"/>
4348 + </constraints>
4349 + </view>
4350 + </subviews>
4351 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4352 + <constraints>
4353 + <constraint firstItem="2H8-bM-vZr" firstAttribute="top" secondItem="kjE-xJ-Y7S" secondAttribute="top" id="6gO-Pq-FAs"/>
4354 + <constraint firstItem="2H8-bM-vZr" firstAttribute="leading" secondItem="kjE-xJ-Y7S" secondAttribute="leading" constant="20" id="K5t-uL-AUD"/>
4355 + <constraint firstAttribute="bottom" secondItem="2H8-bM-vZr" secondAttribute="bottom" id="Q9G-bY-tuz"/>
4356 + <constraint firstAttribute="trailing" secondItem="2H8-bM-vZr" secondAttribute="trailing" constant="20" id="QsI-tu-Vxn"/>
4357 + </constraints>
4358 + </tableViewCellContentView>
4359 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4360 + <connections>
4361 + <outlet property="campaignImage" destination="ugy-l0-Fp3" id="UOO-N1-bSO"/>
4362 + <outlet property="cellView" destination="2H8-bM-vZr" id="jBR-Ya-Oh8"/>
4363 + <outlet property="discountBGImage" destination="B4P-VR-pDO" id="Xzc-R2-526"/>
4364 + <outlet property="discountLabel" destination="lL4-jJ-mTZ" id="1nC-jg-zOy"/>
4365 + <outlet property="discountSmileImage" destination="Msk-Tt-0US" id="WMM-lv-l5d"/>
4366 + <outlet property="subtitleLabel" destination="Seo-yy-aMh" id="P7t-RE-77P"/>
4367 + <outlet property="titleLabel" destination="qfZ-mQ-mRL" id="1Bw-YT-TGA"/>
4368 + </connections>
4369 + </tableViewCell>
4370 + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="InboxTableViewCellId" id="tNJ-bm-aGv" customClass="InboxTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
4371 + <rect key="frame" x="0.0" y="338" width="414" height="78.5"/>
4372 + <autoresizingMask key="autoresizingMask"/>
4373 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="tNJ-bm-aGv" id="A90-Li-IDd">
4374 + <rect key="frame" x="0.0" y="0.0" width="414" height="78.5"/>
4375 + <autoresizingMask key="autoresizingMask"/>
4376 + <subviews>
4377 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Iar-hb-ngF">
4378 + <rect key="frame" x="20" y="0.0" width="374" height="78.5"/>
4379 + <subviews>
4380 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="q3d-Y7-YoH">
4381 + <rect key="frame" x="0.0" y="0.0" width="205.5" height="78.5"/>
4382 + </imageView>
4383 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dNf-ph-58z">
4384 + <rect key="frame" x="215.5" y="30" width="148.5" height="18.5"/>
4385 + <fontDescription key="fontDescription" name="PeridotPE-Regular" family="Peridot PE" pointSize="15"/>
4386 + <color key="textColor" red="0.12941176469999999" green="0.12941176469999999" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/>
4387 + <nil key="highlightedColor"/>
4388 + </label>
4389 + </subviews>
4390 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4391 + <constraints>
4392 + <constraint firstAttribute="bottom" secondItem="q3d-Y7-YoH" secondAttribute="bottom" id="3lu-rv-RHI"/>
4393 + <constraint firstItem="dNf-ph-58z" firstAttribute="leading" secondItem="q3d-Y7-YoH" secondAttribute="trailing" constant="10" id="BE4-GU-dWc"/>
4394 + <constraint firstItem="q3d-Y7-YoH" firstAttribute="width" secondItem="Iar-hb-ngF" secondAttribute="width" multiplier="0.55" id="GNH-sm-qA8"/>
4395 + <constraint firstItem="q3d-Y7-YoH" firstAttribute="top" secondItem="Iar-hb-ngF" secondAttribute="top" id="H2X-D0-SQ0"/>
4396 + <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="dNf-ph-58z" secondAttribute="bottom" constant="10" id="HMr-jg-Egf"/>
4397 + <constraint firstItem="dNf-ph-58z" firstAttribute="centerY" secondItem="Iar-hb-ngF" secondAttribute="centerY" id="XRe-mw-R0J"/>
4398 + <constraint firstAttribute="trailing" secondItem="dNf-ph-58z" secondAttribute="trailing" constant="10" id="ZAx-jV-hle"/>
4399 + <constraint firstItem="q3d-Y7-YoH" firstAttribute="leading" secondItem="Iar-hb-ngF" secondAttribute="leading" id="d71-vY-Cgu"/>
4400 + <constraint firstItem="dNf-ph-58z" firstAttribute="top" relation="greaterThanOrEqual" secondItem="Iar-hb-ngF" secondAttribute="top" constant="30" id="oM5-Tj-eb3"/>
4401 + </constraints>
4402 + </view>
4403 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="new_icon" translatesAutoresizingMaskIntoConstraints="NO" id="0IZ-qO-cKj">
4404 + <rect key="frame" x="344" y="5" width="60" height="25"/>
4405 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4406 + <constraints>
4407 + <constraint firstAttribute="width" constant="60" id="ltd-9h-en3"/>
4408 + <constraint firstAttribute="height" constant="25" id="sjV-4S-ggn"/>
4409 + </constraints>
4410 + </imageView>
4411 + </subviews>
4412 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4413 + <constraints>
4414 + <constraint firstItem="0IZ-qO-cKj" firstAttribute="top" secondItem="A90-Li-IDd" secondAttribute="top" constant="5" id="1GR-gl-rM7"/>
4415 + <constraint firstAttribute="trailing" secondItem="0IZ-qO-cKj" secondAttribute="trailing" constant="10" id="6QW-pj-851"/>
4416 + <constraint firstItem="Iar-hb-ngF" firstAttribute="leading" secondItem="A90-Li-IDd" secondAttribute="leading" constant="20" id="DbD-oU-ViN"/>
4417 + <constraint firstAttribute="trailing" secondItem="Iar-hb-ngF" secondAttribute="trailing" constant="20" id="IQM-tY-Clq"/>
4418 + <constraint firstAttribute="bottom" secondItem="Iar-hb-ngF" secondAttribute="bottom" id="SKJ-aq-DIL"/>
4419 + <constraint firstItem="Iar-hb-ngF" firstAttribute="top" secondItem="A90-Li-IDd" secondAttribute="top" id="s7S-Fw-x5P"/>
4420 + </constraints>
4421 + </tableViewCellContentView>
4422 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
4423 + <connections>
4424 + <outlet property="campaignImage" destination="q3d-Y7-YoH" id="mSE-US-ead"/>
4425 + <outlet property="campaignTitleLabel" destination="dNf-ph-58z" id="OL1-vm-neo"/>
4426 + <outlet property="inboxView" destination="Iar-hb-ngF" id="sYI-hQ-yfh"/>
4427 + <outlet property="newBadgeImage" destination="0IZ-qO-cKj" id="2Vu-X1-ZX6"/>
4428 + </connections>
4429 + </tableViewCell>
4430 + </prototypes>
4431 + <connections>
4432 + <outlet property="dataSource" destination="EDh-Zo-yDu" id="Few-SN-h9B"/>
4433 + <outlet property="delegate" destination="EDh-Zo-yDu" id="3t7-6z-apW"/>
4434 + </connections>
4435 + </tableView>
4436 + </subviews>
4437 + <color key="backgroundColor" red="0.90588235294117647" green="0.91764705882352937" blue="0.92156862745098034" alpha="1" colorSpace="calibratedRGB"/>
4438 + <constraints>
4439 + <constraint firstAttribute="trailing" secondItem="fWD-iY-Bmd" secondAttribute="trailing" id="IPb-cu-IN9"/>
4440 + <constraint firstAttribute="bottom" secondItem="fWD-iY-Bmd" secondAttribute="bottom" id="J4w-D1-Meb"/>
4441 + <constraint firstItem="fWD-iY-Bmd" firstAttribute="leading" secondItem="hUt-Dt-44M" secondAttribute="leading" id="Lrg-dN-mYl"/>
4442 + <constraint firstItem="fWD-iY-Bmd" firstAttribute="top" secondItem="hUt-Dt-44M" secondAttribute="top" id="cyE-Nr-o0W"/>
4443 + </constraints>
4444 + </view>
4232 </subviews> 4445 </subviews>
4233 <viewLayoutGuide key="safeArea" id="CXd-ry-9QY"/> 4446 <viewLayoutGuide key="safeArea" id="CXd-ry-9QY"/>
4234 - <color key="backgroundColor" systemColor="systemBackgroundColor"/> 4447 + <color key="backgroundColor" red="0.90588235294117647" green="0.91764705882352937" blue="0.92156862745098034" alpha="1" colorSpace="calibratedRGB"/>
4448 + <constraints>
4449 + <constraint firstItem="hUt-Dt-44M" firstAttribute="leading" secondItem="AgP-hz-ava" secondAttribute="leading" id="1mG-HG-vHv"/>
4450 + <constraint firstAttribute="trailing" secondItem="hUt-Dt-44M" secondAttribute="trailing" id="rKd-e7-ZdE"/>
4451 + <constraint firstItem="hUt-Dt-44M" firstAttribute="top" secondItem="AgP-hz-ava" secondAttribute="top" id="rvX-7F-KDx"/>
4452 + <constraint firstAttribute="bottom" secondItem="hUt-Dt-44M" secondAttribute="bottom" id="scN-Hh-WVC"/>
4453 + </constraints>
4235 </view> 4454 </view>
4455 + <connections>
4456 + <outlet property="tableView" destination="fWD-iY-Bmd" id="Jds-Wd-Yb6"/>
4457 + </connections>
4236 </viewController> 4458 </viewController>
4237 <placeholder placeholderIdentifier="IBFirstResponder" id="877-ji-SVH" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> 4459 <placeholder placeholderIdentifier="IBFirstResponder" id="877-ji-SVH" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
4238 </objects> 4460 </objects>
......
...@@ -8,10 +8,47 @@ ...@@ -8,10 +8,47 @@
8 import UIKit 8 import UIKit
9 9
10 @objc public class OffersTableViewCell: UITableViewCell { 10 @objc public class OffersTableViewCell: UITableViewCell {
11 + @IBOutlet weak var cellView: UIView!
12 + @IBOutlet weak var campaignImage: UIImageView!
13 + @IBOutlet weak var titleLabel: UILabel!
14 + @IBOutlet weak var subtitleLabel: UILabel!
15 + @IBOutlet weak var discountBGImage: UIImageView!
16 + @IBOutlet weak var discountSmileImage: UIImageView!
17 + @IBOutlet weak var discountLabel: UILabel!
18 +
19 + var postImageURL: String? {
20 + didSet {
21 + if let url = postImageURL {
22 + self.campaignImage.image = UIImage() // UIImage(named: "loading")
11 23
24 + UIImage.loadImageUsingCacheWithUrlString(url) { image in
25 + // set the image only when we are still displaying the content for the image we finished downloading
26 + if url == self.postImageURL {
27 + self.campaignImage.image = image
28 + }
29 + }
30 + }
31 + else {
32 + self.campaignImage.image = nil
33 + }
34 + }
35 + }
36 +
12 public override func awakeFromNib() { 37 public override func awakeFromNib() {
13 super.awakeFromNib() 38 super.awakeFromNib()
14 - // Initialization code 39 +
40 + // Add shadow
41 + self.layer.shadowColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.16).cgColor
42 + self.layer.shadowOffset = CGSize(width: 0.0, height: 3.0)
43 + self.layer.shadowOpacity = 1.0
44 + self.layer.shadowRadius = 6.0
45 +
46 + cellView.layer.cornerRadius = 5.0
47 + cellView.clipsToBounds = true
48 +
49 + discountBGImage.image = UIImage(named: "offer_circle_orange", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
50 + discountSmileImage.image = UIImage(named: "logo_smile_white_new", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
51 +
15 } 52 }
16 53
17 public override func setSelected(_ selected: Bool, animated: Bool) { 54 public override func setSelected(_ selected: Bool, animated: Bool) {
...@@ -19,5 +56,22 @@ import UIKit ...@@ -19,5 +56,22 @@ import UIKit
19 56
20 // Configure the view for the selected state 57 // Configure the view for the selected state
21 } 58 }
59 +
60 + public override func layoutSubviews() {
61 + super.layoutSubviews()
62 + //set the values for top,left,bottom,right margins
63 + let margins = UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0)
64 + contentView.frame = contentView.frame.inset(by: margins)
65 + }
66 +
67 +
68 + func configureCell(campaign: swiftApi.CampaignItemModel) {
69 + // campaignImage.load(link: campaign.logo_url ?? "", placeholder: UIImage(), cache: URLCache())
70 + self.postImageURL = campaign.logo_url ?? ""
71 +
72 + titleLabel.text = campaign.title ?? ""
73 + subtitleLabel.text = campaign.subtitle ?? ""
74 + discountLabel.text = "10%"
75 + }
22 76
23 } 77 }
......
...@@ -8,22 +8,117 @@ ...@@ -8,22 +8,117 @@
8 import UIKit 8 import UIKit
9 9
10 @objc public class OffersViewController: UIViewController { 10 @objc public class OffersViewController: UIViewController {
11 - 11 + @IBOutlet weak var tableView: UITableView!
12 +
13 + public var campaigns:Array<swiftApi.CampaignItemModel> = [] {
14 + didSet {
15 + DispatchQueue.main.async {
16 + self.tableView.reloadData()
17 + }
18 + }
19 + }
20 +
12 public override func viewDidLoad() { 21 public override func viewDidLoad() {
13 super.viewDidLoad() 22 super.viewDidLoad()
14 23
15 - // Do any additional setup after loading the view. 24 + getCampaignsRequest()
25 +
26 + tableView.delegate = self
27 + tableView.dataSource = self
28 + tableView.contentInset.top = 25
29 + }
30 +
31 +
32 +// MARK: - Requests
33 + func getCampaignsRequest() {
34 + swiftApi().getCampaignsAsyncNew(language: "en", filters: [String : Any](), getCampaignsCallback, failureCallback: {errorCode in
35 + print("========= getCampaignsCallback ERROR =========",errorCode)
36 + })
37 + }
38 +
39 + func getCampaignsCallback (_ campaignsData: Array<swiftApi.CampaignItemModel>?) -> Void {
40 + if (campaignsData != nil) {
41 + DispatchQueue.main.async {
42 + self.campaigns = campaignsData ?? []
43 + self.tableView.reloadData()
44 + }
45 + } else {
46 + print("========= getCampaignsCallback ERROR =========")
47 + }
48 + }
49 +
50 +}
51 +
52 +// MARK: - TableView
53 +extension OffersViewController: UITableViewDelegate, UITableViewDataSource{
54 +
55 + public func numberOfSections(in tableView: UITableView) -> Int {
56 + return 1
16 } 57 }
17 58
59 + public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
60 + return self.campaigns.count
61 + }
62 +
63 + public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
64 + return 288.0 + 20.0
65 +// return UITableViewAutomaticDimension
66 + }
67 +
68 + public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
69 + let cell = tableView.dequeueReusableCell(withIdentifier: "OffersTableViewCellId", for: indexPath) as! OffersTableViewCell
70 +
71 + cell.configureCell(campaign: campaigns[indexPath.row])
72 +
73 + return cell
74 + }
75 +
76 + public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
77 + let status = swiftApi().getNetworkStatus()
78 + if (status == -1 || status == 0) {
79 + self.showDialog("Δεν υπάρχει σύνδεση","Αυτή τη στιγμή βρίσκεσαι εκτός σύνδεσης. Παρακαλούμε βεβαιώσου ότι είσαι συνδεδεμένος στο διαδίκτυο και προσπάθησε ξανά.")
80 + } else {
81 +
82 + let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
83 + let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as! SwiftWarplyFramework.CampaignViewController
84 + var url = ""
85 + var params = ""
86 +
87 +// url = swiftApi().constructCampaignUrl(campaigns[indexPath.row])
88 +// params = swiftApi().constructCampaignParams(campaigns[indexPath.row])
89 + url = campaigns[indexPath.row].index_url ?? ""
18 90
19 - /* 91 + let encoder = JSONEncoder()
20 - // MARK: - Navigation 92 + encoder.outputFormatting = .prettyPrinted
93 + let data = try! encoder.encode(campaigns[indexPath.row])
21 94
22 - // In a storyboard-based application, you will often want to do a little preparation before navigation 95 + print("Campaign_CLICK " + String(data: data, encoding: .utf8)!)
23 - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 96 +
24 - // Get the new view controller using segue.destination. 97 + print("CampaignUrl url onclick: " + url)
25 - // Pass the selected object to the new view controller. 98 + vc.campaignUrl = url
99 + vc.params = params
100 + self.navigationController?.pushViewController(vc, animated: true)
101 +
102 + }
26 } 103 }
27 - */
28 104
105 + func showDialog(_ alertTitle: String, _ alertSubTitle: String) -> Void {
106 +
107 + let alert = UIAlertController(title: alertTitle, message: alertSubTitle, preferredStyle: .alert)
108 + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
109 + switch action.style{
110 + case .default:
111 + print("default")
112 +
113 + case .cancel:
114 + print("cancel")
115 +
116 + case .destructive:
117 + print("destructive")
118 +
119 + }
120 + }))
121 + self.present(alert, animated: true, completion: nil)
122 + }
123 +
29 } 124 }
......
...@@ -1456,16 +1456,10 @@ public class swiftApi { ...@@ -1456,16 +1456,10 @@ public class swiftApi {
1456 1456
1457 func campaignsCallback(_ campaignsData: [AnyHashable: Any]?) -> Void { 1457 func campaignsCallback(_ campaignsData: [AnyHashable: Any]?) -> Void {
1458 var campaignsArray:Array<CampaignItemModel> = [] 1458 var campaignsArray:Array<CampaignItemModel> = []
1459 - var carouselArray:Array<CampaignItemModel> = []
1460 1459
1461 if let responseDataDictionary = campaignsData as? [String: AnyObject] { 1460 if let responseDataDictionary = campaignsData as? [String: AnyObject] {
1462 1461
1463 if (responseDataDictionary["MAPP_CAMPAIGNING-status"] as? Int == 1) { 1462 if (responseDataDictionary["MAPP_CAMPAIGNING-status"] as? Int == 1) {
1464 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1465 - dynatraceEvent._eventName = "custom_success_campaigns_loyalty"
1466 - dynatraceEvent._parameters = nil
1467 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1468 -
1469 if let responseDataMapp = responseDataDictionary["MAPP_CAMPAIGNING"] as? [String: Any] { 1463 if let responseDataMapp = responseDataDictionary["MAPP_CAMPAIGNING"] as? [String: Any] {
1470 if let responseDataCampaigns = responseDataMapp["campaigns"] as? [[String : Any]?] { 1464 if let responseDataCampaigns = responseDataMapp["campaigns"] as? [[String : Any]?] {
1471 1465
...@@ -1475,64 +1469,24 @@ public class swiftApi { ...@@ -1475,64 +1469,24 @@ public class swiftApi {
1475 campaignsArray.append(tempCampaign) 1469 campaignsArray.append(tempCampaign)
1476 } 1470 }
1477 } 1471 }
1478 - }
1479 - } else {
1480 - getCampaignsCallback(nil)
1481 - }
1482 -
1483 - swiftApi().getCampaignsPersonalizedAsync(language: language, filters: filters, {campaignsPersonalizedData in
1484 -
1485 - campaignsArray = campaignsArray + (campaignsPersonalizedData ?? [])
1486 -
1487 - swiftApi().setUniqueCampaignList(campaignsArray)
1488 -
1489 - carouselArray = campaignsArray.filter {
1490 - let tempCampaign = $0
1491 - let isCarouselItem = (tempCampaign._carousel != nil) && (tempCampaign._carousel == "true")
1492 1472
1493 - return (isCarouselItem) 1473 + swiftApi().setUniqueCampaignList(campaignsArray)
1494 - }
1495 - swiftApi().setCarouselList(carouselArray)
1496 1474
1497 - var filteredCampaigns = campaignsArray.filter { 1475 + let sortedCampaigns = campaignsArray.sorted {
1498 - let tempCampaign = $0 1476 + ($0._sorting ?? 0) < ($1._sorting ?? 0)
1499 - let isCcmsOffer = (tempCampaign.ccms_offer != nil) && (tempCampaign.ccms_offer != "") && (tempCampaign.ccms_offer == "true") 1477 + }
1500 - let isTelco = (tempCampaign._type != nil && tempCampaign._type == "telco")
1501 -
1502 - return (!(isCcmsOffer || isTelco))
1503 - }
1504 -
1505 - // if (swiftApi().getConsumerInternal()?._answered == true) {
1506 - filteredCampaigns = filteredCampaigns.filter { $0.offer_category != "questionnaire" }
1507 - // }
1508 1478
1509 - let sortedCampaigns = filteredCampaigns.sorted { 1479 + getCampaignsCallback(sortedCampaigns)
1510 - ($0._sorting ?? 0) < ($1._sorting ?? 0)
1511 } 1480 }
1512 - 1481 + } else {
1513 - getCampaignsCallback(sortedCampaigns); 1482 + getCampaignsCallback(nil)
1514 - 1483 + }
1515 - // SwiftEventBus.post("campaigns_retrieved")
1516 - }, failureCallback: {errorCode in
1517 -
1518 - failureCallback(errorCode)
1519 - })
1520 1484
1521 } else { 1485 } else {
1522 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1523 - dynatraceEvent._eventName = "custom_error_campaigns_loyalty"
1524 - dynatraceEvent._parameters = nil
1525 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1526 -
1527 getCampaignsCallback(nil) 1486 getCampaignsCallback(nil)
1528 } 1487 }
1529 1488
1530 } else { 1489 } else {
1531 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1532 - dynatraceEvent._eventName = "custom_error_campaigns_loyalty"
1533 - dynatraceEvent._parameters = nil
1534 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1535 -
1536 getCampaignsCallback(nil) 1490 getCampaignsCallback(nil)
1537 } 1491 }
1538 } 1492 }
...@@ -1542,11 +1496,6 @@ public class swiftApi { ...@@ -1542,11 +1496,6 @@ public class swiftApi {
1542 print(error) 1496 print(error)
1543 print("====================") 1497 print("====================")
1544 1498
1545 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1546 - dynatraceEvent._eventName = "custom_error_campaigns_loyalty"
1547 - dynatraceEvent._parameters = nil
1548 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1549 -
1550 getCampaignsCallback(nil) 1499 getCampaignsCallback(nil)
1551 } 1500 }
1552 } 1501 }
......