muba-posting 8.0.4 → 8.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/EditHead.js +7 -8
  2. package/Posting.js +27 -0
  3. package/Publish3.js +200 -0
  4. package/Publish5.js +147 -330
  5. package/Publish6.js +1 -1
  6. package/commonStyles.js +54 -39
  7. package/fonts/AdFeatures.json +26629 -0
  8. package/fonts/Font-Awesome-ad.ttf +0 -0
  9. package/fonts/selection-ad.json +1 -0
  10. package/locales/ar.json +6 -1
  11. package/locales/en.json +6 -1
  12. package/locales/es.json +6 -1
  13. package/locales/fr.json +6 -1
  14. package/locales/it.json +6 -1
  15. package/locales/nl.json +6 -1
  16. package/package.json +1 -1
  17. package/assets/images/air-hover.png +0 -0
  18. package/assets/images/air.png +0 -0
  19. package/assets/images/animals-hover.png +0 -0
  20. package/assets/images/animals.png +0 -0
  21. package/assets/images/concierge-hover.png +0 -0
  22. package/assets/images/concierge.png +0 -0
  23. package/assets/images/diningroom-hover.png +0 -0
  24. package/assets/images/diningroom.png +0 -0
  25. package/assets/images/door-hover.png +0 -0
  26. package/assets/images/door.png +0 -0
  27. package/assets/images/elevator-hover.png +0 -0
  28. package/assets/images/elevator.png +0 -0
  29. package/assets/images/exteriorFacade-hover.png +0 -0
  30. package/assets/images/exteriorFacade.png +0 -0
  31. package/assets/images/fire-hover.png +0 -0
  32. package/assets/images/fire.png +0 -0
  33. package/assets/images/fridge-hover.png +0 -0
  34. package/assets/images/fridge.png +0 -0
  35. package/assets/images/furnish-hover.png +0 -0
  36. package/assets/images/furnish.png +0 -0
  37. package/assets/images/garage-hover.png +0 -0
  38. package/assets/images/garage.png +0 -0
  39. package/assets/images/garden-hover.png +0 -0
  40. package/assets/images/garden.png +0 -0
  41. package/assets/images/glazing-hover.png +0 -0
  42. package/assets/images/glazing.png +0 -0
  43. package/assets/images/heating-hover.png +0 -0
  44. package/assets/images/heating.png +0 -0
  45. package/assets/images/internet-hover.png +0 -0
  46. package/assets/images/internet.png +0 -0
  47. package/assets/images/kitchen-hover.png +0 -0
  48. package/assets/images/kitchen.png +0 -0
  49. package/assets/images/microwave-hover.png +0 -0
  50. package/assets/images/microwave.png +0 -0
  51. package/assets/images/moroccan-hover.png +0 -0
  52. package/assets/images/moroccan.png +0 -0
  53. package/assets/images/orientation-hover.png +0 -0
  54. package/assets/images/orientation.png +0 -0
  55. package/assets/images/oven-hover.png +0 -0
  56. package/assets/images/oven.png +0 -0
  57. package/assets/images/pool-hover.png +0 -0
  58. package/assets/images/pool.png +0 -0
  59. package/assets/images/satellite-hover.png +0 -0
  60. package/assets/images/satellite.png +0 -0
  61. package/assets/images/sea-hover.png +0 -0
  62. package/assets/images/sea.png +0 -0
  63. package/assets/images/security-hover.png +0 -0
  64. package/assets/images/security.png +0 -0
  65. package/assets/images/storage-hover.png +0 -0
  66. package/assets/images/storage.png +0 -0
  67. package/assets/images/terrace-hover.png +0 -0
  68. package/assets/images/terrace.png +0 -0
  69. package/assets/images/tv-hover.png +0 -0
  70. package/assets/images/tv.png +0 -0
  71. package/assets/images/views-hover.png +0 -0
  72. package/assets/images/views.png +0 -0
  73. package/assets/images/washing-hover.png +0 -0
  74. package/assets/images/washing.png +0 -0
package/Publish5.js CHANGED
@@ -4,6 +4,12 @@ import { strings } from 'muba-i18n';
4
4
  import commonStyles from './commonStyles';
