Best JavaScript code snippet using playwright-internal
owndecker.js
Source: owndecker.js
1import React from 'react';2import { Platform, SafeAreaView,KeyboardAvoidingView, Text, AsyncStorage , TextInput, View, Dimensions, Animated, PanResponder, ActivityIndicator, ScrollView, TouchableWithoutFeedback , TouchableOpacity} from 'react-native';3import {styles} from './assets/styles/styles'4import { Header } from 'react-navigation';5const SCREEN_HEIGHT = Dimensions.get('window').height6const SCREEN_WIDTH = Dimensions.get('window').width7import Icon from 'react-native-vector-icons/Ionicons'8import { AuthSession } from 'expo';9export default class Decker extends React.Component {10 constructor() {11 super();12 this.email = 'hi';13 this.position = new Animated.ValueXY();14 this.swipedPosition = new Animated.ValueXY({ x: -SCREEN_WIDTH-100, y:0 });15 this.gestPosition = new Animated.ValueXY();16 this.state = {17 currentIndex: 0,18 isLoading: true,19 }20 this.lastIndex = 421 this.rotate = this.position.x.interpolate({22 inputRange: [-SCREEN_WIDTH / 2, 0],23 outputRange: ['-10deg', '0deg'],24 extrapolate: 'clamp'25 })26 this.cardOpacity = this.gestPosition.x.interpolate({27 inputRange: [0,SCREEN_WIDTH / 2],28 outputRange: [1, 0.5],29 extrapolate: 'clamp'30 })31 this.cardScale = this.gestPosition.x.interpolate({32 inputRange: [0,SCREEN_WIDTH / 2],33 outputRange: [1, 0.8],34 extrapolate: 'clamp'35 })36 this.swipedRotate = this.swipedPosition.x.interpolate({37 inputRange: [-SCREEN_WIDTH / 2, 0],38 outputRange: ['-10deg','0deg'],39 extrapolate: 'clamp'40 })41 this.rotateAndTranslate = {42 opacity: this.cardOpacity, 43 44 transform: [{45 rotate: this.rotate,46 47 },48 {49 scale: this.cardScale50 },51 ...this.position.getTranslateTransform()52 ]53 }54 this.swipedTrasnform = {55 transform: [{56 rotate: this.swipedRotate57 },58 ...this.swipedPosition.getTranslateTransform()59 ]60 }61 this.nextCardOpacity = this.position.x.interpolate({62 inputRange: [-SCREEN_WIDTH / 2, 0],63 outputRange: [1, 0],64 extrapolate: 'clamp'65 })66 this.nextCardScale = this.position.x.interpolate({67 inputRange: [-SCREEN_WIDTH / 2, 0],68 outputRange: [1, 0.8],69 extrapolate: 'clamp'70 })71 }72 componentWillMount() { 73 74userMail = AsyncStorage.getItem('userMail', (err, result) => {75 76 let maill = JSON.parse(result);77 maill = maill.mail;78 this.email = maill ;79}).then(()=>{80 fetch('http://ec2-3-14-86-69.us-east-2.compute.amazonaws.com/ownprojects?email='+this.email)81 .then((response) => response.json())82 .then((responseJson) => {83 // console.log(JSON.stringify(responseJson));84 var arr = Object.keys(responseJson).map((k) => { return {id:k ,...responseJson[k]} });85 // console.log(arr);86 this.setState({87 isLoading: false,88 dataSource: arr,89 })90 this.lastIndex = arr.length - 1;91 })92 .catch((error) =>{93 console.error(error);94 }); 95});96 97 this.PanResponder = PanResponder.create({98 onStartShouldSetPanResponder: (evt, gestureState) => true,99 onPanResponderMove: (evt, gestureState) => {100 101 if(gestureState.dx<0) {102 this.position.setValue({ x: gestureState.dx, y: gestureState.dy });103 }104 else if(gestureState.dx>0 && this.state.currentIndex > 0) {105 this.swipedPosition.setValue({ x:-SCREEN_WIDTH - 100 + gestureState.dx, y: 0})106 }107 this.gestPosition.setValue({ x: gestureState.dx, y: gestureState.dy })108 },109 onPanResponderRelease: (evt, gestureState) => {110 if (gestureState.dx > 120) { // swipe right (load previous card) 111 Animated.timing(this.swipedPosition, {112 toValue: { x:0, y:0 },113 duration: 150114 }).start(() => {115 this.setState({ currentIndex: (this.state.currentIndex) ? this.state.currentIndex - 1: 0 }, () => {116 this.position.setValue({ x: 0, y: 0 })117 this.swipedPosition.setValue({ x:-SCREEN_WIDTH-100, y:0 })118 this.gestPosition.setValue({ x: 0, y: 0 })119 });120 });121 }122 else if (gestureState.dx < -120 && this.state.currentIndex < this.lastIndex) { 123 // swipe left (load next card)124 Animated.timing(this.position, {125 toValue: { x: -SCREEN_WIDTH - 100, y: gestureState.dy },126 duration: 150127 }).start(() => {128 this.setState({ currentIndex: (this.state.currentIndex<this.lastIndex) ? this.state.currentIndex + 1:this.lastIndex },129 () => {130 this.position.setValue({ x: 0, y: 0 })131 this.swipedPosition.setValue({ x:-SCREEN_WIDTH-100, y:0})132 this.gestPosition.setValue({ x: 0, y: 0 })133 });134 }); 135 }136 else {137 Animated.spring(this.position, {138 toValue: { x: 0, y: 0 },139 friction: 4140 }).start()141 Animated.spring(this.gestPosition, {142 toValue: { x: 0, y: 0 },143 friction: 4144 }).start()145 Animated.spring(this.swipedPosition, {146 toValue: { x: -SCREEN_WIDTH - 100, y: 0 },147 friction: 4148 }).start()149 }150 }151 })152 }153 onFocus = () => {154 this.setState({155 backgroundColor: 'green'156 })157 }158 onBlur = () => {159 this.setState({160 backgroundColor: '#ededed'161 })162 }163 _renderHeader= (item) => {164 return(165 <View style={styles.cardHeader}>166 <Text 167 style={styles.projectName}>{item.projectName}</Text>168 </View>169 )170 }171 _renderContent = (item) => {172 return(173 <View style={styles.cardContent}>174 <ScrollView >175 <TouchableWithoutFeedback>176 <View style={{padding:3}}>177 <Text style={styles.genText}>Short Desc- {item.shortDescription}</Text>178 {/* <Text style={styles.genText}>Account NO.- {item.accountNo}</Text>179 <Text style={styles.genText}>IFSC Code- {item.ifscCode}</Text>180 <Text style={styles.genText}>Education Qualification- {item.education}</Text> */}181 <Text style={styles.genText}>Project Status- {item.projectstatus}</Text>182 <Text style={styles.genText}>Total Amount- {item.projectbalance}</Text>183 <Text style={styles.genText}>Total Withdrawn Amount- {item.projectwithdrawn}</Text>184 <Text style={styles.genText}>Current Amount- {item.currentbalance}</Text>185 <Text style={styles.genText}>Requested Amount- {item.requestedbalance}</Text>186 <Text style={styles.genText}>Last Money Request- {item.moneystatus}</Text>187 <Text style={styles.genText}>Long Desc- {item.longDescription}</Text>188 </View>189 </TouchableWithoutFeedback>190 </ScrollView>191 </View>192 )193 }194 _renderFooter = () => {195 return(196 <View style={[styles.cardFooter,{flexDirection:'column'}]}>197 <View style={styles.cardFooter}>198 <TextInput199 adjustsFontSizeToFit={true}200 numberOfLines={1}201 placeholder="Enter Withdrawl Message"202 editable = {true}203 style={styles.textInput}204 onChangeText={(text) => this.setState({msg:text})}205 />206 </View>207 <View style={styles.cardFooter}> 208 <TextInput209 adjustsFontSizeToFit={true}210 numberOfLines={1}211 placeholder="Enter Amount"212 editable = {true}213 keyboardType = "number-pad"214 style={styles.textInput}215 onChangeText={(text) => this.setState({amount:text})}216 />217 <TouchableOpacity style={styles.submitButton}218 onPress={() => {219 console.log(this.state.dataSource[this.state.currentIndex].refID);220 fetch('http://ec2-3-14-86-69.us-east-2.compute.amazonaws.com/requestMoney?id='+this.state.dataSource[this.state.currentIndex].refID+"&id2="+this.state.amount+"&id3="+this.state.msg)221 .then(222 alert("Money Requested Successfully.")223 )224 .catch((error) =>{225 console.error(error);226 }); 227 }}228 >229 <View style={{}}>230 <Text231 style={{fontSize:15, color:'#000000'}}>Request</Text>232 </View>233 </TouchableOpacity>234 235 </View> 236 </View>237 )238 }239 renderUsers = () => {240 if(this.state.isLoading==true)241 return(242 <ActivityIndicator/>243 );244 return this.state.dataSource.map((item, i) => {245 if (i==this.state.currentIndex - 1){246 return (247 <Animated.View248 key={item.id} style={[this.swipedTrasnform, styles.card]}>249 {this._renderHeader(item)}250 {this._renderContent(item)}251 </Animated.View>252 )253 }254 else if (i == this.state.currentIndex) {255 return (256 <Animated.View257 {...this.PanResponder.panHandlers}258 key={item.id} style={[this.rotateAndTranslate, styles.card]}>259 {this._renderHeader(item)}260 {this._renderContent(item)}261 </Animated.View>262 )263 }264 else if(i == this.state.currentIndex + 1){265 266 return (267 <Animated.View268 key={item.id} style={[{269 opacity: this.nextCardOpacity,270 transform: [{ scale: this.nextCardScale }],271 272 }, styles.card]}>273 {this._renderHeader(item)}274 {this._renderContent(item)}275 </Animated.View>276 )277 }278 else 279 return null280 }).reverse()281 }282 render() {283 return (284 <KeyboardAvoidingView behavior='height' style={{ flex: 1 }} keyboardVerticalOffset = {Header.HEIGHT + 30}>285 <SafeAreaView style={{ flex:1 }}>286 <View style={{flex: 1, justifyContent: 'flex-end',flexDirection:'column'}}>287 <View style={{ backgroundColor: '#ededed',flex:1}}>288 {this.renderUsers()}289 </View>290 {this._renderFooter()}291 </View>292 </SafeAreaView>293 {/* <View style={{flex:1, justifyContent:'flex-end',flexDirection:'column', backgroundColor:'red'}}>294 <TextInput style={styles.textInput}></TextInput>295 <View style={{height:100, backgroundColor:'green'}}></View>296 </View> */}297 </KeyboardAvoidingView>298 );299 }...
receive.js
Source: receive.js
...103 response = Response.genNuxMessage(this.user);104 response.push(Datos.servicios());105 } else if (payload === 'EMPRENDEDOR') {106 response = [107 Response.genText(i18n.__('datos.emprendedor')),108 Response.genText(i18n.__('datos.etapa')),109 Datos.etapa(),110 'Emprendimiento Digital'111 ];112 } else if (payload === 'TRANSF') {113 response = [114 Response.genText(i18n.__('datos.transf')),115 Response.genText(i18n.__('datos.situacion')),116 Datos.transf(),117 'Transformación Digital'118 ];119 } else if (payload === 'DISENO') {120 response = [121 Response.genText(i18n.__('datos.diseno')),122 Response.genText(i18n.__('datos.desarrollo')),123 Datos.diseno(),124 'Diseño Web'125 ];126 } else if (payload === 'ET1') {127 response = [128 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),129 Response.genText(i18n.__('datos.proyecto')),130 'Idea'131 ];132 } else if (payload === 'ET2') {133 response = [134 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),135 Response.genText(i18n.__('datos.proyecto')),136 'Modelo de Negocio'137 ];138 } else if (payload === 'ET3') {139 response = [140 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),141 Response.genText(i18n.__('datos.proyecto')),142 'Capital semilla y/o primeras ventas'143 ];144 } else if (payload === 'TR1') {145 response = [146 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),147 Response.genText(i18n.__('datos.proyecto')),148 'No tengo sistema'149 ];150 } else if (payload === 'TR2') {151 response = [152 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),153 Response.genText(i18n.__('datos.proyecto')),154 'Mi sistema es insuficiente'155 ];156 } else if (payload === 'TR3') {157 response = [158 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),159 Response.genText(i18n.__('datos.proyecto')),160 'Mi sistema es costoso'161 ];162 } else if (payload === 'DN1') {163 response = [164 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),165 Response.genText(i18n.__('datos.proyecto')),166 'Landing Page'167 ];168 } else if (payload === 'DN2') {169 response = [170 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),171 Response.genText(i18n.__('datos.proyecto')),172 'Tienda en LÃnea'173 ];174 } else if (payload === 'DN3') {175 response = [176 Response.genText(i18n.__('datos.confirmacion', { user_first_name: this.user.firstName})),177 Response.genText(i18n.__('datos.proyecto')),178 'Aplicación Web'179 ];180 } else if (payload.includes('@') || payload === 'MAS_TARDE') {181 response = [182 Response.genAskPhone(payload),183 payload184 ];185 } else if (payload.includes('+') || Number(payload) || payload === 'MAS_TARDE2') {186 response = [];187 response.push(Response.genText(i18n.__('despedida.pronto', { user_first_name: this.user.firstName})));188 response.push(Response.genText(i18n.__('despedida.pagina')));189 response.push(Response.urlButton(i18n.__('despedida.texto'), i18n.__('despedida.boton'), config.appUrl));190 response.push(payload);191 192 } else if (payload.includes('CHAT-PLUGIN')) {193 response = [194 Response.genText(i18n.__('chat_plugin.prompt', { user_first_name: this.user.firstName})),195 Response.genText(i18n.__('get_started.guidance')),196 Datos.servicios()197 ];198 } else {199 response = {200 text: `¡Este es un mensaje por defecto para el payload: ${payload}!`201 };202 }203 return response;204 }205 handleAttachmentMessage() {206 let response;207 // Get the attachment208 let attachment = this.webhookEvent.message.attachments[0];209 if (!(this.webhookEvent.message.sticker_id && this.webhookEvent.message.sticker_id == '369239263222822')) {210 console.log('Se recibió archivo adjunto:', `${attachment} de ${this.user.psid}`); 211 response = Response.genText(i18n.__('fallback.attachment'));212 } else {213 response = Response.genText('¡Saludos!');214 }215 return response;216 }217 sendMessage(response, delay = 0) {218 // Construct the message body219 let requestBody = {220 recipient: {221 id: this.user.psid222 },223 message: response224 };225 setTimeout(() => GraphAPI.callSendAPI(requestBody), delay);226 }227}
rappi4bUi.js
Source: rappi4bUi.js
1import React,{useState} from 'react';2import{RiShoppingCartLine, RiHomeSmileLine, RiUser5Line, RiPencilLine} from 'react-icons/ri'3import {FaRegClock} from 'react-icons/fa';4import styled from 'styled-components';5import {6 InputWrapper, InputLabel, InputArea, ButtonWrapper,7 Text, HiText, NavBarWrapper, NavBarButton, FormWrapper,8 RestCardWrapper, RestImg, RestDetails, ProductCardWrapper,9 ProductCardImg, ProductCardDetails, ProductCardAddButton, 10 ProductCardCounter, ProductCardActionBar, PopupSelectWrapper,11 Select, PopupSelectButton, Option, PopupSelectShadow, OrderListenerCard,12 ClockView, ActiveOrderDetails, RadioInputWrapper, RadioSelect, RadioOption,13 RadioMark, RadioHr,OrderHIstoryCardWrapper, PersonalInfosCardWrapper, 14 InfosBox, ProfileBox, AddresBox, EditIconButton, LoadingPageWrapper, LoadingPageLogo15}from './rappi4bUi-styles'16export const AppWrapper = styled.main`17 margin: 0;18 width: auto;19 height: auto;20 display: flex;21 flex-direction: row;22 align-items: center;23 justify-content: center;24 overflow-x: hidden;25`;26export const MainWrapper = styled.main`27 width: 360px;28 min-height: 640px;29 display: flex;30 flex-direction: column;31 align-items: center;32 justify-content: center;33 overflow-y: auto;34 overflow-x: hidden;35`;36export const GenButton = ButtonWrapper;37export const GenText = Text;38export const GenHiText = HiText;39export const GenForm = FormWrapper; 40export const GenInput =(props)=>{41 42 return(43 <InputWrapper onBlur={props.onBlur}>44 <InputLabel>45 {props.inputLabel}46 </InputLabel>47 <InputArea48 minLength={props.minLength}49 id={props.id}50 name={props.name}51 title={props.title}52 pattern={props.pattern}53 onChange={props.onChange}54 value={props.value}55 placeholder={props.placeholder}56 type={props.type} 57 required={props.required === undefined && true}58 onKeyDown={props.onKeyDown}59 onClick={props.onClick}60 />61 </InputWrapper> 62 )63};64export const GenNavBar =(props)=>{65 return(66 <NavBarWrapper>67 <NavBarButton 68 pathName={props.pathName === '/home' && props.pathName} onClick={props.onClickToHome}>69 <RiHomeSmileLine/>70 </NavBarButton>71 <NavBarButton 72 pathName={props.pathName === '/cart' && props.pathName} onClick={props.onClickToCart}>73 <RiShoppingCartLine/>74 </NavBarButton>75 <NavBarButton 76 pathName={props.pathName === '/perfil' && props.pathName} onClick={props.onClickToProfile}>77 <RiUser5Line/>78 </NavBarButton>79 </NavBarWrapper>80 )81};82export const RestaurantCard =(props)=>{83 return(84 <RestCardWrapper onClick={props.openDetails}>85 <RestImg src={props.src}/>86 <RestDetails>87 <GenText salmon>{props.restaurantName}</GenText>88 </RestDetails>89 <RestDetails>90 <GenText detail>Entrega em aprox. {props.deliveryTime} min.</GenText>91 <GenText detail>Frete R$ {props.shipping}</GenText>92 </RestDetails>93 </RestCardWrapper>94 )95};96export const ProductCard =(props)=>{97 const [showSelect, setShowSelect] = useState(false);98 const [quantity, setQuantity] = useState( props.quantity ? Number(props.quantity) : 0);99 100 const optionsList=[0,1,2,3,4,5,6,7,8,9,10];101 102 const callBackAddToCart=(event)=>{103 const addToCart = props.addToCart;104 addToCart(event);105 setQuantity(event.target.value);106 setShowSelect(false);107 };108 const handleQuantitySelected = (event) => {109 setQuantity(event.target.value);110 };111 const callBackRemoveFromCart =(event)=>{112 const removeFromCart = props.removeFromCart;113 setQuantity(0)114 removeFromCart(event);115 };116 return(117 <ProductCardWrapper>118 <ProductCardImg src={props.src}/>119 <ProductCardDetails>120 <GenText minor salmon>{props.productName}</GenText>121 <GenText detail minor>{props.description}</GenText>122 <GenText minor>R$ {props.price}</GenText>123 </ProductCardDetails>124 <ProductCardActionBar>125 <ProductCardCounter 126 quantity={quantity} 127 >128 <GenText>{quantity}</GenText>129 </ProductCardCounter>130 {131 props.hiddeActionButton === undefined &&132 <ProductCardAddButton133 id={props.id} 134 quantity={quantity}135 onClick={136 quantity === 0 ? 137 () => setShowSelect(true) : callBackRemoveFromCart138 }139 >140 {141 quantity === 0 ? 'Adicionar' : 'Remover'142 }143 </ProductCardAddButton>144 }145 146 </ProductCardActionBar>147 {148 showSelect === true &&149 <PopupSelectShadow>150 <PopupSelectWrapper>151 <GenText>Selecione a quantidade desejada</GenText>152 <Select onChange={handleQuantitySelected} autoFocus>153 {optionsList.map((option, index)=>{154 return <Option key={index} value={option}>{option}</Option>155 })}156 </Select>157 <PopupSelectButton 158 id={props.id} value={quantity} 159 onClick={callBackAddToCart}160 >161 Adicionar ao carrinho162 </PopupSelectButton>163 <PopupSelectButton 164 onClick={()=> { setQuantity(0); setShowSelect(false)}}165 >166 Cancelar167 </PopupSelectButton>168 </PopupSelectWrapper>169 </PopupSelectShadow> 170 }171 </ProductCardWrapper>172 )173};174export const ListenerCard=(props)=>{175 const[hiddeCard, setHiddeCard] = useState(false);176 return(177 <OrderListenerCard 178 hidde={hiddeCard}179 onClick={()=> setHiddeCard( ! hiddeCard)} 180 >181 <ClockView >182 <GenHiText largeIcon>183 <FaRegClock/>184 </GenHiText>185 <GenText minor>Clique para esconder</GenText>186 </ClockView>187 <ActiveOrderDetails> 188 <GenText white>Pedido em andamento</GenText>189 <GenText>{props.restaurantName}</GenText>190 <GenHiText>subtotal r${props.totalPrice}</GenHiText>191 </ActiveOrderDetails>192 </OrderListenerCard>193 )194};195export const RadioInput = (props)=>{196 const optionsList = props.radioOptions !== undefined ? props.radioOptions : []197 return(198 <RadioInputWrapper>199 <GenText minor>{props.radioTitle}</GenText>200 <RadioHr/>201 {202 optionsList.map(option=>{203 return(204 <RadioOption key={option}>{option}205 <RadioSelect 206 value={207 option.toLowerCase().includes('dinheiro') ? 'money' : 'creditcard'208 }209 onClick={props.onClickOption}210 type='radio' 211 /> 212 <RadioMark/>213 </RadioOption>214 )215 })216 }217 </RadioInputWrapper>218 )219};220export const OrderHistoryCard=(props)=>{221 return(222 <OrderHIstoryCardWrapper>223 <GenText salmon>{props.restaurantName}</GenText>224 <GenText minor>{props.orderDate}</GenText>225 <GenHiText>subtotal r${props.totalPrice}</GenHiText>226 </OrderHIstoryCardWrapper>227 )228};229export const ViewProfileCard=(props)=>{230 return(231 <ProfileBox>232 <InfosBox>233 <GenText>{props.userName}</GenText>234 <GenText minor>{props.userEmail}</GenText>235 <GenText minor>{props.userCpf}</GenText>236 </InfosBox>237 <EditIconButton 238 onClick={props.editInfo}239 >240 <RiPencilLine/>241 </EditIconButton>242 </ProfileBox>243 )244};245export const ViewAdressCard=(props)=>{246 247 return(248 <AddresBox>249 <InfosBox>250 <GenText minor detail>{props.cardTitle}</GenText>251 <GenText>{props.userAddress}</GenText>252 </InfosBox>253 {254 props.showEditButton !== false &&255 <EditIconButton 256 onClick={props.editInfo}257 >258 <RiPencilLine/>259 </EditIconButton>260 }261 </AddresBox>262 )263};264export const LoadingPage=(props)=>{265 return(266 <LoadingPageWrapper>267 <LoadingPageLogo src={props.src} />268 </LoadingPageWrapper>269 )...
index.js
Source: index.js
1import React, { useState, useEffect, useContext } from 'react';2import CartContext from '../../contexts/CartContext';3import api from '../../services/api'4import { useParams, useHistory } from 'react-router-dom';5import UserInfosContext from '../../contexts/UserInfosContext';6import {usePrivatePage} from '../../hooks/hooks';7import {validedToken} from '../../utils/utils';8import LogoRappiW from '../../assets/logo-rappi4-white.png';9import { MainWrapper, ProductCard, GenText, LoadingPage} from '../rappi4bUi/rappi4bUi';10import {RadioHr} from '../rappi4bUi/rappi4bUi-styles';11import { 12 Img, 13 DeliveryInfos,14 DetailContainer15} from './styles';16const RestaurantDetailPage =()=>{17 const [showLoadingPage, setShowLoadingPage] = useState(true);18 const userInfosContext = useContext(UserInfosContext);19 const token = validedToken(userInfosContext);20 usePrivatePage(token);21 const [detail, setDetail] = useState(null)22 const [products, setProducts] = useState(null) 23 24 const cartContext = useContext(CartContext);25 26 const {restaurantId} = useParams();27 28 const history = useHistory();29 30 const getSelectedProduct = (event) => {31 const productId = event.target.id;32 const productQuantity = event.target.value;33 const filteredProduct = products.filter(product => {34 return product.id === productId35 });36 const validedOrder =()=>{37 if(38 cartContext.userCart[restaurantId]!== null &&39 cartContext.userCart[restaurantId]!== undefined &&40 cartContext.userCart[restaurantId].length > 041 ){42 return {43 restaurantId: Number(restaurantId),44 currentOrder:[45 ...cartContext.userCart[restaurantId],{46 product:filteredProduct[0],quantity: productQuantity47 }]48 };49 }else{50 return {51 restaurantId: Number(restaurantId),52 currentOrder:[{53 product:filteredProduct[0],quantity: productQuantity54 }]55 };56 }57 };58 cartContext.dispatch({ 59 type: 'ADD_TO_CART', order: validedOrder()60 }); 61 };62 const removeProduct = (event) => {63 const productId = event.target.id 64 const filteredSelectedProducts = cartContext.userCart.cart.filter(selectedProduct => { 65 return selectedProduct.product.id !== productId66 }) 67 cartContext.dispatch({68 type: 'REMOVE_FROM_CART', filteredCart:filteredSelectedProducts69 }) 70 }; 71 useEffect(() => {72 api.get(`restaurants/${restaurantId}`, {73 headers: {74 auth: token75 }76 }).then((response) =>{ 77 setDetail(response.data.restaurant)78 setProducts(response.data.restaurant.products)79 })80 }, []); 81 useEffect(()=>{82 detail !== null && setShowLoadingPage(false)83 },[detail]);84 const conditionalRender = ()=>{85 if(showLoadingPage === true){86 return <LoadingPage src={LogoRappiW}/>87 }88 return <MainWrapper>89 <DetailContainer>90 <Img src={detail !== null && detail.logoUrl }/> 91 <GenText salmon>{detail !== null && detail.name}</GenText>92 <GenText detail minor>{detail !== null && detail.category}</GenText>93 <DeliveryInfos>94 <GenText detail minor>{detail !== null && `${detail.deliveryTime}min`}</GenText>95 <GenText detail minor>{detail !== null && `Frete R$${detail.shipping.toFixed(2)}`}</GenText>96 </DeliveryInfos>97 <GenText detail minor>{detail !== null && detail.address}</GenText> 98 </DetailContainer>99 <GenText onClick={() => history.goBack()} salmon>Voltar</GenText>100 <GenText alignSelfStart>{detail !== null && `Cardápio`}</GenText>101 <RadioHr/>102 <MainWrapper> 103 {104 products !== null &&105 products.map((product, index) => {106 return(107 <ProductCard108 key={index}109 src={product.photoUrl}110 productName={product.name}111 description={product.description}112 price={product.price.toFixed(2)} 113 id={product.id}114 addToCart={getSelectedProduct} 115 removeFromCart={removeProduct} 116 />117 )118 })119 }120 </MainWrapper>121 </MainWrapper>122 };123 return(124 conditionalRender()125 ) 126};...
contact.js
Source: contact.js
1import React from "react"2import { Helmet } from "react-helmet"3import { useSelector } from "react-redux"4import { themeObject } from "../utils/themes"5import Layout from "../components/layout"6export default () => {7 let genText = themeObject.general8 const currentTheme = useSelector(state => ({9 theme: state.theme,10 }))11 genText = currentTheme.theme.general12 return (13 <Layout>14 <Helmet>15 <title>cassie spain | contact</title>16 <meta name="description" content="cassie spain | software engineer" />17 </Helmet>18 <div className={genText.rightContainer}>19 <div className={genText.contactsContainer}>20 <div className={genText.contactFrame}>21 <p className={genText.contact}>22 <span className={genText.greyText}> ⢠⢠⢠</span> shoot me23 an 24 <a25 href="mailto:cea.spain@gmail.com"26 className={genText.contactLink}27 >28 email29 </a>30 ,31 </p>32 <p className={genText.contact}>33 <span className={genText.greyText}> ⢠⢠⢠⢠⢠⢠</span> connect34 with me on 35 <a36 href="https://www.linkedin.com/in/ceaspain/"37 target="_blank"38 rel="noopener noreferrer"39 className={genText.contactLink}40 >41 linked in42 </a>43 ,44 </p>45 <p className={genText.contact}>46 <span className={genText.greyText}> ⢠⢠⢠⢠⢠⢠⢠⢠⢠</span>47 read my articles on 48 <a49 href="https://medium.com/@cea.spain"50 target="_blank"51 rel="noopener noreferrer"52 className={genText.contactLink}53 >54 medium55 </a>56 ,57 </p>58 <p className={genText.contact}>59 <span className={genText.greyText}>60 {" "}61 ⢠⢠⢠⢠⢠⢠⢠⢠⢠⢠⢠â¢{" "}62 </span>{" "}63 & check me out on 64 <a65 href="https://github.com/dreamwasp"66 target="_blank"67 rel="noopener noreferrer"68 className={genText.contactLink}69 >70 github71 </a>72 !73 </p>74 </div>75 </div>76 </div>77 </Layout>78 )...
project.js
Source: project.js
1import React, { useState } from "react"2import Typist from "react-typist"3import { useSelector } from "react-redux"4import { themeObject } from "../utils/themes"5import Img from "gatsby-image"6export default props => {7 const [isShown, setIsShown] = useState(false)8 const [innerText, setInnerText] = useState("")9 const hoverEffect = inner => {10 setIsShown(true)11 setInnerText(inner)12 }13 let genText = themeObject.general14 const currentTheme = useSelector(state => ({15 theme: state.theme,16 }))17 genText = currentTheme.theme.general18 return (19 <div className={genText.sectionContainer}>20 <div className={genText.section}>21 <div className={genText.sectionTextContainer}>22 <h3 className={genText.sectionHeader}>{props.project.title}</h3>23 <div className={genText.sectionText}>24 <p className={genText.paragraphs}>{props.project.description}</p>25 <p className={genText.paragraphs}>{props.project.tech}</p>26 <div className={genText.logos}>27 {props.project.links.map(logo => (28 <div className={genText.logo}>29 <a30 href={logo.link}31 className={genText.logo}32 target="_blank"33 rel="noopener noreferrer"34 >35 <img36 src={logo.icon}37 onMouseEnter={() => hoverEffect(logo.desc)}38 onMouseLeave={() => setIsShown(false)}39 className={genText.resize}40 alt={logo.desc}41 />42 </a>43 </div>44 ))}45 </div>46 <div className={genText.hoverTextContainer}>47 {isShown && (48 <Typist className={genText.hoverText}>{innerText}</Typist>49 )}50 </div>51 </div>52 </div>53 <div className={genText.photoContainer}>54 <Img55 className={genText.photoFrame}56 fluid={props.image.node.childImageSharp.fluid}57 alt={props.project.alt}58 />59 </div>60 </div>61 </div>62 )...
work.js
Source: work.js
1import React from "react"2import { Helmet } from "react-helmet"3import { useSelector } from "react-redux"4import { useStaticQuery, graphql } from "gatsby"5import Layout from "../components/layout"6import Project from "../components/project"7import Job from "../components/job"8import projects from "../utils/projects"9import jobs from "../utils/jobs"10import { themeObject } from "../utils/themes"11import { imageFilter } from "../utils/helperFunctions"12import genText from "../styles/genText.module.css"13export default () => {14 const data = useStaticQuery(graphql`15 query aQuery {16 allFile(filter: { extension: { regex: "/(png)/" } }) {17 edges {18 node {19 childImageSharp {20 fluid {21 ...GatsbyImageSharpFluid_tracedSVG22 }23 }24 base25 }26 }27 }28 }29 `)30 let genText = themeObject.general31 const currentTheme = useSelector(state => ({32 theme: state.theme,33 }))34 genText = currentTheme.theme.general35 return (36 <Layout>37 <Helmet>38 <title>cassie spain | work</title>39 <meta name="description" content="cassie spain | software engineer" />40 </Helmet>41 <div className={genText.rightContainer}>42 <div className={genText.sectionsContainer}>43 <div className={genText.sectionContainer}>44 <div className={genText.workHeader}>45 <h2 className={genText.workHeaderText}>projects</h2>46 </div>47 {projects.map(project => (48 <Project49 project={project}50 image={imageFilter(data.allFile.edges, project.fileName)}51 />52 ))}53 <div className={genText.sectionContainer}>54 <div className={genText.workHeader}>55 <h2 className={genText.workHeaderText}>56 professional experience57 </h2>58 </div>59 {jobs.map(job => (60 <Job job={job} />61 ))}62 </div>63 </div>64 </div>65 </div>66 </Layout>67 )...
job.js
Source: job.js
1import React from "react"2import { useSelector } from "react-redux"3import { themeObject } from "../utils/themes"4export default props => {5 let genText = themeObject.general6 const currentTheme = useSelector(state => ({7 theme: state.theme,8 }))9 genText = currentTheme.theme.general10 return (11 <div>12 <div className={genText.jobTitleContainer}>13 <h3 className={genText.sectionHeader}>{props.job.title}</h3>14 <div className={genText.companyTimeContainer}>15 <h4 className={genText.companyTime}>{props.job.company}</h4>16 <h4 className={genText.companyTime}>{props.job.time}</h4>17 </div>18 </div>19 <div className={genText.section}>20 <div className={genText.sectionTextsContainer}>21 <div className={genText.sectionText}>22 <p className={genText.jobDescription}>{props.job.desc}</p>23 </div>24 </div>25 </div>26 </div>27 )...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false });4 const page = await browser.newPage();5 const text = await page.evaluate(() => {6 return window.playwright.internal.genText(document.body);7 });8 console.log(text);9 await browser.close();10})();
Jest + Playwright - Test callbacks of event-based DOM library
Is it possible to get the selector from a locator object in playwright?
firefox browser does not start in playwright
Running Playwright in Azure Function
firefox browser does not start in playwright
How to run a list of test suites in a single file concurrently in jest?
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
In today’s world, an organization’s most valuable resource is its customers. However, acquiring new customers in an increasingly competitive marketplace can be challenging while maintaining a strong bond with existing clients. Implementing a customer relationship management (CRM) system will allow your organization to keep track of important customer information. This will enable you to market your services and products to these customers better.
Mobile devices and mobile applications – both are booming in the world today. The idea of having the power of a computer in your pocket is revolutionary. As per Statista, mobile accounts for more than half of the web traffic worldwide. Mobile devices (excluding tablets) contributed to 54.4 percent of global website traffic in the fourth quarter of 2021, increasing consistently over the past couple of years.
With the rising demand for new services and technologies in the IT, manufacturing, healthcare, and financial sector, QA/ DevOps engineering has become the most important part of software companies. Below is a list of some characteristics to look for when interviewing a potential candidate.
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!