muba-posting 5.0.12 → 5.0.13
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.
- package/Posting.js +1 -28
- package/Publish1.js +0 -2
- package/Publish4.js +30 -290
- package/locales/ar.json +0 -8
- package/locales/en.json +0 -8
- package/locales/es.json +0 -8
- package/locales/fr.json +0 -8
- package/locales/it.json +0 -8
- package/locales/nl.json +0 -8
- package/package.json +1 -1
package/Posting.js
CHANGED
|
@@ -20,7 +20,6 @@ import Publish6 from './Publish6';
|
|
|
20
20
|
import Preview from './Preview';
|
|
21
21
|
import PublishProgressBar from './PublishProgressBar.js';
|
|
22
22
|
import EditHead from './EditHead.js';
|
|
23
|
-
import PictureSelector from 'muba-picture';
|
|
24
23
|
import PopupPermissions from 'muba-popup-permissions';
|
|
25
24
|
import PaymentOnlinePopup from 'muba-payment-online';
|
|
26
25
|
import { createIconSetFromFontello } from 'react-native-vector-icons';
|
|
@@ -59,7 +58,6 @@ export default class Posting extends React.Component {
|
|
|
59
58
|
currentScreen: 1,
|
|
60
59
|
fontLoaded: false,
|
|
61
60
|
isLoading: false,
|
|
62
|
-
showImageBrowser: false,
|
|
63
61
|
headerHeight: 0,
|
|
64
62
|
progressBarHeight: 0,
|
|
65
63
|
adId: this.props.adId,
|
|
@@ -92,6 +90,7 @@ export default class Posting extends React.Component {
|
|
|
92
90
|
pax: null,
|
|
93
91
|
minNights: null,
|
|
94
92
|
images: [],
|
|
93
|
+
deletedFiles: [],
|
|
95
94
|
age: null,
|
|
96
95
|
floorType: null,
|
|
97
96
|
floorNumber: null,
|
|
@@ -431,20 +430,6 @@ export default class Posting extends React.Component {
|
|
|
431
430
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
432
431
|
}
|
|
433
432
|
|
|
434
|
-
_openPictureSelector() {
|
|
435
|
-
this.setState({ showImageBrowser: true })
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
imageBrowserCallback = async (photos) => {
|
|
439
|
-
this.setState({
|
|
440
|
-
showImageBrowser: false
|
|
441
|
-
}, () => {
|
|
442
|
-
for (let photo of photos) {
|
|
443
|
-
this.publish4?.loadUri(photo)
|
|
444
|
-
}
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
|
|
448
433
|
getAd = async (id) => {
|
|
449
434
|
const responseJson = await this.props.request(this, AD, {
|
|
450
435
|
adId: id
|
|
@@ -453,12 +438,6 @@ export default class Posting extends React.Component {
|
|
|
453
438
|
return responseJson;
|
|
454
439
|
}
|
|
455
440
|
|
|
456
|
-
_savePicture = async (picture) => {
|
|
457
|
-
this.setState({
|
|
458
|
-
showImageBrowser: false
|
|
459
|
-
}, () => this.publish4?.loadUri(picture));
|
|
460
|
-
}
|
|
461
|
-
|
|
462
441
|
render() {
|
|
463
442
|
return (
|
|
464
443
|
<View style={[commonStyles.flex1, commonStyles.containerBg]}>
|
|
@@ -468,10 +447,6 @@ export default class Posting extends React.Component {
|
|
|
468
447
|
<View onLayout={(event) => this.setState({ headerHeight: event.nativeEvent.layout.height })}>
|
|
469
448
|
{!this.state.showImageBrowser && this.state.view !== Views.PAYMENT_ONLINE ? this.props.topBar : null}
|
|
470
449
|
</View>
|
|
471
|
-
{this.state.showImageBrowser ?
|
|
472
|
-
<PictureSelector max={this.state.maxPictures - this.state.postingAd.images.length} callback={this.imageBrowserCallback} savePicture={this._savePicture} goBack={() => this.goBack(true)} />
|
|
473
|
-
:
|
|
474
|
-
null}
|
|
475
450
|
|
|
476
451
|
<PopupPermissions ref={(element) => this.popupPermissions = element} camera={true} mediaLibrary={true} message={strings('setup.permissionsMessage')} onClose={this.loadData} />
|
|
477
452
|
|
|
@@ -493,7 +468,6 @@ export default class Posting extends React.Component {
|
|
|
493
468
|
|
|
494
469
|
{this.state.view === Views.PUBLISH_1 ?
|
|
495
470
|
<Publish1 postingAd={this.state.postingAd}
|
|
496
|
-
baseUrl={this.props.baseUrl}
|
|
497
471
|
request={this.props.request}
|
|
498
472
|
context={this.props.context}
|
|
499
473
|
showLoading={() => this._showLoading()}
|
|
@@ -574,7 +548,6 @@ export default class Posting extends React.Component {
|
|
|
574
548
|
fullPosting={this.state.fullPosting}
|
|
575
549
|
progressBarHeight={this.state.progressBarHeight}
|
|
576
550
|
headerHeight={this.state.headerHeight}
|
|
577
|
-
openPictureSelector={() => this._openPictureSelector()}
|
|
578
551
|
maxPictures={this.state.maxPictures} />
|
|
579
552
|
:
|
|
580
553
|
null
|
package/Publish1.js
CHANGED
|
@@ -141,10 +141,8 @@ export default class Publish1 extends React.Component {
|
|
|
141
141
|
|
|
142
142
|
if (this.props.postingAd.id == null || this.props.fullPosting) {
|
|
143
143
|
if (this.props.postingAd.exactlyLocated) {
|
|
144
|
-
console.log('2')
|
|
145
144
|
this.props.goToPage(Views.PUBLISH_2);
|
|
146
145
|
} else {
|
|
147
|
-
console.log('2-b')
|
|
148
146
|
this.props.goToPage(Views.PUBLISH_2_B);
|
|
149
147
|
}
|
|
150
148
|
} else {
|
package/Publish4.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Text, View, TouchableHighlight, TouchableOpacity, ImageBackground, Dimensions, Image } from 'react-native';
|
|
3
3
|
import PopupAdvice from 'muba-popup-advice';
|
|
4
|
+
import PictureSelector from 'muba-picture';
|
|
4
5
|
import { strings } from 'muba-i18n';
|
|
5
6
|
import commonStyles from './commonStyles';
|
|
6
7
|
import { Views } from './utils/Views';
|
|
@@ -14,24 +15,11 @@ export default class Publish4 extends React.Component {
|
|
|
14
15
|
super(props);
|
|
15
16
|
|
|
16
17
|
this.state = {
|
|
17
|
-
|
|
18
|
-
popupSelectPhotoVisible: false,
|
|
19
|
-
showErrorNoSelectedImages: false,
|
|
20
|
-
allPhotosSelected: false,
|
|
21
|
-
updateMainPhoto: false,
|
|
22
|
-
isLoading: false,
|
|
23
|
-
imageBrowserOpen: false,
|
|
24
|
-
imageSize: [],
|
|
25
|
-
containerWidth: 0,
|
|
26
|
-
containerHeight: 0
|
|
18
|
+
minHeight: 0
|
|
27
19
|
}
|
|
28
20
|
}
|
|
29
21
|
|
|
30
22
|
componentDidMount() {
|
|
31
|
-
for (let photo of this.props.postingAd.images) {
|
|
32
|
-
this.loadImage(photo);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
23
|
const componentsHeight = this.props.headerHeight + this.props.progressBarHeight;
|
|
36
24
|
const minHeight = window.height - componentsHeight;
|
|
37
25
|
if (this.state.minHeight != minHeight) {
|
|
@@ -39,227 +27,19 @@ export default class Publish4 extends React.Component {
|
|
|
39
27
|
}
|
|
40
28
|
}
|
|
41
29
|
|
|
42
|
-
componentDidUpdate = async (prevProps) => {
|
|
43
|
-
if (!this.isSameList(prevProps.postingAd.images, this.props.postingAd.images)) {
|
|
44
|
-
this.setState({ images: [] }, () => {
|
|
45
|
-
for (let photo of this.props.postingAd.images) {
|
|
46
|
-
this.loadImage(photo);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
isSameList = (firstList, secondList) => {
|
|
53
|
-
if (firstList.length != secondList.length) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
for (let index = 0; index < firstList.length; ++index) {
|
|
57
|
-
if (firstList[index].id != secondList[index].id || firstList[index].uri != secondList[index].uri) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async loadUri(photo) {
|
|
65
|
-
if (photo) {
|
|
66
|
-
const photoStr = photo.uri.lastIndexOf('.') > 0 && photo.uri.lastIndexOf('.') > photo.uri.length - 5 ? photo.uri : photo.filename;
|
|
67
|
-
const fileType = photoStr.substring(photoStr.lastIndexOf('.') + 1).toLowerCase();
|
|
68
|
-
|
|
69
|
-
const image = {
|
|
70
|
-
uri: photo.uri,
|
|
71
|
-
name: 'photo_' + this.state.images.length + '.' + fileType,
|
|
72
|
-
type: 'image/' + fileType,
|
|
73
|
-
mainPicture: this.state.images.length === 0,
|
|
74
|
-
referenceType: 'AD',
|
|
75
|
-
referenceId: this.props.postingAd.id,
|
|
76
|
-
extraInfo: this.state.images.length,
|
|
77
|
-
width: photo.width,
|
|
78
|
-
height: photo.height
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
this.loadImage(image);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
loadImage(image) {
|
|
86
|
-
let imagesArray = this.state.images;
|
|
87
|
-
imagesArray.push(image);
|
|
88
|
-
|
|
89
|
-
this.calculateImageSize(image, imagesArray.length - 1)
|
|
90
|
-
|
|
91
|
-
this.setState({
|
|
92
|
-
showErrorNoSelectedImages: false,
|
|
93
|
-
images: imagesArray
|
|
94
|
-
}, () => {
|
|
95
|
-
if (this.state.images.length == this.props.maxPictures) {
|
|
96
|
-
this.setState({ allPhotosSelected: true });
|
|
97
|
-
} else if (this.state.images.length == 1) {
|
|
98
|
-
this.selectMainPhoto(this.state.images[0]);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
async imageExists(imageUrl) {
|
|
104
|
-
return fetch(imageUrl).then(response => response.status === 200);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
async deleteImage(itemId, index) {
|
|
108
|
-
if (itemId) {
|
|
109
|
-
if (!this.props.postingAd.deletedFiles) {
|
|
110
|
-
this.props.postingAd.deletedFiles = [];
|
|
111
|
-
}
|
|
112
|
-
this.props.postingAd.deletedFiles.push(itemId);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
let imagesArray = [...this.state.images];
|
|
116
|
-
let imageSize = [...this.state.imageSize];
|
|
117
|
-
imagesArray.splice(index, 1)
|
|
118
|
-
imageSize.splice(index, 1)
|
|
119
|
-
|
|
120
|
-
await this.setState({
|
|
121
|
-
allPhotosSelected: false,
|
|
122
|
-
images: imagesArray,
|
|
123
|
-
imageSize: imageSize
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
if (this.state.images.length >= 1) {
|
|
127
|
-
this.selectMainPhoto(this.state.images[0]);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
selectMainPhoto(itemSelected) {
|
|
132
|
-
let imagesArray = this.state.images.slice();
|
|
133
|
-
let imageSize = this.state.imageSize.slice();
|
|
134
|
-
|
|
135
|
-
for (let imageObject of imagesArray) {
|
|
136
|
-
imageObject.mainPicture = false;
|
|
137
|
-
|
|
138
|
-
if (imageObject.uri === itemSelected.uri) {
|
|
139
|
-
imageObject.mainPicture = true;
|
|
140
|
-
const imageIndex = imagesArray.indexOf(imageObject);
|
|
141
|
-
imagesArray.splice(imageIndex, 1);
|
|
142
|
-
imagesArray.splice(0, 0, imageObject);
|
|
143
|
-
|
|
144
|
-
const size = imageSize.splice(imageIndex, 1);
|
|
145
|
-
imageSize.splice(0, 0, ...size);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
let index = 0;
|
|
149
|
-
for (let imageObject of imagesArray) {
|
|
150
|
-
imageObject.name = 'photo_' + index + (imageObject.id ? '_' + imageObject.id : '') + imageObject.name.substring(imageObject.name.indexOf('.'));
|
|
151
|
-
imageObject.extraInfo = index;
|
|
152
|
-
++index;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
this.setState({
|
|
156
|
-
updateMainPhoto: true,
|
|
157
|
-
images: imagesArray,
|
|
158
|
-
imageSize: imageSize
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
30
|
nextStep() {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return detail.value !== 'surface' && detail.value !== 'baths' && detail.value !== 'pax' && detail.value !== 'minNights' &&
|
|
171
|
-
detail.value !== 'rooms' && detail.value !== 'pieces' && detail.value !== 'pricePeriod'
|
|
172
|
-
}).length > 0) {
|
|
173
|
-
this.props.goToPage(Views.PUBLISH_5);
|
|
174
|
-
} else {
|
|
175
|
-
this.props.goToPage(Views.PUBLISH_6);
|
|
176
|
-
}
|
|
31
|
+
this.setState({ showErrorNoSelectedImages: false });
|
|
32
|
+
if (this.props.postingAd.id == null || this.props.fullPosting) {
|
|
33
|
+
if (this.props.postingAd.adTypeDetails.filter(function (detail) {
|
|
34
|
+
return detail.value !== 'surface' && detail.value !== 'baths' && detail.value !== 'pax' && detail.value !== 'minNights' &&
|
|
35
|
+
detail.value !== 'rooms' && detail.value !== 'pieces' && detail.value !== 'pricePeriod'
|
|
36
|
+
}).length > 0) {
|
|
37
|
+
this.props.goToPage(Views.PUBLISH_5);
|
|
177
38
|
} else {
|
|
178
|
-
this.props.
|
|
39
|
+
this.props.goToPage(Views.PUBLISH_6);
|
|
179
40
|
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
rerenderImage(index) {
|
|
184
|
-
const images = this.state.images;
|
|
185
|
-
if (images[index].uri.indexOf('?t=') < 0) {
|
|
186
|
-
images[index].uri = images[index].uri + '?t=' + Date.now();
|
|
187
41
|
} else {
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
setTimeout(() => {
|
|
192
|
-
this.setState({
|
|
193
|
-
images: images
|
|
194
|
-
});
|
|
195
|
-
}, 500);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
calculateImageSize = async (image) => {
|
|
199
|
-
if (image.width && image.height) {
|
|
200
|
-
this.setImageSize(image.width, image.height);
|
|
201
|
-
} else if (!image.uri.startsWith('https://') || await this.imageExists(image.uri)) {
|
|
202
|
-
Image.getSize(image.uri, (width, height) => {
|
|
203
|
-
this.setImageSize(width, height);
|
|
204
|
-
});
|
|
205
|
-
} else {
|
|
206
|
-
setTimeout(() => this.calculateImageSize(image), 500);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
setImageSize(width, height) {
|
|
211
|
-
let imageSize = this.state.imageSize;
|
|
212
|
-
if (this.state.containerWidth !== 0 && this.state.containerHeight !== 0) {
|
|
213
|
-
const containerRatio = this.state.containerWidth / this.state.containerHeight;
|
|
214
|
-
const imageRatio = width / height;
|
|
215
|
-
|
|
216
|
-
let finalWidth;
|
|
217
|
-
let finalHeight;
|
|
218
|
-
if (imageRatio > containerRatio) {
|
|
219
|
-
if (width > this.state.containerWidth) {
|
|
220
|
-
finalWidth = this.state.containerWidth;
|
|
221
|
-
} else {
|
|
222
|
-
finalWidth = width;
|
|
223
|
-
}
|
|
224
|
-
finalHeight = height * (finalWidth / width);
|
|
225
|
-
} else if (imageRatio < containerRatio) {
|
|
226
|
-
if (height > this.state.containerHeight) {
|
|
227
|
-
finalHeight = this.state.containerHeight;
|
|
228
|
-
} else {
|
|
229
|
-
finalHeight = height;
|
|
230
|
-
}
|
|
231
|
-
finalWidth = width * (finalHeight / height);
|
|
232
|
-
} else {
|
|
233
|
-
if (width > this.state.containerWidth) {
|
|
234
|
-
finalWidth = this.state.containerWidth;
|
|
235
|
-
finalHeight = this.state.containerHeight;
|
|
236
|
-
} else {
|
|
237
|
-
finalWidth = width;
|
|
238
|
-
finalHeight = height;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
imageSize.push({
|
|
242
|
-
width: finalWidth,
|
|
243
|
-
height: finalHeight,
|
|
244
|
-
marginVertical: (this.state.containerHeight - finalHeight) / 2,
|
|
245
|
-
marginHorizontal: (this.state.containerWidth - finalWidth) / 2
|
|
246
|
-
});
|
|
247
|
-
} else {
|
|
248
|
-
imageSize.push({
|
|
249
|
-
width: '100%',
|
|
250
|
-
height: '100%',
|
|
251
|
-
marginVertical: 0,
|
|
252
|
-
marginHorizontal: 0
|
|
253
|
-
})
|
|
254
|
-
}
|
|
255
|
-
this.setState({
|
|
256
|
-
imageSize: imageSize
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
setContainerWidth = (event) => {
|
|
261
|
-
if (this.state.containerWidth === 0) {
|
|
262
|
-
this.setState({ containerWidth: event.nativeEvent.layout.width, containerHeight: event.nativeEvent.layout.height })
|
|
42
|
+
this.props.saveEditAd();
|
|
263
43
|
}
|
|
264
44
|
}
|
|
265
45
|
|
|
@@ -267,64 +47,24 @@ export default class Publish4 extends React.Component {
|
|
|
267
47
|
return (
|
|
268
48
|
<View style={{ minHeight: this.state.minHeight }}>
|
|
269
49
|
<View style={commonStyles.formFieldset}>
|
|
270
|
-
<
|
|
271
|
-
|
|
272
|
-
{this.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
{this.state.allPhotosSelected ?
|
|
289
|
-
null
|
|
290
|
-
:
|
|
291
|
-
<TouchableOpacity onLayout={this.setContainerWidth} style={[commonStyles.photoBox, this.state.showErrorNoSelectedImages ? commonStyles.fieldError : null]} onPress={() => this.props.openPictureSelector()}>
|
|
292
|
-
<TouchableOpacity style={[commonStyles.photoBoxAddIcon]} onPress={() => this.props.openPictureSelector()}>
|
|
293
|
-
<TouchableHighlight underlayColor="#104a7a" onPress={() => this.props.openPictureSelector()}>
|
|
294
|
-
<FontAwesomeIcon style={commonStyles.photoAddIcon} name="plus-circled" />
|
|
295
|
-
</TouchableHighlight>
|
|
296
|
-
<TouchableOpacity activeOpacity={0.5} onPress={() => this.props.openPictureSelector()}>
|
|
297
|
-
<Text style={commonStyles.photoAddText}>{strings('setup.addPhotos')}</Text>
|
|
298
|
-
</TouchableOpacity>
|
|
299
|
-
</TouchableOpacity>
|
|
300
|
-
</TouchableOpacity>
|
|
301
|
-
}
|
|
302
|
-
{this.state.images.map((item, index) => {
|
|
303
|
-
return (
|
|
304
|
-
<View style={[commonStyles.photoBox]} onLayout={this.setContainerWidth} key={index}>
|
|
305
|
-
<Image style={{ width: this.state.imageSize[index]?.width, height: this.state.imageSize[index]?.height, marginVertical: this.state.imageSize[index]?.marginVertical, marginHorizontal: this.state.imageSize[index]?.marginHorizontal }}
|
|
306
|
-
resizeMode='cover' source={{ uri: item.uri }} borderRadius={10} onError={() => this.rerenderImage(index)} />
|
|
307
|
-
<ImageBackground style={[commonStyles.photoControls, commonStyles.row]} source={require('./assets/images/bg-shadow.png')} resizeMode='stretch' borderRadius={1.5}>
|
|
308
|
-
|
|
309
|
-
<TouchableHighlight style={commonStyles.leftIcon} onPress={() => this.deleteImage(item.id, index)}>
|
|
310
|
-
<FontAwesomeIcon style={commonStyles.whiteIcon} name="cancel-circled" />
|
|
311
|
-
</TouchableHighlight>
|
|
312
|
-
<TouchableHighlight style={commonStyles.rightIcon} onPress={() => this.selectMainPhoto(item)}>
|
|
313
|
-
<FontAwesomeIcon style={[commonStyles.heartIcon, item.mainPicture ? '' : commonStyles.whiteIcon]} name={item.mainPicture ? 'heart' : 'heart-empty'} />
|
|
314
|
-
</TouchableHighlight>
|
|
315
|
-
|
|
316
|
-
</ImageBackground>
|
|
317
|
-
</View>
|
|
318
|
-
)
|
|
319
|
-
})}
|
|
320
|
-
</View>
|
|
321
|
-
<View style={commonStyles.conseilBox}>
|
|
322
|
-
<TouchableOpacity style={commonStyles.alignCenter} activeOpacity={1} onPress={() => this.popupShowAdvice.show()}>
|
|
323
|
-
<FontAwesomeIcon style={commonStyles.conseilIcon} name="help-circled" />
|
|
324
|
-
<Text style={commonStyles.conseilText}>{strings('setup.advice')}</Text>
|
|
325
|
-
</TouchableOpacity>
|
|
326
|
-
</View>
|
|
327
|
-
</View>
|
|
50
|
+
<PictureSelector
|
|
51
|
+
context={this.props.context}
|
|
52
|
+
request={this.props.request}
|
|
53
|
+
title={strings('setup.publishPhotos')}
|
|
54
|
+
referenceId={this.props.postingAd.id}
|
|
55
|
+
referenceType='AD'
|
|
56
|
+
maxPictures={this.props.maxPictures}
|
|
57
|
+
images={this.props.postingAd.images}
|
|
58
|
+
video={this.props.postingAd.video}
|
|
59
|
+
updateImages={images => this.props.postingAd.images = images}
|
|
60
|
+
updateVideo={video => this.props.postingAd.video = video}
|
|
61
|
+
deletedFiles={this.props.postingAd.deletedFiles}
|
|
62
|
+
showVideo={this.props.businessId} />
|
|
63
|
+
<View style={commonStyles.conseilBox}>
|
|
64
|
+
<TouchableOpacity style={commonStyles.alignCenter} activeOpacity={1} onPress={() => this.popupShowAdvice.show()}>
|
|
65
|
+
<FontAwesomeIcon style={commonStyles.conseilIcon} name="help-circled" />
|
|
66
|
+
<Text style={commonStyles.conseilText}>{strings('setup.advice')}</Text>
|
|
67
|
+
</TouchableOpacity>
|
|
328
68
|
</View>
|
|
329
69
|
</View>
|
|
330
70
|
<View style={commonStyles.buttomButton}>
|
|
@@ -339,7 +79,7 @@ export default class Publish4 extends React.Component {
|
|
|
339
79
|
<Text />
|
|
340
80
|
<Text style={commonStyles.popupText}>{strings('setup.adviceText2')}</Text>
|
|
341
81
|
</PopupAdvice>
|
|
342
|
-
</View>
|
|
82
|
+
</View >
|
|
343
83
|
);
|
|
344
84
|
}
|
|
345
85
|
}
|
package/locales/ar.json
CHANGED
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
"propertyCharacteristics": "خصائص العقار",
|
|
31
31
|
"price": "السعر",
|
|
32
32
|
"currency": "العملة",
|
|
33
|
-
"selectPicture": "حدد الصورة",
|
|
34
|
-
"galleryOrCamera": "هل تريد استخدام الرواق أو الكاميرا؟",
|
|
35
|
-
"addPhotos": "إضافة",
|
|
36
33
|
"publishPhotos": "انشروا صوركم",
|
|
37
|
-
"publishPhotosSubNote1": "الحد الأدنى صورة واحدة. الحد الأقصى {{maxPictures}} صورة.",
|
|
38
|
-
"publishPhotosSubNote2": "انقروا على القلب للقيام بصورة الغلاف",
|
|
39
34
|
"advice": "نصائح",
|
|
40
35
|
"adviceText1": " الحد الأقصى لحجم الصورة 5 ميغابايت ويجب ألا يتجاوز 3456 × 3456 بكسل. يجب تنزيل الصور بحجم .jpg أو .gif أو .png.",
|
|
41
36
|
"adviceText2": "المنشورات التي تتضمن صورة تتلقى ما يصل إلى 3 مرات أكثر من الزيارات. اختر كصورة غلاف تلك التي تمثل أفضل ميزات العقار.",
|
|
@@ -109,9 +104,6 @@
|
|
|
109
104
|
"posting_tip_description_9": "من الأفضل ذكر جميع الخصائص المميزة لهذا العقار ",
|
|
110
105
|
"posting_tip_description_10": "ملاحظة: لا تضع رقم الهاتف أو البريد الإلكتروني في المكان المخصص للوصف، سيتم ربطكم مباشرة مع الزبون ",
|
|
111
106
|
"contactOwner": "اتصل بالناشر",
|
|
112
|
-
"allPicturesSelected": "لقد قمت بتحديد جميع الصور",
|
|
113
|
-
"selected": "المختار(ة)",
|
|
114
|
-
"max": "(كحد أقصى)",
|
|
115
107
|
"orientation": "اتجاه",
|
|
116
108
|
"north": "شمال",
|
|
117
109
|
"south": "جنوب",
|
package/locales/en.json
CHANGED
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
"propertyCharacteristics": "Characteristics of the property",
|
|
31
31
|
"price": "Price",
|
|
32
32
|
"currency": "Currency",
|
|
33
|
-
"selectPicture": "Select image",
|
|
34
|
-
"galleryOrCamera": "Do you want to use the gallery or the camera?",
|
|
35
|
-
"addPhotos": "Add",
|
|
36
33
|
"publishPhotos": "Publish your photos",
|
|
37
|
-
"publishPhotosSubNote1": "Minimum 1 photo. Maximum {{maxPictures}} photos.",
|
|
38
|
-
"publishPhotosSubNote2": "Click on the heart to make the cover photo.",
|
|
39
34
|
"advice": "Advices",
|
|
40
35
|
"adviceText1": "The size of the image has a maximum of 5 MB and must not exceed 3456 x 3456 pixels. Images must be downloaded in .jpg, .gif or .png format.",
|
|
41
36
|
"adviceText2": "Publications including a photo receive up to 3 times more visits. Choose as a cover photo which best represents the most important features of the property",
|
|
@@ -109,9 +104,6 @@
|
|
|
109
104
|
"posting_tip_description_9": "Highlight the qualities which make this property stand out.",
|
|
110
105
|
"posting_tip_description_10": "Note: Don't include your telephone number or email address in these observations they'll be shown to anyone interested when they send a request for more information.",
|
|
111
106
|
"contactOwner": "Price on request",
|
|
112
|
-
"allPicturesSelected": "You have already selected all the photos",
|
|
113
|
-
"selected": "Selected",
|
|
114
|
-
"max": "(max)",
|
|
115
107
|
"orientation": "Orientation",
|
|
116
108
|
"north": "North",
|
|
117
109
|
"south": "South",
|
package/locales/es.json
CHANGED
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
"propertyCharacteristics": "Características de la propiedad",
|
|
31
31
|
"price": "Precio",
|
|
32
32
|
"currency": "Moneda",
|
|
33
|
-
"selectPicture": "Seleccionar foto",
|
|
34
|
-
"galleryOrCamera": "¿Quieres usar la galería o la cámara?",
|
|
35
|
-
"addPhotos": "Añadir",
|
|
36
33
|
"publishPhotos": "Subir fotos",
|
|
37
|
-
"publishPhotosSubNote1": "Mínimo 1 foto. Máximo {{maxPictures}} fotos.",
|
|
38
|
-
"publishPhotosSubNote2": "Haz click en el corazón para marcar la foto de portada",
|
|
39
34
|
"advice": "Consejos",
|
|
40
35
|
"adviceText1": "El tamaño de la imagen tiene un máximo de 20 MB y no debe exceder los 3456 x 3456 píxeles. Las imágenes deben descargarse en formato .jpg, .gif o .png.",
|
|
41
36
|
"adviceText2": "Las anuncios que incluyan fotos reciben hasta 3 veces más de visitas. Elija como foto de portada la que mejor represente las características más importantes de la propiedad.",
|
|
@@ -109,9 +104,6 @@
|
|
|
109
104
|
"posting_tip_description_9": "Comenta las cualidades que hacen que esta propiedad destaque.",
|
|
110
105
|
"posting_tip_description_10": "Nota: No incluyas tu número de teléfono o dirección de correo electrónico en estas observaciones. Se mostrarán a cualquier persona interesada cuando envíen una solicitud para obtener más información.",
|
|
111
106
|
"contactOwner": "Precio a consultar",
|
|
112
|
-
"allPicturesSelected": "Ya has seleccionado todas las fotos",
|
|
113
|
-
"selected": "Seleccionado",
|
|
114
|
-
"max": "(max)",
|
|
115
107
|
"orientation": "Orientación",
|
|
116
108
|
"north": "Norte",
|
|
117
109
|
"south": "Sur",
|
package/locales/fr.json
CHANGED
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
"propertyCharacteristics": "Caractéristiques du bien",
|
|
31
31
|
"price": "Prix",
|
|
32
32
|
"currency": "Devise",
|
|
33
|
-
"selectPicture": "Sélectionnez l'image",
|
|
34
|
-
"galleryOrCamera": "Voulez-vous utiliser la galerie ou la caméra?",
|
|
35
|
-
"addPhotos": "Ajouter",
|
|
36
33
|
"publishPhotos": "Publiez vos photos",
|
|
37
|
-
"publishPhotosSubNote1": "Minimum 1 photo. Maximum {{maxPictures}} photos.",
|
|
38
|
-
"publishPhotosSubNote2": "Cliquez sur Favoris pour sélectionner la photo de couverture.",
|
|
39
34
|
"advice": "Conseils",
|
|
40
35
|
"adviceText1": "La taille de l'image a un maximum de 5 Mo et ne doit pas dépasser 3456 x 3456 pixels. Les images doivent être téléchargées au format .jpg, .gif ou .png.",
|
|
41
36
|
"adviceText2": "Les publications incluant une photo reçoivent jusqu'à 3 fois plus de visites. Choisissez comme photo de couverture celle qui représente le mieux les caractéristiques les plus importantes du bien",
|
|
@@ -109,9 +104,6 @@
|
|
|
109
104
|
"posting_tip_description_9": "Renforcez les caractéristiques uniques de ce bien.",
|
|
110
105
|
"posting_tip_description_10": "Remarque: Ne mettez pas votre numéro de téléphone ou votre adresse email dans les commentaires, notre équipe se chargera de vous envoyer automatiquement toutes les demandes d'informations.",
|
|
111
106
|
"contactOwner": "Prix à consulter",
|
|
112
|
-
"allPicturesSelected": "Vous avez déjà sélectionné toutes les photos",
|
|
113
|
-
"selected": "Sélectionné(s)",
|
|
114
|
-
"max": "(max)",
|
|
115
107
|
"orientation": "Orientation",
|
|
116
108
|
"north": "Nord",
|
|
117
109
|
"south": "South",
|
package/locales/it.json
CHANGED
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
"propertyCharacteristics": "Caratteristiche principali dell’immobile",
|
|
31
31
|
"price": "Prezzo",
|
|
32
32
|
"currency": "Valuta",
|
|
33
|
-
"selectPicture": "Seleziona immagine",
|
|
34
|
-
"galleryOrCamera": "Vuoi usare la galleria o la fotocamera?",
|
|
35
|
-
"addPhotos": "Aggiungi",
|
|
36
33
|
"publishPhotos": "Pubblica le tue foto",
|
|
37
|
-
"publishPhotosSubNote1": "Minimo 1 foto. Massimo {{maxPictures}} foto.",
|
|
38
|
-
"publishPhotosSubNote2": "Clicca sul cuore per creare l’immagine di copertina.",
|
|
39
34
|
"advice": "Consigli",
|
|
40
35
|
"adviceText1": "La dimensione massima dell’immagine è di 20 MB e non può superare i 3456 x 3456 pixel. Le immagini devono essere scaricate in .jpg, .gif o .png.",
|
|
41
36
|
"adviceText2": "Le pubblicazioni con foto ricevono fino a 3 volte più visualizzazioni. Scegli l’immagine di copertina che meglio rappresenta la caratteristica principale dell’immobile",
|
|
@@ -109,9 +104,6 @@
|
|
|
109
104
|
"posting_tip_description_9": "Risalta le qualità principali dell’immobile.",
|
|
110
105
|
"posting_tip_description_10": "Nota: Non includere il tuo numero di telefono o indirizzo e-mail in queste osservazioni. Verranno mostrate agli interessati quando invieranno la richiesta.",
|
|
111
106
|
"contactOwner": "Prezzo su richiesta",
|
|
112
|
-
"allPicturesSelected": "Hai già selezionato tutte le foto",
|
|
113
|
-
"selected": "Selezionato",
|
|
114
|
-
"max": "(max)",
|
|
115
107
|
"orientation": "Orientamento",
|
|
116
108
|
"north": "Nord",
|
|
117
109
|
"south": "Sud",
|
package/locales/nl.json
CHANGED
|
@@ -30,12 +30,7 @@
|
|
|
30
30
|
"propertyCharacteristics": "De belangrijkste kenmerken van het pand",
|
|
31
31
|
"price": "Prijs",
|
|
32
32
|
"currency": "Valuta",
|
|
33
|
-
"selectPicture": "Afbeelding selecteren",
|
|
34
|
-
"galleryOrCamera": "Wilt u de galerij of de camera gebruiken?",
|
|
35
|
-
"addPhotos": "Toevoegen",
|
|
36
33
|
"publishPhotos": "Publiceer uw foto's",
|
|
37
|
-
"publishPhotosSubNote1": "Minimaa 1 foto. Maximaal {{maxPictures}} foto's.",
|
|
38
|
-
"publishPhotosSubNote2": "Klik op het hartje om hier uw omslagfoto van te maken.",
|
|
39
34
|
"advice": "Adviezen",
|
|
40
35
|
"adviceText1": "De afbeelding mag maximaal 20 MG zijn en mag niet meer dan 3456 x 3456 pixels zijn. Afbeeldingen moeten worden gedownload als .jpg, .gif of .png.",
|
|
41
36
|
"adviceText2": "Publicaties met een foto worden drie keer zo vaak bezocht. Kies een omslagfoto die de belangrijkste kenmerken van het pand het beste benadrukken",
|
|
@@ -109,9 +104,6 @@
|
|
|
109
104
|
"posting_tip_description_9": "Benadruk de kenmerken waardoor dit pand opvalt.",
|
|
110
105
|
"posting_tip_description_10": "Opmerking: vermeld hier niet uw telefoonnummer of e-mailadres. Die worden getoond aan mensen die interesse hebben wanneer ze om meer informatie vragen.",
|
|
111
106
|
"contactOwner": "Prijs op aanvraag",
|
|
112
|
-
"allPicturesSelected": "U hebt alle foto's al geselecteerd",
|
|
113
|
-
"selected": "Geselecteerd",
|
|
114
|
-
"max": "(max)",
|
|
115
107
|
"orientation": "Oriëntatie",
|
|
116
108
|
"north": "North",
|
|
117
109
|
"south": "Zuid",
|