5
5
  import InputSelect from 'muba-input-select';
6
6
  import { Views } from './utils/Views';
7
+ import { createIconSetFromIcoMoon } from '@expo/vector-icons';
8
+ const AdFeatureIcon = createIconSetFromIcoMoon(
9
+ require('./fonts/selection-ad.json'),
10
+ 'PostingFontAwesomeAd',
11
+ 'Font-Awesome-ad.ttf'
12
+ );
7
13
 
8
14
  export default class Publish5 extends React.Component {
9
15
  constructor(props) {
@@ -20,58 +26,27 @@ export default class Publish5 extends React.Component {
20
26
  floorType: floorType,
21
27
  floorNumber: floorNumber,
22
28
  orientation: orientationType,
29
+ mainFeatures: [],
30
+ insideFeatures: [],
31
+ otherFeatures: [],
23
32
  ageOptions: {
24
33
  elements:
25
34
  [
26
- { section: true, value: null, label: age[0] ? age[0].label : 'age' },
27
- { label: strings('setup.L1'), value: 'L1' },
28
- { label: strings('setup.F1T5'), value: 'F1T5' },
29
- { label: strings('setup.F5T10'), value: 'F5T10' },
30
- { label: strings('setup.F10T20'), value: 'F10T20' },
31
- { label: strings('setup.F20T30'), value: 'F20T30' },
32
- { label: strings('setup.F30T50'), value: 'F30T50' },
33
- { label: strings('setup.F50T70'), value: 'F50T70' },
34
- { label: strings('setup.F70T100'), value: 'F70T100' },
35
- { label: strings('setup.G100'), value: 'G100' },
35
+ { section: true, value: null, label: '' }
36
36
  ],
37
37
  selectedItem: this.props.postingAd.age
38
38
  },
39
39
  floorTypeOptions: {
40
40
  elements:
41
41
  [
42
- { section: true, value: null, label: floorType[0] ? floorType[0].label : 'floorType' },
43
- { label: strings('setup.parquet'), value: 'PARQUET' },
44
- { label: strings('setup.marble'), value: 'MARBLE' },
45
- { label: strings('setup.tile'), value: 'TILE' },
46
- { label: strings('setup.others'), value: 'OTHERS' }
42
+ { section: true, value: null, label: '' }
47
43
  ],
48
44
  selectedItem: this.props.postingAd.floorType
49
45
  },
50
46
  floorNumberOptions: {
51
47
  elements:
52
48
  [
53
- { section: true, value: null, label: floorNumber[0] ? floorNumber[0].label : 'floorNumber' },
54
- { label: '0', value: '0' },
55
- { label: '1', value: '1' },
56
- { label: '2', value: '2' },
57
- { label: '3', value: '3' },
58
- { label: '4', value: '4' },
59
- { label: '5', value: '5' },
60
- { label: '6', value: '6' },
61
- { label: '7', value: '7' },
62
- { label: '8', value: '8' },
63
- { label: '9', value: '9' },
64
- { label: '10', value: '10' },
65
- { label: '11', value: '11' },
66
- { label: '12', value: '12' },
67
- { label: '13', value: '13' },
68
- { label: '14', value: '14' },
69
- { label: '15', value: '15' },
70
- { label: '16', value: '16' },
71
- { label: '17', value: '17' },
72
- { label: '18', value: '18' },
73
- { label: '19', value: '19' },
74
- { label: '20', value: '20' },
49
+ { section: true, value: null, label: '' }
75
50
  ],
76
51
  selectedItem: this.props.postingAd.floorNumber,
77
52
  adType: this.props.postingAd.adType,
@@ -80,19 +55,62 @@ export default class Publish5 extends React.Component {
80
55
  orientationOptions: {
81
56
  elements:
82
57
  [
83
- { section: true, value: null, label: orientationType[0] ? orientationType[0].label : 'orientation' },
84
- { label: strings('setup.north'), value: 'NORTH' },
85
- { label: strings('setup.west'), value: 'WEST' },
86
- { label: strings('setup.est'), value: 'EST' },
87
- { label: strings('setup.south'), value: 'SOUTH' }
58
+ { section: true, value: null, label: '' }
88
59
  ],
89
60
  selectedItem: this.props.postingAd.orientation
90
61
  },
62
+ numberOfFloorsLabel: '',
63
+ numberOfFloorsOptions: {
64
+ elements: [
65
+ { section: true, value: null, label: '' }
66
+ ],
67
+ selectedItem: this.props.postingAd.numberOfFloors
68
+ },
69
+ deliveryLabel: '',
70
+ deliveryOptions: {
71
+ elements: [
72
+ { section: true, value: null, label: '' }
73
+ ],
74
+ selectedItem: this.props.postingAd.delivery
75
+ },
76
+ landStatusLabel: '',
77
+ landStatusOptions: {
78
+ elements: [
79
+ { section: true, value: null, label: '' }
80
+ ],
81
+ selectedItem: this.props.postingAd.landStatus
82
+ },
91
83
  }
92
84
  }
93
85
 
94
86
  componentDidMount = () => {
95
87
  this.refreshData();
88
+ this.loadFeaturesOptions();
89
+ }
90
+
91
+ async loadFeaturesOptions() {
92
+ const labels = {}
93
+ const options = {};
94
+ this.props.features.forEach(feature => {
95
+ if (feature.name === 'landTypes') {
96
+ options[feature.name + 'Options'] = [];
97
+ feature.options.map((item) => {
98
+ options[feature.name + 'Options'].push(item);
99
+ });
100
+ } else if (this.state[feature.name + 'Options']) {
101
+ options[feature.name + 'Options'] = { ...this.state[feature.name + 'Options'], elements: [...this.state[feature.name + 'Options'].elements] };
102
+ options[feature.name + 'Options'].elements[0].label = feature.label;
103
+ feature.options.map((item) => {
104
+ options[feature.name + 'Options'].elements.push(item);
105
+ });
106
+ }
107
+ labels[feature.name + 'Label'] = feature.label;
108
+ });
109
+
110
+ this.setState({
111
+ ...labels,
112
+ ...options
113
+ });
96
114
  }
97
115
 
98
116
  async refreshData() {
@@ -168,9 +186,9 @@ export default class Publish5 extends React.Component {
168
186
  <View style={commonStyles.progressbarInputArea}>
169
187
  <Text style={commonStyles.progressbarInputAreaH3}>{strings('setup.features')}</Text>
170
188
 
171
- <View style={commonStyles.row}>
189
+ <View style={[commonStyles.row, { flexWrap: 'wrap' }]}>
172
190
  {this.state.age.length > 0 ?
173
- <View style={[commonStyles.col, commonStyles.col6, commonStyles.selectPublish]}>
191
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
174
192
  <InputSelect
175
193
  options={this.state.ageOptions}
176
194
  placeholder={strings('setup.select')}
@@ -187,7 +205,7 @@ export default class Publish5 extends React.Component {
187
205
  null
188
206
  }
189
207
  {this.state.floorType.length > 0 ?
190
- <View style={[commonStyles.col, commonStyles.col6]}>
208
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
191
209
  <InputSelect
192
210
  options={this.state.floorTypeOptions}
193
211
  placeholder={strings('setup.select')}
@@ -203,10 +221,8 @@ export default class Publish5 extends React.Component {
203
221
  :
204
222
  null
205
223
  }
206
- </View>
207
- <View style={commonStyles.row}>
208
224
  {this.state.floorNumber.length > 0 ?
209
- <View style={[commonStyles.col, commonStyles.col6, commonStyles.selectPublish]}>
225
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
210
226
  <InputSelect
211
227
  options={this.state.floorNumberOptions}
212
228
  placeholder={strings('setup.select')}
@@ -223,7 +239,7 @@ export default class Publish5 extends React.Component {
223
239
  null
224
240
  }
225
241
  {this.state.orientation.length > 0 ?
226
- <View style={[commonStyles.col, commonStyles.col6, commonStyles.selectPublish]}>
242
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
227
243
  <InputSelect
228
244
  options={this.state.orientationOptions}
229
245
  placeholder={strings('setup.select')}
@@ -239,6 +255,54 @@ export default class Publish5 extends React.Component {
239
255
  :
240
256
  null
241
257
  }
258
+ {this.state.numberOfFloorsOptions.elements.length > 1 ?
259
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
260
+ <InputSelect
261
+ options={this.state.numberOfFloorsOptions}
262
+ placeholder={strings('setup.select')}
263
+ required={false}
264
+ scroll={(ref) => this.props.scroll(ref)}
265
+ label={this.state.numberOfFloorsLabel}
266
+ labelStyle={commonStyles.progressbarField}
267
+ selectStyle={commonStyles.inputSelect}
268
+ disabled={!this.props.allowedToModify.numberOfFloors}
269
+ onChange={(value) => this.props.postingAd.numberOfFloors = value}
270
+ ref={(element) => this.inputSelectNumberOfFloors = element} />
271
+ </View>
272
+ :
273
+ null}
274
+ {this.state.deliveryOptions.elements.length > 1 ?
275
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
276
+ <InputSelect
277
+ options={this.state.deliveryOptions}
278
+ placeholder={strings('setup.select')}
279
+ required={false}
280
+ scroll={(ref) => this.props.scroll(ref)}
281
+ label={this.state.deliveryLabel}
282
+ labelStyle={commonStyles.progressbarField}
283
+ selectStyle={commonStyles.inputSelect}
284
+ disabled={!this.props.allowedToModify.delivery}
285
+ onChange={(value) => this.props.postingAd.delivery = value}
286
+ ref={(element) => this.inputSelectDelivery = element} />
287
+ </View>
288
+ :
289
+ null}
290
+ {this.state.landStatusOptions.elements.length > 1 ?
291
+ <View style={[commonStyles.col, commonStyles.col6Sep]}>
292
+ <InputSelect
293
+ options={this.state.landStatusOptions}
294
+ placeholder={strings('setup.select')}
295
+ required={false}
296
+ scroll={(ref) => this.props.scroll(ref)}
297
+ label={this.state.landStatusLabel}
298
+ labelStyle={commonStyles.progressbarField}
299
+ selectStyle={commonStyles.inputSelect}
300
+ disabled={!this.props.allowedToModify.landStatus}
301
+ onChange={(value) => this.props.postingAd.landStatus = value}
302
+ ref={(element) => this.inputSelectLandStatus = element} />
303
+ </View>
304
+ :
305
+ null}
242
306
  </View>
243
307
  </View>
244
308
 
@@ -246,293 +310,46 @@ export default class Publish5 extends React.Component {
246
310
  <Text style={commonStyles.progressbarFieldH4}>{strings('setup.mainFeatures').toUpperCase()}</Text>
247
311
 
248
312
  <View style={[commonStyles.row, commonStyles.rowIcons]}>
249
- <IconFeatures
250
- iconSource={require('./assets/images/garden.png')}
251
- iconHoverSource={require('./assets/images/garden-hover.png')}
252
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "garden" })[0]?.label}
253
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "garden" }).length > 0}
254
- selected={this.props.postingAd.garden}
255
- disabled={!this.props.allowedToModify.features}
256
- onPress={(value) => this.props.postingAd.garden = value}
257
- ref={(element) => this.inputGarden = element} />
258
-
259
- <IconFeatures
260
- iconSource={require('./assets/images/terrace.png')}
261
- iconHoverSource={require('./assets/images/terrace-hover.png')}
262
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "terrace" })[0]?.label}
263
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "terrace" }).length > 0}
264
- selected={this.props.postingAd.terrace}
265
- disabled={!this.props.allowedToModify.features}
266
- onPress={(value) => this.props.postingAd.terrace = value}
267
- ref={(element) => this.inputTerrace = element} />
268
-
269
- <IconFeatures
270
- iconSource={require('./assets/images/garage.png')}
271
- iconHoverSource={require('./assets/images/garage-hover.png')}
272
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "garage" })[0]?.label}
273
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "garage" }).length > 0}
274
- selected={this.props.postingAd.garage}
275
- disabled={!this.props.allowedToModify.features}
276
- onPress={(value) => this.props.postingAd.garage = value}
277
- ref={(element) => this.inputGarage = element} />
278
-
279
- <IconFeatures
280
- iconSource={require('./assets/images/elevator.png')}
281
- iconHoverSource={require('./assets/images/elevator-hover.png')}
282
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "elevator" })[0]?.label}
283
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "elevator" }).length > 0}
284
- selected={this.props.postingAd.elevator}
285
- disabled={!this.props.allowedToModify.features}
286
- onPress={(value) => this.props.postingAd.elevator = value}
287
- ref={(element) => this.inputElevator = element} />
288
-
289
- <IconFeatures
290
- iconSource={require('./assets/images/sea.png')}
291
- iconHoverSource={require('./assets/images/sea-hover.png')}
292
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "seaViews" })[0]?.label}
293
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "seaViews" }).length > 0}
294
- selected={this.props.postingAd.seaViews}
295
- disabled={!this.props.allowedToModify.features}
296
- onPress={(value) => this.props.postingAd.seaViews = value}
297
- ref={(element) => this.inputSeaViews = element} />
298
-
299
- <IconFeatures
300
- iconSource={require('./assets/images/views.png')}
301
- iconHoverSource={require('./assets/images/views-hover.png')}
302
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "mountainsViews" })[0]?.label}
303
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "mountainsViews" }).length > 0}
304
- selected={this.props.postingAd.mountainsViews}
305
- disabled={!this.props.allowedToModify.features}
306
- onPress={(value) => this.props.postingAd.mountainsViews = value}
307
- ref={(element) => this.inputMountainViews = element} />
308
-
309
- <IconFeatures
310
- iconSource={require('./assets/images/pool.png')}
311
- iconHoverSource={require('./assets/images/pool-hover.png')}
312
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "pool" })[0]?.label}
313
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "pool" }).length > 0}
314
- selected={this.props.postingAd.pool}
315
- disabled={!this.props.allowedToModify.features}
316
- onPress={(value) => this.props.postingAd.pool = value}
317
- ref={(element) => this.inputPool = element} />
318
-
319
- <IconFeatures
320
- iconSource={require('./assets/images/concierge.png')}
321
- iconHoverSource={require('./assets/images/concierge-hover.png')}
322
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "doorman" })[0]?.label}
323
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "doorman" }).length > 0}
324
- selected={this.props.postingAd.doorman}
325
- disabled={!this.props.allowedToModify.features}
326
- onPress={(value) => this.props.postingAd.doorman = value}
327
- ref={(element) => this.inputConcierge = element} />
328
-
329
- <IconFeatures
330
- iconSource={require('./assets/images/storage.png')}
331
- iconHoverSource={require('./assets/images/storage-hover.png')}
332
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "storageRoom" })[0]?.label}
333
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "storageRoom" }).length > 0}
334
- selected={this.props.postingAd.storageRoom}
335
- disabled={!this.props.allowedToModify.features}
336
- onPress={(value) => this.props.postingAd.storageRoom = value}
337
- ref={(element) => this.inputStorageRoom = element} />
338
-
339
- <IconFeatures
340
- iconSource={require('./assets/images/furnish.png')}
341
- iconHoverSource={require('./assets/images/furnish-hover.png')}
342
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "furnished" })[0]?.label}
343
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "furnished" }).length > 0}
344
- selected={this.props.postingAd.furnished}
345
- disabled={!this.props.allowedToModify.features}
346
- onPress={(value) => this.props.postingAd.furnished = value}
347
- ref={(element) => this.inputFurnished = element} />
348
- <IconFeatures
349
- iconSource={require('./assets/images/exteriorFacade.png')}
350
- iconHoverSource={require('./assets/images/exteriorFacade-hover.png')}
351
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "exteriorFacade" })[0]?.label}
352
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "exteriorFacade" }).length > 0}
353
- selected={this.props.postingAd.exteriorFacade}
354
- disabled={!this.props.allowedToModify.features}
355
- onPress={(value) => this.props.postingAd.exteriorFacade = value}
356
- ref={(element) => this.inputExteriorFacade = element} />
313
+ {this.props.mainFeatures.map(feature =>
314
+ <IconFeature
315
+ key={feature.name}
316
+ name={feature.name}
317
+ iconText={feature.label}
318
+ visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value === feature.name }).length > 0}
319
+ selected={this.props.postingAd[feature.name]}
320
+ disabled={!this.props.allowedToModify.features}
321
+ onPress={(value) => this.props.postingAd[feature.name] = value} />
322
+ )}
357
323
  </View>
