Untitled
unknown
plain_text
2 years ago
24 kB
5
Indexable
import { IBlock } from "../../../framework/src/IBlock"; import { Message } from "../../../framework/src/Message"; import { BlockComponent } from "../../../framework/src/BlockComponent"; import MessageEnum, { getName, } from "../../../framework/src/Messages/MessageEnum"; import { runEngine } from "../../../framework/src/RunEngine"; // Customizable Area Start import { pencilVector, bluetooth, play, video, poolIcon, hotTubIcon, patioIcon, washerIcon, acIcon, tvIcon, wifiIcon, grillIcon, } from "./assets"; import ImagePicker, { Image as CroppedImage, } from "react-native-image-crop-picker"; import { getStorageData } from "../../../framework/src/Utilities"; import { Alert } from "react-native"; // Customizable Area End export const configJSON = require("./config"); export interface Props { navigation: any; id: string; // Customizable Area Start // Customizable Area End } interface S { arrayHolder: any; token: string; // Customizable Area Start selectedHomeId: any; selectedItemId: any; selectedHomeId2: any; maxDurationSelectedId: any; vin: string; timePeriod: any; minimumDuration: any; maximumDuration: any; aboutYourCar: any; aboutCar: any; spaceTypes: any; homeTypes: any; mansions: any; liscenseNumber: string; advNoticeTime: string; minTripDur: string; maxTripDur: string; carDescription: string; spaceForGuest: string; homeTitle: string; homeDescription: string; luxgoService: string; luxgoTax: string; insuranceFee: string; amenities: any; newHome: string; guests: number; beds: number; bedrooms: number; bathrooms: number; parkingSpaces: number; prevState: string; selectedImage: any; photoObject: CroppedImage; carNameSelect: boolean; carName: string; odometerSelect: boolean; transmissionSelect: boolean; trimSelect: boolean; styleSelect: boolean; odometerName: string; transmissionName: string; trimName: string; styleName: string; carFeatures: string[]; homeAmenities: any; validateVin: boolean; images: any; mainPhoto: any; deleteMode: boolean; // Customizable Area End } interface SS { id: any; } export default class CatalogueController extends BlockComponent<Props, S, SS> { getProductApiCallId: any; // Customizable Area Start addCarDetailAPICallId: string = ""; getHomePriceAPICallId: string = ""; addHomeDetailAPICallId: string = ""; addHomePricingAPICallId: string = ""; // Customizable Area End constructor(props: Props) { super(props); this.receive = this.receive.bind(this); this.subScribedMessages = [ getName(MessageEnum.RestAPIResponceMessage), getName(MessageEnum.SessionSaveMessage), getName(MessageEnum.SessionResponseMessage), // Customizable Area Start getName(MessageEnum.CatalogueDataMessage), getName(MessageEnum.NavigationPayLoadMessage), // Customizable Area End ]; this.state = { arrayHolder: [], token: "", // Customizable Area Start selectedHomeId: null, selectedItemId: null, selectedHomeId2: null, maxDurationSelectedId: null, vin: "", liscenseNumber: "", advNoticeTime: "", minTripDur: "", maxTripDur: "", carDescription: "", spaceForGuest: "", homeTitle: "", homeDescription: "", luxgoService: "0", luxgoTax: "0", insuranceFee: "0", newHome: "", guests: 0, beds: 0, bedrooms: 0, parkingSpaces: 0, bathrooms: 0, selectedImage: null, prevState: "", photoObject: { path: "", size: 0, width: 0, height: 0, mime: "", }, carNameSelect: false, carName: "", odometerSelect: false, transmissionSelect: false, trimSelect: false, styleSelect: false, odometerName: "", transmissionName: "", trimName: "", styleName: "", carFeatures: [], homeAmenities: [], images: [], mainPhoto: null, deleteMode: false, timePeriod: [ { id: 1, name: "1 hour", }, { id: 2, name: "2 hours", }, { id: 3, name: "3 hours", }, { id: 4, name: "6 hours", }, { id: 5, name: "12 hours", }, { id: 6, name: "1 day", }, ], minimumDuration: [ { id: 1, name: "1 day", }, { id: 2, name: "2 days", }, { id: 3, name: "3 days", }, { id: 4, name: "5 days", }, { id: 5, name: "2-days min for weekend", }, ], maximumDuration: [ { id: 1, name: "5 days", }, { id: 2, name: "2 weeks", }, { id: 3, name: "1 month", }, { id: 4, name: "3 months", }, { id: 5, name: "Any", }, ], aboutYourCar: [ { id: 1, name: "Lamborghini Urus (2021)", sanjay: pencilVector, }, { id: 2, name: "Odometer", }, { id: 3, name: "Transmission", }, { id: 4, name: "Trim (optional)", }, { id: 5, name: "Style (optional)", }, ], aboutCar: [ { id: "1", name: "Bluetooth", image: bluetooth, }, { id: "2", name: "Apple CarPlay", image: play, }, { id: "3", name: "Android Auto", image: play, }, { id: "4", name: "Backupcamera", image: video, }, { id: "5", name: "Heated seats", image: video, }, { id: "6", name: "Keyless entry", image: video, }, { id: "7", name: "Blindspot warning", image: video, }, { id: "8", name: "Bike rack", image: video, }, ], amenities: [ { id: "1", animity: "Pool", imageIcon: poolIcon, }, { id: "2", animity: "Hot Tub", imageIcon: hotTubIcon, }, { id: "3", animity: "Patio", imageIcon: patioIcon, }, { id: "4", animity: "Washer / Dryer", imageIcon: washerIcon, }, { id: "5", animity: "Air Conditioning", imageIcon: acIcon, }, { id: "6", animity: "TV", imageIcon: tvIcon, }, { id: "7", animity: "WiFi", imageIcon: wifiIcon, }, { id: "8", animity: "BBQ Grill", imageIcon: grillIcon, }, ], homeTypes: [ { id: 1, name: "Apartment", }, { id: 2, name: "Residental House", }, { id: 3, name: "Townhouse", }, { id: 4, name: "Villa", }, { id: 5, name: "Guest House", }, { id: 6, name: "Guest Suite", }, ], spaceTypes: [ { id: 1, name: "An entire place", }, { id: 2, name: "A private room", }, { id: 3, name: "A shared room", }, ], mansions: [ { id: "1", name: "Luxury Mansion 1", price: "$500 / NIGHT", distance: "2 mi", image: require("../assets/index.jpeg"), }, { id: "2", name: "Beachfront Villa", price: "$750 / NIGHT", distance: "1.5 mi", image: require("../assets/index.jpeg"), }, { id: "3", name: "Secluded Estate", price: "$1,200 / NIGHT", distance: "3 mi", image: require("../assets/index.jpeg"), }, ], validateVin: true, // Customizable Area End }; runEngine.attachBuildingBlock(this as IBlock, this.subScribedMessages); // Customizable Area Start // Customizable Area End } async componentDidMount() { super.componentDidMount(); this.getToken(); if (this.isPlatformWeb() === false) { this.props.navigation.addListener("willFocus", () => { this.getToken(); }); } // Customizable Area Start this.getUserToken(); // Customizable Area End } getToken = () => { const msg: Message = new Message( getName(MessageEnum.SessionRequestMessage) ); this.send(msg); }; getListRequest = (token: any) => { const header = { "Content-Type": configJSON.productApiContentType, token: token, }; const requestMessage = new Message( getName(MessageEnum.RestAPIRequestMessage) ); this.getProductApiCallId = requestMessage.messageId; requestMessage.addData( getName(MessageEnum.RestAPIResponceEndPointMessage), configJSON.productAPiEndPoint ); requestMessage.addData( getName(MessageEnum.RestAPIRequestHeaderMessage), JSON.stringify(header) ); requestMessage.addData( getName(MessageEnum.RestAPIRequestMethodMessage), configJSON.apiMethodTypeGet ); runEngine.sendMessage(requestMessage.id, requestMessage); }; async receive(from: string, message: Message) { // Customizable Area Start runEngine.debugLog("Message Recived", message); if (getName(MessageEnum.SessionResponseMessage) === message.id) { let token = message.getData(getName(MessageEnum.SessionResponseToken)); this.setState({ token: token }); } if (getName(MessageEnum.NavigationPayLoadMessage) === message.id) { const catalogueData = message.getData( getName(MessageEnum.CatalogueDataMessage) ); this.handleStates(catalogueData); } if (getName(MessageEnum.RestAPIResponceMessage) === message.id) { const apiRequestCallId = message.getData( getName(MessageEnum.RestAPIResponceDataMessage) ); let responseJson = message.getData( getName(MessageEnum.RestAPIResponceSuccessMessage) ); if (apiRequestCallId === this.getHomePriceAPICallId && responseJson) { this.handleGetHomePriceRes(responseJson.data); } if (apiRequestCallId === this.addCarDetailAPICallId && responseJson) { Alert.alert("Car details added successfully"); } if (apiRequestCallId === this.addHomeDetailAPICallId && responseJson) { Alert.alert("Home details added successfully"); } if (apiRequestCallId === this.addHomePricingAPICallId && responseJson) { console.log("\nresponse is here \n", JSON.stringify(responseJson)); } } // Customizable Area End } // Customizable Area Start getUserToken = async () => { let value = await getStorageData("usertoken"); let tkn = JSON.parse(value); this.setState({ token: tkn }, () => console.log("token is get:::", this.state.token) ); this.getHomeTypesApi() }; getHomeTypesApi = async() => { console.log("token:::::::::::", this.state.token) const header = { "Content-Type": configJSON.productApiContentType, token: token, }; const requestMessage = new Message( getName(MessageEnum.RestAPIRequestMessage) ); this.getProductApiCallId = requestMessage.messageId; requestMessage.addData( getName(MessageEnum.RestAPIResponceEndPointMessage), configJSON.productAPiEndPoint ); requestMessage.addData( getName(MessageEnum.RestAPIRequestHeaderMessage), JSON.stringify(header) ); requestMessage.addData( getName(MessageEnum.RestAPIRequestMethodMessage), configJSON.apiMethodTypeGet ); runEngine.sendMessage(requestMessage.id, requestMessage); } addCarDetail = async () => { const carDetailObj = { "catalogue[category_id]": "8", "catalogue[features][VIN]": this.state.vin, "catalogue[features][odometer]": this.state.odometerName, "catalogue[features][transmission]": this.state.transmissionName, "catalogue[features][trim]": this.state.trimName, "catalogue[features][style]": this.state.styleName, "catalogue[features][license_plate]": this.state.liscenseNumber, "catalogue[features][advances_notice]": this.state.advNoticeTime, "catalogue[features][min_trip_duration]": this.state.minTripDur, "catalogue[features][max_trip_duration]": this.state.maxTripDur, "catalogue[features][car_description]": this.state.carDescription, "catalogue[features][car_features][]": this.state.carFeatures, "catalogue[images][]": { uri: this.state.photoObject?.path, type: "image/jpeg", name: "image_home", } as any, "address[country]": "India", "address[latitude]": "237782373", "address[longitude]": "32323545", "address[address]": "32323545", "address[pincode]": "73467674", "catalogue[name]": "Car", "catalogue[car_name]": this.state.carName, }; const formData = this.getFormData(carDetailObj); this.addCarDetailAPICallId = await this.apiCall({ contentType: configJSON.formDataContentType, method: configJSON.apiMethodTypePost, endPoint: configJSON.carDataApiEndPoint, body: formData, }); }; getHomeTypeId = (item: any) => { return item.id; }; getFormData = (object: any) => { const formData = new FormData(); Object.keys(object).forEach((key) => { if (Array.isArray(object[key])) { object[key].forEach((element: any) => { formData.append(key, element); }); } else { formData.append(key, object[key]); } }); return formData; }; addHomeDetail = async () => { const homeDetailObj = { "catalogue[category_id]": "9", "catalogue[sub_category_id]": "45", "catalogue[features][space_type]": this.state.spaceForGuest, "catalogue[features][home_title]": this.state.homeTitle, "catalogue[features][Guests]": this.state.guests.toString(), "catalogue[features][beds]": this.state.beds.toString(), "catalogue[features][bathrooms]": this.state.bathrooms.toString(), "catalogue[features][Bedrooms]": this.state.bedrooms.toString(), "catalogue[features][Parking Spaces]": this.state.parkingSpaces.toString(), "catalogue[features][home_description]": this.state.homeDescription, "address[country]": "India", "address[latitude]": "237782373", "address[longitude]": "32323545", "address[address]": "nrk bizzpark", "address[pincode]": "73467674", "catalogue[name]": "home", "catalogue[features][home_amenities][]": this.state.homeAmenities, "catalogue[images][]": this.getFormData({ uri: this.state.photoObject?.path, type: "image/jpeg", name: "image_home", } as any), }; const formData = this.getFormData(homeDetailObj); this.addHomeDetailAPICallId = await this.apiCall({ contentType: configJSON.formDataContentType, method: configJSON.apiMethodTypePost, endPoint: configJSON.carDataApiEndPoint, body: formData, }); }; addHomePricing = async () => { const pricingObj = { "catalogue[earnings]": "2000", "catalogue[type]": "Home", }; const formData = this.getFormData(pricingObj); this.addHomePricingAPICallId = await this.apiCall({ contentType: configJSON.formDataContentType, method: configJSON.apiMethodTypePost, endPoint: configJSON.homeDataApiEndPoint, body: formData, }); }; getHomePrice = async () => { this.getHomePriceAPICallId = await this.apiCall({ contentType: configJSON.productApiContentType, method: configJSON.apiMethodTypeGet, endPoint: configJSON.getHomePriceApiEndPoint, }); }; goBack = () => { this.props.navigation.goBack(); }; navigateTo = (title: string, data: any) => { const message = new Message(getName(MessageEnum.NavigationMessage)); message.addData(getName(MessageEnum.NavigationTargetMessage), title); message.addData(getName(MessageEnum.NavigationPropsMessage), this.props); const raiseMessage: Message = new Message( getName(MessageEnum.NavigationPayLoadMessage) ); raiseMessage.addData(getName(MessageEnum.CatalogueDataMessage), data); message.addData(getName(MessageEnum.NavigationRaiseMessage), raiseMessage); this.send(message); }; checkValidation = () => { if (this.state.vin !== "" || this.state.vin.length < 10) { this.setState({ validateVin: false }); } }; apiCall = async (data: any) => { const { contentType, method, endPoint, body } = data; const header = { "Content-Type": contentType, token: this.state.token, }; const requestMessage = new Message( getName(MessageEnum.RestAPIRequestMessage) ); requestMessage.addData( getName(MessageEnum.RestAPIRequestHeaderMessage), JSON.stringify(header) ); requestMessage.addData( getName(MessageEnum.RestAPIResponceEndPointMessage), endPoint ); requestMessage.addData( getName(MessageEnum.RestAPIRequestMethodMessage), method ); body && requestMessage.addData( getName(MessageEnum.RestAPIRequestBodyMessage), body ); runEngine.sendMessage(requestMessage.id, requestMessage); return requestMessage.messageId; }; setVin(text: string) { this.setState({ vin: text }); } setLiscenseNumber(text: string) { this.setState({ liscenseNumber: text }); } setCarDescription(text: string) { this.setState({ carDescription: text }); } setHomeTitle(text: string) { this.setState({ homeTitle: text }); } setHomeDescription(text: string) { this.setState({ homeDescription: text }); } handleDecrement = (key: keyof S) => { this.setState((prevState: Readonly<S>) => ({ ...prevState, [key]: prevState[key] - 1, })); }; handleIncrement = (key: keyof S) => { this.setState( (prevState: Readonly<S>): S => ({ ...prevState, [key]: prevState[key] + 1, }) ); }; handleGetHomePriceRes = (response: any) => { const data = response[0]?.attributes; const luxgoSer = data?.luxgo_service; const inseFee = data.insurance_fee; const tax = data?.rate; this.setState({ luxgoService: luxgoSer, insuranceFee: inseFee, luxgoTax: tax, }); }; openCamera = async (title: string) => { const pickedImage: CroppedImage = await ImagePicker.openCamera({ multiple: false, mediaType: "photo", compressImageQuality: 0.3, includeBase64: true, cropping: true, }); title === "home" ? this.setState({ photoObject: pickedImage }, this.navigateHomePhoto) : this.setState({ photoObject: pickedImage }, this.navigateCarPhoto); }; openGallary = async (title: string) => { const pickedImage = await ImagePicker.openPicker({ mediaType: "photo", compressImageQuality: 0.3, includeBase64: true, cropping: true, multiple: true, maxFiles: title === "car" ? 9 - this.state.images?.length : 1, }); if (title === "car") { this.setState( { images: pickedImage, }, () => { this.navigateCarPhoto(); } ); } title === "home" && this.setState({ photoObject: pickedImage[0] }, this.navigateHomePhoto); }; navigateHomePhoto = () => { this.navigateTo("HomePhotosStep2", { newHome: this.state.newHome, spaceTypes: this.state.spaceTypes, guests: this.state.guests, beds: this.state.beds, bedrooms: this.state.bedrooms, parkingSpaces: this.state.parkingSpaces, bathrooms: this.state.bathrooms, homeAmenities: [...this.state.homeAmenities], photoObject: this.state.photoObject, }); }; navigateCarPhoto = () => { this.navigateTo("CarPhotosStep2", { vin: this.state.vin, carName: this.state.carName, odometerName: this.state.odometerName, transmissionName: this.state.transmissionName, trimName: this.state.trimName, styleName: this.state.styleName, liscenseNumber: this.state.liscenseNumber, advNoticeTime: this.state.advNoticeTime, minTripDur: this.state.minTripDur, maxTripDur: this.state.maxTripDur, carDescription: this.state.carDescription, carFeatures: [...this.state.carFeatures], photoObject: this.state.photoObject, images: this.state.images, }); }; getImageId = (image: any) => { return image.path; }; openImagePicker = async () => { try { const pickedImages = await ImagePicker.openPicker({ multiple: true, mediaType: "photo", maxFiles: 9 - this.state.images.length, }); this.setState((prevState) => ({ images: [ ...prevState.images, ...pickedImages.slice(0, 9 - prevState.images.length), ], })); } catch (error) { console.error(error); } }; removePhoto = (index: number) => { const updatedImages = [...this.state.images]; updatedImages.splice(index, 1); this.setState({ images: updatedImages, deleteMode: false }); }; toggleDeleteMode = () => { this.setState((prevState) => ({ deleteMode: !prevState.deleteMode, })); }; onPressPhoto = (index: number) => { if (this.state.deleteMode) { this.removePhoto(index); } else { this.setMainPhoto(index); } }; handleKeyboard = () => { this.hideKeyboard(); }; handleStates = (catalogueData: any) => { this.setState({ vin: catalogueData.vin, carName: catalogueData.carName, odometerName: catalogueData.odometerName, transmissionName: catalogueData.transmissionName, trimName: catalogueData.trimName, styleName: catalogueData.styleName, liscenseNumber: catalogueData.liscenseNumber, advNoticeTime: catalogueData.advNoticeTime, minTripDur: catalogueData.minTripDur, maxTripDur: catalogueData.maxTripDur, carDescription: catalogueData.carDescription, carFeatures: catalogueData.carFeatures ? catalogueData.carFeatures : this.state.carFeatures, images: catalogueData.images ?? [], }); this.setState({ newHome: catalogueData.newHome, spaceForGuest: catalogueData.spaceForGuest, guests: catalogueData.guests ? catalogueData.guests : this.state.guests, beds: catalogueData.beds ? catalogueData.beds : this.state.beds, bedrooms: catalogueData.bedrooms ? catalogueData.bedrooms : this.state.bedrooms, bathrooms: catalogueData.bathrooms ? catalogueData.bathrooms : this.state.bathrooms, parkingSpaces: catalogueData.parkingSpaces ? catalogueData.parkingSpaces : this.state.parkingSpaces, homeAmenities: catalogueData.homeAmenities ? catalogueData.homeAmenities : this.state.homeAmenities, photoObject: catalogueData.photoObject ? catalogueData.photoObject : this.state.photoObject, }); }; setMainPhoto = (index: number) => { this.setState({ mainPhoto: this.state.images[index] }); }; // Customizable Area End }
Editor is loading...
Leave a Comment