358
324
 
359
325
  <Text style={commonStyles.progressbarFieldH4}>{strings('setup.inside').toUpperCase()}</Text>
360
326
 
361
327
  <View style={[commonStyles.row, commonStyles.rowIcons]}>
362
- <IconFeatures
363
- iconSource={require('./assets/images/moroccan.png')}
364
- iconHoverSource={require('./assets/images/moroccan-hover.png')}
365
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "moroccanLounge" })[0]?.label}
366
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "moroccanLounge" }).length > 0}
367
- selected={this.props.postingAd.moroccanLounge}
368
- disabled={!this.props.allowedToModify.features}
369
- onPress={(value) => this.props.postingAd.moroccanLounge = value}
370
- ref={(element) => this.inputSalonMarocain = element} />
371
-
372
- <IconFeatures
373
- iconSource={require('./assets/images/diningroom.png')}
374
- iconHoverSource={require('./assets/images/diningroom-hover.png')}
375
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "europeanLounge" })[0]?.label}
376
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "europeanLounge" }).length > 0}
377
- selected={this.props.postingAd.europeanLounge}
378
- disabled={!this.props.allowedToModify.features}
379
- onPress={(value) => this.props.postingAd.europeanLounge = value}
380
- ref={(element) => this.inputSalonEuropean = element} />
381
-
382
- <IconFeatures
383
- iconSource={require('./assets/images/satellite.png')}
384
- iconHoverSource={require('./assets/images/satellite-hover.png')}
385
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "satellite" })[0]?.label}
386
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "satellite" }).length > 0}
387
- selected={this.props.postingAd.satellite}
388
- disabled={!this.props.allowedToModify.features}
389
- onPress={(value) => this.props.postingAd.satellite = value}
390
- ref={(element) => this.inputSatellite = element} />
391
-
392
- <IconFeatures
393
- iconSource={require('./assets/images/fire.png')}
394
- iconHoverSource={require('./assets/images/fire-hover.png')}
395
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "fireplace" })[0]?.label}
396
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "fireplace" }).length > 0}
397
- selected={this.props.postingAd.fireplace}
398
- disabled={!this.props.allowedToModify.features}
399
- onPress={(value) => this.props.postingAd.fireplace = value}
400
- ref={(element) => this.inputFirePlace = element} />
401
-
402
- <IconFeatures
403
- iconSource={require('./assets/images/air.png')}
404
- iconHoverSource={require('./assets/images/air-hover.png')}
405
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "airConditioning" })[0]?.label}
406
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "airConditioning" }).length > 0}
407
- selected={this.props.postingAd.airConditioning}
408
- disabled={!this.props.allowedToModify.features}
409
- onPress={(value) => this.props.postingAd.airConditioning = value}
410
- ref={(element) => this.inputAir = element} />
411
-
412
- <IconFeatures
413
- iconSource={require('./assets/images/heating.png')}
414
- iconHoverSource={require('./assets/images/heating-hover.png')}
415
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "heating" })[0]?.label}
416
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "heating" }).length > 0}
417
- selected={this.props.postingAd.heating}
418
- disabled={!this.props.allowedToModify.features}
419
- onPress={(value) => this.props.postingAd.heating = value}
420
- ref={(element) => this.inputHeating = element} />
421
-
422
- <IconFeatures
423
- iconSource={require('./assets/images/security.png')}
424
- iconHoverSource={require('./assets/images/security-hover.png')}
425
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "security" })[0]?.label}
426
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "security" }).length > 0}
427
- selected={this.props.postingAd.security}
428
- disabled={!this.props.allowedToModify.features}
429
- onPress={(value) => this.props.postingAd.security = value}
430
- ref={(element) => this.inputSecurity = element} />
431
-
432
- <IconFeatures
433
- iconSource={require('./assets/images/glazing.png')}
434
- iconHoverSource={require('./assets/images/glazing-hover.png')}
435
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "doubleGlazing" })[0]?.label}
436
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "doubleGlazing" }).length > 0}
437
- selected={this.props.postingAd.doubleGlazing}
438
- disabled={!this.props.allowedToModify.features}
439
- onPress={(value) => this.props.postingAd.doubleGlazing = value}
440
- ref={(element) => this.inputDoubleGlazing = element} />
441
-
442
- <IconFeatures
443
- iconSource={require('./assets/images/door.png')}
444
- iconHoverSource={require('./assets/images/door-hover.png')}
445
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "reinforcedDoor" })[0]?.label}
446
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "reinforcedDoor" }).length > 0}
447
- selected={this.props.postingAd.reinforcedDoor}
448
- disabled={!this.props.allowedToModify.features}
449
- onPress={(value) => this.props.postingAd.reinforcedDoor = value}
450
- ref={(element) => this.inputReinforcedDoor = element} />
328
+ {this.props.insideFeatures.map(feature =>
329
+ <IconFeature
330
+ key={feature.name}
331
+ name={feature.name}
332
+ iconText={feature.label}
333
+ visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value === feature.name }).length > 0}
334
+ selected={this.props.postingAd[feature.name]}
335
+ disabled={!this.props.allowedToModify.features}
336
+ onPress={(value) => this.props.postingAd[feature.name] = value} />
337
+ )}
451
338
  </View>
452
339
 
453
340
  <Text style={commonStyles.progressbarFieldH4}>{strings('setup.otherOptions').toUpperCase()}</Text>
454
341
 
455
342
  <View style={[commonStyles.row, commonStyles.rowIcons]}>
456
- <IconFeatures
457
- iconSource={require('./assets/images/kitchen.png')}
458
- iconHoverSource={require('./assets/images/kitchen-hover.png')}
459
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "fullKitchen" })[0]?.label}
460
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "fullKitchen" }).length > 0}
461
- selected={this.props.postingAd.fullKitchen}
462
- disabled={!this.props.allowedToModify.features}
463
- onPress={(value) => this.props.postingAd.fullKitchen = value}
464
- ref={(element) => this.inputFullKitchen = element} />
465
-
466
- <IconFeatures
467
- iconSource={require('./assets/images/fridge.png')}
468
- iconHoverSource={require('./assets/images/fridge-hover.png')}
469
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "fridge" })[0]?.label}
470
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "fridge" }).length > 0}
471
- selected={this.props.postingAd.fridge}
472
- disabled={!this.props.allowedToModify.features}
473
- onPress={(value) => this.props.postingAd.fridge = value}
474
- ref={(element) => this.inputFridge = element} />
475
-
476
- <IconFeatures
477
- iconSource={require('./assets/images/oven.png')}
478
- iconHoverSource={require('./assets/images/oven-hover.png')}
479
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "oven" })[0]?.label}
480
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "oven" }).length > 0}
481
- selected={this.props.postingAd.oven}
482
- disabled={!this.props.allowedToModify.features}
483
- onPress={(value) => this.props.postingAd.oven = value}
484
- ref={(element) => this.inputOven = element} />
485
-
486
- <IconFeatures
487
- iconSource={require('./assets/images/tv.png')}
488
- iconHoverSource={require('./assets/images/tv-hover.png')}
489
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "tv" })[0]?.label}
490
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "tv" }).length > 0}
491
- selected={this.props.postingAd.tv}
492
- disabled={!this.props.allowedToModify.features}
493
- onPress={(value) => this.props.postingAd.tv = value}
494
- ref={(element) => this.inputTv = element} />
495
-
496
- <IconFeatures
497
- iconSource={require('./assets/images/washing.png')}
498
- iconHoverSource={require('./assets/images/washing-hover.png')}
499
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "washer" })[0]?.label}
500
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "washer" }).length > 0}
501
- selected={this.props.postingAd.washer}
502
- disabled={!this.props.allowedToModify.features}
503
- onPress={(value) => this.props.postingAd.washer = value}
504
- ref={(element) => this.inputWashing = element} />
505
-
506
- <IconFeatures
507
- iconSource={require('./assets/images/microwave.png')}
508
- iconHoverSource={require('./assets/images/microwave-hover.png')}
509
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "microwave" })[0]?.label}
510
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "microwave" }).length > 0}
511
- selected={this.props.postingAd.microwave}
512
- disabled={!this.props.allowedToModify.features}
513
- onPress={(value) => this.props.postingAd.microwave = value}
514
- ref={(element) => this.inputMicrowaves = element} />
515
-
516
- <IconFeatures
517
- iconSource={require('./assets/images/internet.png')}
518
- iconHoverSource={require('./assets/images/internet-hover.png')}
519
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "internet" })[0]?.label}
520
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "internet" }).length > 0}
521
- selected={this.props.postingAd.internet}
522
- disabled={!this.props.allowedToModify.features}
523
- onPress={(value) => this.props.postingAd.internet = value}
524
- ref={(element) => this.inputInternet = element} />
525
-
526
-
527
- <IconFeatures
528
- iconSource={require('./assets/images/animals.png')}
529
- iconHoverSource={require('./assets/images/animals-hover.png')}
530
- iconText={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "animals" })[0]?.label}
531
- visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value == "animals" }).length > 0}
532
- selected={this.props.postingAd.animals}
533
- disabled={!this.props.allowedToModify.features}
534
- onPress={(value) => this.props.postingAd.animals = value}
535
- ref={(element) => this.inputAnimals = element} />
343
+ {this.props.otherFeatures.map(feature =>
344
+ <IconFeature
345
+ key={feature.name}
346
+ name={feature.name}
347
+ iconText={feature.label}
348
+ visible={this.state.adTypeDetails?.filter(function (detail) { return detail.value === feature.name }).length > 0}
349
+ selected={this.props.postingAd[feature.name]}
350
+ disabled={!this.props.allowedToModify.features}
351
+ onPress={(value) => this.props.postingAd[feature.name] = value} />
352
+ )}
536
353
  </View>
537
354
  </View>
538
355
  </View>
@@ -548,7 +365,7 @@ export default class Publish5 extends React.Component {
548
365
  }
549
366
  }
550
367
 
551
- class IconFeatures extends React.Component {
368
+ class IconFeature extends React.Component {
552
369
  constructor(props) {
553
370
  super(props);
554
371
 
@@ -566,11 +383,11 @@ class IconFeatures extends React.Component {
566
383
  return (
567
384
  this.props.visible ?
568
385
  <View style={[commonStyles.characLinkBox, commonStyles.col, commonStyles.col3]}>
569
- <TouchableOpacity activeOpacity={1} style={[commonStyles.characIcon, this.state.selected ? commonStyles.characIconSelected : commonStyles.characIcon, this.props.disabled ? commonStyles.disabled : null]} onPress={() => this.onPressIcon()}
386
+ <TouchableOpacity activeOpacity={1} style={[commonStyles.characIcon, commonStyles.characIcon, this.props.disabled ? commonStyles.disabled : null]} onPress={() => this.onPressIcon()}
570
387
  disabled={this.props.disabled}>
571
- <Image style={commonStyles.characImage} source={this.state.selected ? this.props.iconHoverSource : this.props.iconSource} />
388
+ <AdFeatureIcon style={[commonStyles.characImage, this.state.selected ? commonStyles.characImageSelected : null]} name={this.props.name} />
572
389
  </TouchableOpacity>
573
- <Text style={commonStyles.characIconText}>{this.props.iconText}</Text>
390
+ <Text style={[commonStyles.characIconText, this.state.selected ? commonStyles.characIconTextSelected : null]}>{this.props.iconText}</Text>
574
391
  </View>
575
392
  : null
576
393
  );
package/Publish6.js CHANGED
@@ -205,7 +205,7 @@ export default class Publish6 extends React.Component {
205
205
  <PhoneGroup
206
206
  ref={(phoneGroup) => this.phoneGroup = phoneGroup}
207
207
  inputStyle={commonStyles.input}
208
- phoneBoxStyle={this.state.requiredPhoneError ? commonStyles.inputPhoneBoxError : commonStyles.inputPhoneBox}
208
+ phoneBoxStyle={this.state.requiredPhoneError ? commonStyles.inputPhoneBoxError : null}
209
209
  value={this.props.postingAd.phonesObject}
210
210
  country={this.props.country}
211
211
  maxPhones={3}