Compare commits

...

7 Commits

Author SHA1 Message Date
llaniau 3e5d9f2555 V2.7.5 2021-03-10 10:29:45 +01:00
llaniau e8bb1374d9 Reglage page d'accueil 2021-03-10 10:04:38 +01:00
llaniau 8be4c6d08c Image page accueil 2021-03-09 12:30:53 +01:00
llaniau b519451a0c page accueil 2021-03-09 12:25:46 +01:00
llaniau 04d03aa736 page accueil web app 2021-03-08 19:43:14 +01:00
llaniau c71fe2b452 Inscription tel 2021-02-24 15:41:44 +01:00
llaniau ee45ef810b Correction de bugs 2021-02-24 14:01:30 +01:00
14 changed files with 1130 additions and 1094 deletions
+30 -33
View File
@@ -383,33 +383,21 @@ class Answer extends Component {
remplirLocation = (typeDonnee, donnee) =>{
console.log("DEBUT remplirLocation");
console.log(typeDonnee);
console.log(donnee);
if(typeDonnee=='"street_number"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ street_number: donnee.replace('"', '') })
}else if(typeDonnee=='"route"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ route: donnee.replace('"', '') })
}else if(typeDonnee=='"locality"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ locality: donnee.replace('"', '') })
}else if(typeDonnee=='"administrative_area_level_2"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ administrative_area_level_2: donnee.replace('"', '') })
}else if(typeDonnee=='"administrative_area_level_1"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ administrative_area_level_1: donnee.replace('"', '') })
}else if(typeDonnee=='"country"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ country: donnee.replace('"', '') })
}else if(typeDonnee=='"postal_code"') {
console.log(typeDonnee);
console.log(donnee);
this.setState({ postal_code: donnee.replace('"', '') })
}
console.log("FIN remplirLocation");
@@ -419,7 +407,11 @@ class Answer extends Component {
onSuggestionSelected = (suggestion) => {
console.log('Selected suggestion:', suggestion)
const address = suggestion.description;
let address = suggestion.description;
var words = address.split(',');
if(words.length<3){
address = "mairie de "+address;
}
this.setState({ geoloc: address})
this.setState({
value: address
@@ -427,7 +419,8 @@ class Answer extends Component {
geocodeByAddress(address)
.then(address => {
console.log("ADRESSE");
console.log(address);
if(address[0].address_components[0]){
this.remplirLocation(JSON.stringify(address[0].address_components[0].types[0]), JSON.stringify(address[0].address_components[0].long_name))
}
@@ -450,11 +443,13 @@ class Answer extends Component {
this.remplirLocation(JSON.stringify(address[0].address_components[6].types[0]), JSON.stringify(address[0].address_components[6].long_name))
}
if(address[0].geometry){
console.log(address[0].geometry.location_type);
let gps =JSON.stringify(address[0].geometry.location);
const obj = JSON.parse(gps);
this.setState({ formatted_address: JSON.stringify(address[0].formatted_address) })
this.setState({ lat: obj.lat.toString()})
this.setState({ lng: obj.lng.toString()})
this.setState({ formatted_address: JSON.stringify(address[0].formatted_address) })
this.setState({ lat: obj.lat.toString()})
this.setState({ lng: obj.lng.toString()})
}
@@ -650,20 +645,7 @@ class Answer extends Component {
</Dialog>
<TextField
name="lastname"
required
id="outlined-required"
label="Nom"
className={classes.textField}
classes={{ root: classes.rootTextfield }}
variant="outlined"
value={this.state.lastname}
onChange={this.handleChange}
error={!!_.isEmpty(this.state.lastname)}
helperText={!!_.isEmpty(this.state.lastname) && "Veuillez saisir votre nom"}
required
/>
<TextField
name="firstname"
@@ -679,6 +661,21 @@ class Answer extends Component {
helperText={!!_.isEmpty(this.state.firstname) && "Veuillez saisir votre prénom"}
/>
<TextField
name="lastname"
required
id="outlined-required"
label="Nom"
className={classes.textField}
classes={{ root: classes.rootTextfield }}
variant="outlined"
value={this.state.lastname}
onChange={this.handleChange}
error={!!_.isEmpty(this.state.lastname)}
helperText={!!_.isEmpty(this.state.lastname) && "Veuillez saisir votre nom"}
required
/>
<div
className={classes.conteneurGoogle}
classes={{ root: classes.rootTextfield }}
+3 -3
View File
@@ -363,7 +363,7 @@ class Header extends React.Component {
<div className={classes.fullList + ' ' + classes.lightFullList}>
<List className={classes.List}>
<Link href="/" >
<Link href="/indexTalent" >
<a className={classes.darkMenuItem}><ListItem classes={{ root: classes.rootListItem }}>
<img alt="talents-tube" src='/statique/images/logos/TalentsTube_logo-color.svg' className={classes.menuLogo} />
</ListItem></a>
@@ -579,7 +579,7 @@ class Header extends React.Component {
(<AppBar position="static" className={classes.appBar}>
<Toolbar disableGutters={true} className={classes.toolbarDesktop}>
<section className={classes.appBarDesktopSection + ' ' + classes.appBarDesktopSection1}>
<Link href="/" >
<Link href="/indexTalent" >
<a className={classes.darkMenuItem}>
<ListItem classes={{ root: classes.rootListItemDesktop }}>
<img alt="talents-tube" src='/statique/images/logos/TalentsTube_logo-color.svg' className={classes.desktopMenuLogo} />
@@ -685,7 +685,7 @@ class Header extends React.Component {
<MenuIcon />
</IconButton>
<div className={classes.grow} />
<Link href="/" >
<Link href="/indexTalent" >
<a><img alt="talents-tube" src='/statique/images/logos/TalentsTube_logo-color.svg' className={classes.menuLogo} /></a>
</Link>
<div className={classes.grow} />
@@ -488,7 +488,7 @@ class HeaderPersonnalise extends React.Component {
(<AppBar position="static" className={classes.appBar}>
<Toolbar disableGutters={true} className={classes.toolbarDesktop}>
<section className={classes.appBarDesktopSection + ' ' + classes.appBarDesktopSection1}>
<Link href="/" >
<Link href="/indexTalent" >
<a className={classes.darkMenuItem}>
<ListItem classes={{ root: classes.rootListItemDesktop }}>
<img alt="talents-tube" src='/statique/images/logos/TalentsTube_logo-color.svg' className={classes.desktopMenuLogo} />
@@ -601,7 +601,7 @@ class HeaderPersonnalise extends React.Component {
<ArrowLeft color="primary" classes={{ root: classes.icon }}></ArrowLeft>
</ButtonBase>
<div className={classes.grow} />
<Link href="/" >
<Link href="/indexTalent" >
<a><img alt="talents-tube" src='/statique/images/logos/TalentsTube_logo-color.svg' className={classes.menuLogo} /></a>
</Link>
<div className={classes.grow} />
+32 -14
View File
@@ -108,6 +108,7 @@ class Register extends React.Component {
data: {
firstname: '',
lastname: '',
phone: '',
email: '',
password: '',
checkNewsletter: false,
@@ -118,7 +119,9 @@ class Register extends React.Component {
email:null,
password:null,
firstname:null,
phone:null,
lastname:null,
phone:null,
checkCGU:null
},
loading: false,
@@ -196,19 +199,7 @@ class Register extends React.Component {
<form className={classes.form}>
<TextField
className={classes.champ}
value={data.lastname}
onChange={this.onChange}
id="nom"
name="lastname"
label="Nom"
margin="normal"
variant="outlined"
required
error={!!errors.lastname}
helperText={!!errors.lastname && "Veuillez saisir votre nom."}
/>
<TextField
value={data.firstname}
onChange={this.onChange}
@@ -222,6 +213,33 @@ class Register extends React.Component {
helperText={!!errors.firstname && "Veuillez saisir votre prénom."}
/>
<TextField
className={classes.champ}
value={data.lastname}
onChange={this.onChange}
id="nom"
name="lastname"
label="Nom"
margin="normal"
variant="outlined"
required
error={!!errors.lastname}
helperText={!!errors.lastname && "Veuillez saisir votre nom."}
/>
<TextField
className={classes.champ}
value={data.phone}
onChange={this.onChange}
id="telephone"
name="phone"
label="Téléphone"
margin="normal"
variant="outlined"
/>
<TextField
value={data.email}
onChange={this.onChange}
@@ -233,7 +251,6 @@ class Register extends React.Component {
variant="outlined"
required
error={!!errors.email || !!erreurs}
autoComplete="username email"
helperText={!!errors.email ? "Saisissez une adresse e-mail valide." : !!erreurs && erreurs}
/>
@@ -335,6 +352,7 @@ function mapStateToProps(state) {
return {
loading: !!state.user.loading,
errors: !!state.user.errors ?state.user.errors: {
phone:null,
email:null,
password:null,
firstname:null,
+1 -1
View File
@@ -55,7 +55,7 @@ module.exports = withPlugins(
blogUrl: 'https://blog.talentstube.com',
frontServerUrl: 'https://pp.app.talentstube.com/',
cvThequeUrl: 'https://recruteur.talentstube.com',
version : 'V2.7.2',
version : 'V2.7.5',
adListDefaultUrl: '/statique/images/default/default_picture_company.jpg',
cachedMediaUrl: '/media/cache/profile_thumb/uploads/img/',
postedContentUrl: '/uploads/img/',
+10
View File
@@ -159,6 +159,16 @@
<lastmod>2021-01-18</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://www.talentstube.com/indexTalent</loc>
<lastmod>2021-03-09</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://www.talentstube.com</loc>
<lastmod>2021-03-09</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://www.talentstube.com/Offres</loc>
<lastmod>2021-01-18</lastmod>
+4 -2
View File
@@ -328,8 +328,9 @@ class Reponse extends React.Component {
render() {
const { loading, activeStep } = this.state;
const { classes, menu, offre, company } = this.props;
const logoUrl = (offre.company ? publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + offre.company.logo : '');
const logoCompanyUrl = ((company && company.logo) ? publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + company.logo : '');
const logoUrl = (offre.company ? publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + offre.company.logo : logoCompanyUrl);
let rootStepper = activeStep === 0 ? (
classes.rootStepperDefault
@@ -352,6 +353,7 @@ class Reponse extends React.Component {
<div className={classes.titreContainer}>
<div className={classes.logoContainer}>
<Avatar className={classes.logo} classes={{ img: classes.MuiAvatarImg }} src={logoUrl} alt="companylogo"/>
</div>
<div className={classes.infoContainer}>
<Typography gutterBottom variant="h5" component="h1" className={classes.title}>
@@ -366,7 +368,7 @@ class Reponse extends React.Component {
)
}
{ !!company.brand_name && (<Fragment><div className={classes.logoContainer}>
{/* <Avatar className={classes.logo} classes={{ img: classes.MuiAvatarImg }} src={logoCompanyUrl} alt="companylogo"/> */}
<Avatar className={classes.logo} classes={{ img: classes.MuiAvatarImg }} src={logoCompanyUrl} alt="companylogo"/>
</div>
<div className={classes.infoContainer}>
<Typography gutterBottom variant="h5" component="h1" className={classes.title}>
+746 -289
View File
File diff suppressed because it is too large Load Diff
-750
View File
@@ -1,750 +0,0 @@
import React from 'react';
import AppBar from '@material-ui/core/AppBar';
import Button from '@material-ui/core/Button';
import CameraIcon from '@material-ui/icons/PhotoCamera';
import Card from '@material-ui/core/Card';
import CardActions from '@material-ui/core/CardActions';
import CardContent from '@material-ui/core/CardContent';
import CardMedia from '@material-ui/core/CardMedia';
import CssBaseline from '@material-ui/core/CssBaseline';
import Grid from '@material-ui/core/Grid';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';
import {makeStyles} from '@material-ui/core/styles';
import Container from '@material-ui/core/Container';
import Link from '@material-ui/core/Link';
import VideoVimeo from '../components/atoms/VideoVimeo'
import 'video-react/dist/video-react.css';
import {Player} from 'video-react';
import Hidden from '@material-ui/core/Hidden';
import dynamic from 'next/dynamic'
import OgHead from '../components/atoms/OgHead';
import getConfig from 'next/config'
const Footer = dynamic(() => import ('../components/organisms/FooterAccueil'), {ssr: false});
function Copyright() {
return (
<Typography variant="body2" color="textSecondary" align="center">
{'Copyright © '}
<Link color="inherit" href="https://material-ui.com/">
Your Website
</Link>{' '} {new Date().getFullYear()}
{'.'}
</Typography>
);
}
const useStyles = makeStyles((theme) => ({
icon: {
marginRight: theme.spacing(2)
},
actionBtn: {
marginBottom: "0.75em",
display: "block"
},
bttn: {
color: "#fff",
background: "#FF6A6C",
border: "2px solid #FF6A6C",
padding: "15px"
},
heroSection: {
// background:
// "url('https://blog.talentstube.com/wp-content/uploads/2021/02/realisation-off
// r e-emploi-video-smartphone-modele.jpg') center center no-repeat scroll",
// backgroundSize: "cover",
padding: "5em 0 9em",
position: "relative",
color: "#fff",
[
theme
.breakpoints
.down('md')
]: {
background: "url('/statique/images/accueil/offre-emploi.jpg') center center no-repeat scroll",
backgroundSize: "cover",
height: "100%",
padding: "0"
}
},
mieuxQueTexteSection: {
paddingTop: "28em",
[
theme
.breakpoints
.down('md')
]: {
paddingTop: "0"
}
},
mieuxQueTexteTexte: {
color: "#fff",
font: "normal normal bold 1.625em/1.769em Roboto",
letterSpacing: "2",
},
bloc1Section: {
paddingLeft: "5em",
paddingRight: "5em"
},
heroSectionMobile: {
background: "url('/statique/images/accueil/offre-emploi.jpg') center top no-repeat scroll",
padding: "5em 0 9em",
position: "relative",
color: "#fff"
},
container: {
paddingRight: "15px",
paddingLeft: "15px",
marginRight: "auto",
marginLeft: "auto"
},
containerMobile: {},
colMd12: {
position: "relative",
minHeight: "1px",
paddingLeft: "4em",
paddingRight: "4em",
[
theme
.breakpoints
.down('md')
]: {
paddingLeft: "2em",
paddingRight: "2em",
}
},
welcomeMessageLogo: {
marginBottom:"80px",
textAlign: "left"
},
welcomeMessage: {
textAlign: "left"
},
welcomeMessageH1: {
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
fontSize: "50px",
fontWeight: "700",
lineHeight: "1.2em !important",
color: "#fff",
maxWidth: "600px"
},
welcomeMessageP: {
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
fontSize: "20px",
marginBottom: "0",
color: "#fff",
fontWeight: "400",
maxWidth: "600px",
marginBottom:"80px",
},
videoBackground: {
position: "absolute",
right: "0",
bottom: "0",
top: "0",
minWidth: "100%",
minHeight: "50%",
height: "50%",
width: "auto",
height: "auto",
zIndex: "-100",
// background: `url("/statique/images/recrutement-video.jpg")` ,
},
overlay: {
position: "absolute",
width: "100%",
minHeight: "100%",
background: "rgba(0, 0, 0, 0.36)",
top: "0"
},
overlayMobile: {
width: "100%",
minHeight: "100%",
top: "0"
},
heroContent: {
backgroundColor: "#1689FB",
// backgroundImage:"/statique/images/recrutement-video.jpg",
// background:"https://source.unsplash.com/random", backgroundImage:
// `url("/statique/images/recrutement-video.jpg")` ,
backgroundRepeat: 'no-repeat',
backgroundPosition: "center",
padding: theme.spacing(8, 0, 6)
},
bloc1: {
backgroundColor: "#1E2327",
// backgroundImage:"/statique/images/recrutement-video.jpg",
// background:"https://source.unsplash.com/random", backgroundImage:
// `url("/statique/images/recrutement-video.jpg")` ,
color: "#FFFFFF",
backgroundRepeat: 'no-repeat',
backgroundPosition: "center",
padding: theme.spacing(8, 0, 6),
marginTop: "60px"
},
bloc2: {
backgroundColor: "transparent",
// backgroundImage:"/statique/images/recrutement-video.jpg",
// background:"https://source.unsplash.com/random", backgroundImage:
// `url("/statique/images/recrutement-video.jpg")` ,
backgroundRepeat: 'no-repeat',
backgroundPosition: "center",
marginTop: "0px"
},
bloc3: {
backgroundColor: "transparent",
// backgroundImage:"/statique/images/recrutement-video.jpg",
// background:"https://source.unsplash.com/random", backgroundImage:
// `url("/statique/images/recrutement-video.jpg")` ,
backgroundRepeat: 'no-repeat',
backgroundPosition: "center",
marginTop: "60px"
},
bloc4: {
backgroundColor: "#FCFCFC",
// backgroundImage:"/statique/images/recrutement-video.jpg",
// background:"https://source.unsplash.com/random", backgroundImage:
// `url("/statique/images/recrutement-video.jpg")` ,
backgroundRepeat: 'no-repeat',
backgroundPosition: "center",
marginTop: "60px"
},
footerDiv: {
backgroundColor: "#1E2327",
// backgroundImage:"/statique/images/recrutement-video.jpg",
// background:"https://source.unsplash.com/random", backgroundImage:
// `url("/statique/images/recrutement-video.jpg")` ,
backgroundRepeat: 'no-repeat',
backgroundPosition: "center",
padding: theme.spacing(8, 0, 6)
},
bloc2Titre1: {
textAlign: "left",
font: "normal normal bold 2.625em/1.667em Roboto",
letterSpacing: "2",
color: "#1E2327",
opacity: "1",
lineHeight: "1em"
},
bloc2Titre2: {
textAlign: "left",
font: "normal normal bold 1.625em/1.769em Roboto",
letterSpacing: "2",
color: "#1E2327",
opacity: "1",
lineHeight: "2em"
},
bloc2Titre3: {
textAlign: "left",
font: "normal normal normal 1.25em/1.9em Roboto",
letterSpacing: "2",
color: "#1E2327",
opacity: "1",
lineHeight: "3em"
},
bloc2Paragraphe: {
textAlign: "left",
font: "normal normal normal 1em/2em Roboto",
letterSpacing: "2",
color: "#1E2327",
opacity: "1",
lineHeight: "2em",
marginBottom: '62px'
},
heroButtons: {
marginTop: theme.spacing(4)
},
recruteurButton: {
width: "182px",
height: "49px",
background: "#25D89A 0% 0% no-repeat padding-box",
border: "2px solid #25D89A",
borderRadius: "5px",
opacity: "1",
color: "#fff",
fontWeight: "700",
textTransform: "inherit"
},
talentButton: {
width: "182px",
height: "49px",
border: "2px solid #FFFFFF",
color: "#FFFFFF",
borderRadius: "5px",
opacity: "1",
textTransform: "inherit",
background: "transparent",
fontWeight: "700",
'&:hover': {
background: "#ffffff 0% 0% no-repeat padding-box",
color: "#25D89A"
}
},
cardGrid: {
paddingBottom: theme.spacing(8)
},
cardGauche: {
display: 'flex',
flexDirection: 'column',
background: "#E7F3FF 0% 0% no-repeat padding-box",
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)",
padding: "50px",
minHeight:"650px",
'&:hover': {
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)"
},
[
theme
.breakpoints
.down('md')
]: {
padding: "50px 0px",
}
},
cardDroite: {
display: 'flex',
flexDirection: 'column',
background: "#F8FBFF 0% 0% no-repeat padding-box",
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)",
padding: "50px ",
minHeight:"650px",
'&:hover': {
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)"
},
[
theme
.breakpoints
.down('md')
]: {
padding: "50px 0px",
}
},
cardDroiteGris: {
display: 'flex',
flexDirection: 'column',
background: "#FCFCFC 0% 0% no-repeat padding-box",
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)",
padding: "50px",
'&:hover': {
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)"
}
},
bloc1Droite: {
backgroundColor: "transparent",
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)",
'&:hover': {
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)"
}
},
bloc3Droite: {
backgroundColor: "transparent",
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)",
'&:hover': {
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)"
}
},
blocGris: {
backgroundColor: "transparent",
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)",
verticalAlign:"middle",
'&:hover': {
boxShadow: "0px 0px 0px rgba(30, 35, 39, 0.15)"
}
},
bloc1DroiteH1: {
textAlign: "left",
font: "normal normal bold 2.625em/1.667em Roboto",
letterSpacing: "2",
color: "#ffffff",
opacity: "1",
lineHeight: "1.5em"
},
bloc1DroiteParagraphe: {
textAlign: "left",
font: "normal normal normal 1em/2em Roboto",
letterSpacing: "2",
color: "#ffffff",
opacity: "1",
lineHeight: "2em",
marginBottom: '62px'
},
bloc1Gauche: {
backgroundColor: "transparent",
verticalAlign:"middle"
},
cardMedia: {
paddingTop: '500px', // 16:9
},
cardContent: {
flexGrow: 1
},
footer: {
backgroundColor: theme.palette.background.paper,
padding: theme.spacing(6)
}
}));
const {publicRuntimeConfig} = getConfig();
const cards = [1, 2];
export default function Index() {
const classes = useStyles();
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "/img/default_picture_svg"
const imgUrl = DefaultUrl
return (
<React.Fragment>
<OgHead
seo_title="Espace candidat - Plateforme de recrutement en vidéo | Talents Tube"
seo_description="Talents Tube est la première plateforme réservée aux offres d'emploi vidéo, vidéo marque employeur et aux CV vidéos. Découvrez une nouvelle méthode de recrutement."
seo_url="www.talentstube.com"
image={imgUrl}
seo_key="Recrutement, video"></OgHead>
<main>
{/* Hero unit */}
<header >
<Hidden smDown>
<div className={classes.heroSection}></div>
<video autoPlay loop muted className={classes.videoBackground}>
<source
src={"/statique/video/modele-offre-emploi-originale.mp4"}
type='video/mp4'/>
</video>
<div className={classes.colMd12}>
<div className={classes.welcomeMessageLogo}>
<img src="/statique/images/talents-tube-logo.svg"/>
</div>
<div className={classes.welcomeMessage}>
<h1 className={classes.welcomeMessageH1}>Adoptez le recrutement vidéo</h1>
<p className={classes.welcomeMessageP}>Talents Tube favorise la mise en relation
de candidats et dentreprises et tout ça en vidéo !</p>
</div>
<div className={classes.heroButtons}></div>
<div className={classes.actionBtn}>
<Grid container spacing={2} justify="left">
<Grid item>
<Button variant="contained" className={classes.recruteurButton}>
Je suis recruteur
</Button>
</Grid>
<Grid item>
<Button variant="contained" className={classes.talentButton}>
Je suis talent
</Button>
</Grid>
</Grid>
{/* <button
className={classes.recruteurButton}
data-toggle="modal"
data-target="#exampleModal">JE SUIS RECRUTEUR</button>
<button
className={classes.talentButton}
data-toggle="modal"
data-target=".bd-example-modal-lg">JE SUIS TALENT</button> */}
</div>
</div>
</Hidden>
<Hidden mdUp>
<div className={classes.heroSectionMobile}>
<div className={classes.overlayMobile}>
<div className={classes.containerMobile}>
<div className={classes.colMd12}>
<div className={classes.welcomeMessageLogo}>
<img src="/statique/images/talents-tube-logo.svg"/>
</div>
<div className={classes.welcomeMessage}>
<h1 className={classes.welcomeMessageH1}>Adoptez le recrutement vidéo</h1>
<p className={classes.welcomeMessageP}>Talents Tube favorise la mise en relation
de candidats et dentreprises et tout ça en vidéo !</p>
</div>
<div className={classes.heroButtons}></div>
<div className={classes.actionBtn}>
<Grid container spacing={2} justify="left">
<Grid item>
<Button variant="contained" className={classes.recruteurButton}>
Je suis recruteur
</Button>
</Grid>
<Grid item>
<Button variant="contained" className={classes.talentButton}>
Je suis talent
</Button>
</Grid>
</Grid>
{/* <button
className={classes.recruteurButton}
data-toggle="modal"
data-target="#exampleModal">JE SUIS RECRUTEUR</button>
<button
className={classes.talentButton}
data-toggle="modal"
data-target=".bd-example-modal-lg">JE SUIS TALENT</button> */}
</div>
</div>
</div>
</div>
</div>
</Hidden>
<section className={classes.mieuxQueTexteSection}>
<div className={classes.heroContent}>
<Container maxWidth="lg">
<Typography variant="h4" align="center" className={classes.mieuxQueTexteTexte}>
« Parce que vous méritez mieux que du texte ! »
</Typography>
</Container>
</div>
</section>
</header>
<section >
<div >
<Container className={classes.cardGrid} maxWidth="xl">
{/* End hero unit */}
<Grid container spacing={0}>
<Grid item key={1} xs={24} sm={12} md={6}>
<Card className={classes.cardGauche}>
<CardContent >
<Typography gutterBottom component="h2" className={classes.bloc2Titre1}>
Je suis recruteur
</Typography>
<Typography gutterBottom component="h3" className={classes.bloc2Titre2}>
Talent introuvable ? Métier en tension ?
</Typography>
<Typography className={classes.bloc2Titre3} component="h4">
Rencontrez vos futurs collaborateurs autrement, en vidéo
</Typography>
<Typography className={classes.bloc2Paragraphe}>
<b>Publiez une offre demploi vidéo :</b><br/>
<ul>
<li>Pas besoin dune super vidéo, montrez simplement votre entreprise en donnant
la parole à vos salariés</li>
</ul>
<b>Recevez des candidatures vidéo :</b><br/>
<ul>
<li>Au-delà des compétences, découvrez les vraies personnes derrière le CV
</li>
</ul>
<ul>
<li>
Gagnez du temps dans votre présélection, rencontrez uniquement les candidats
réellement impliqués</li>
</ul>
<b>Ne vous limitez plus à des mots, osez un recrutement plus qualitatif !</b><br/>
</Typography>
<Button variant="contained" className={classes.recruteurButton}>
En savoir plus
</Button>
</CardContent>
</Card>
</Grid>
<Grid item key={2} xs={24} sm={12} md={6}>
<Card className={classes.cardDroite}>
<CardContent className={classes.cardContent}>
<Typography gutterBottom component="h2" className={classes.bloc2Titre1}>
Je suis candidat
</Typography>
<Typography gutterBottom component="h3" className={classes.bloc2Titre2}>
Marre des envois de CV sans réponse ?
</Typography>
<Typography className={classes.bloc2Titre3} component="h4">
Rencontrez votre futur employeur autrement, en vidéo :
</Typography>
<Typography className={classes.bloc2Paragraphe}>
<b>Consultez des offres demploi video :</b><br/>
<ul>
<li>Loffre est en vidéo pour mieux comprendre lentreprise, le métier,
léquipe Votre candidature est aussi en vidéo. Vous êtes à égalité !</li>
</ul>
<b>Déposez votre candidature en vidéo :</b><br/>
<ul>
<li>Tout le monde a du talent et votre personnalité est aujourdhui votre
meilleur atout
</li>
</ul>
<ul>
<li>Pas besoin dune « belle » vidéo, soyez vrai et authentique</li>
</ul>
<b>Dévoilez gratuitement qui vous êtes, au-delà des mots !</b>
</Typography>
<Button variant="contained" className={classes.recruteurButton}>
Je me lance
</Button>
</CardContent>
</Card>
</Grid>
</Grid>
</Container>
</div>
<div className={classes.bloc1}>
<Container className={classes.cardGrid} maxWidth="lg">
{/* End hero unit */}
<Grid container spacing={10}>
<Grid item key={2} xs={24} sm={12} md={6}>
<Card className={classes.bloc1Droite}>
<CardContent className={classes.bloc1Droite}>
<Typography
gutterBottom
component="h2"
color="#fff"
className={classes.bloc1DroiteH1}>
Notre mission : Remettre lhumain au cœur des recrutements
</Typography>
<Typography className={classes.bloc1DroiteParagraphe}>
Chez Talents Tube, nous pensons que la technologie ne doit pas remplacer
lhumain mais être à son service. Cest pour cette raison que nous proposons un
outil de recrutement vidéo alliant digital et humain, afin de redonner la parole
aux candidats et aux entreprises. Talents Tube est aujourdhui la SEULE
plateforme de recrutement qui permet aux entreprises de publier des offres
demploi en vidéo et de recevoir des candidatures en vidéo.
</Typography>
</CardContent>
</Card>
</Grid>
<Hidden smDown>
<Grid item key={1} xs={24} sm={12} md={6}>
<Card className={classes.bloc1Gauche}>
<CardMedia
className={classes.cardMedia}
image="/statique/images/accueil/candidature-en-video.png"></CardMedia>
</Card>
</Grid>
</Hidden>
</Grid>
</Container>
</div>
<div className={classes.bloc3}>
<Container className={classes.cardGrid} maxWidth="lg">
{/* End hero unit */}
<Grid container spacing={10}>
<Hidden smDown>
<Grid item key={1} xs={24} sm={12} md={6}>
<Card className={classes.bloc1Gauche}>
<CardMedia
className={classes.cardMedia}
image="/statique/images/accueil/equipe_talents_tube.jpg"></CardMedia>
</Card>
</Grid>
</Hidden>
<Grid item key={2} xs={24} sm={12} md={6}>
<Card className={classes.bloc3Droite}>
<CardContent className={classes.bloc1Droite}>
<Typography
gutterBottom
component="h2"
color="#fff"
className={classes.bloc2Titre1}>
Pourquoi nous ?
</Typography>
<Typography className={classes.bloc2Titre2}>
Parce que nous sommes les SEULS à savoir le faire !
</Typography>
<Typography className={classes.bloc2Paragraphe}>
Notre équipe est composée dexperts métier qui sauront vous accompagner dans
toutes vos demandes que vous soyez candidat ou recruteur. En recherche
dévolution constante, nous avons à cœur de créer une relation de proximité afin
dadapter NOTRE solution à VOS besoins et ainsi créer une expérience utilisateur
inoubliable. <br/><br/>
Composée dexperts de la fonction RH & Recrutement, nous sommes
passionnés par ce que nous faisons. Notre SEUL objectif : favoriser la rencontre
dentreprises formidables et de candidats uniques pour une performance commune.
</Typography>
</CardContent>
</Card>
</Grid>
</Grid>
</Container>
</div>
<div className={classes.bloc4}>
<Container className={classes.cardGrid} maxWidth="lg">
{/* End hero unit */}
<Grid container spacing={10}>
<Grid item key={2} xs={24} sm={12} md={6}>
<Card className={classes.blocGris}>
<CardContent >
<Typography
gutterBottom
component="h2"
color="#fff"
className={classes.bloc2Titre1}>
Ils recrutent déjà avec Talents Tube!
</Typography>
<Card className={classes.cardDroiteGris}>
<img src="/statique/images/accueil/recrutement-video-entreprises.png"/>
</Card>
</CardContent>
</Card>
</Grid>
<Grid item key={1} xs={24} sm={12} md={6}>
<Card className={classes.blocGris}>
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/sKh0u7Mbdps"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen></iframe>
</Card>
</Grid>
</Grid>
</Container>
</div>
{/* <div className={classes.footerDiv}>
<Container maxWidth="sm"></Container>
</div> */}
<Footer/>
</section>
</main>
</React.Fragment>
);
}
+302
View File
@@ -0,0 +1,302 @@
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Layout from "../components/templates/Layout"
import { Typography } from '@material-ui/core';
import Button from '@material-ui/core/Button';
import Router from 'next/router'
import { connect } from 'react-redux'
//const fetchEmphasisJobsRequest = lazy(() => import('../actions/ads'));
import { fetchEmphasisJobsRequest } from "../actions/ads";
//const fetchEmphasisCompaniesRequest = lazy(() => import('../actions/companies'));
import { fetchEmphasisCompaniesRequest } from "../actions/companies";
import Loader from '../components/templates/loader'
import { isEmpty } from "lodash"
import NoResult from '../components/atoms/NoResult';
// import Head from 'next/head'
import dynamic from 'next/dynamic'
import OgHead from '../components/atoms/OgHead';
import getConfig from 'next/config'
import { BreadcrumbJsonLd } from 'next-seo';
// const VideoSlider = dynamic(() => import('../components/organisms/ShortVideoHooker'), {
// ssr: false
// });
const HorizontalScroller = dynamic(() => import('../components/organisms/HorizontalScroller'), {
ssr: false
});
const TileCompany = dynamic(() => import('../components/organisms/TileCompany'), {
ssr: false
});
const TileOffre = dynamic(() => import('../components/organisms/TileOffre'), {
ssr: false
});
const Footer = dynamic(() => import('../components/organisms/Footer'), {
ssr: false
});
const { publicRuntimeConfig } = getConfig();
const styles = theme => ({
root: {
position: 'relative',
textAlign: 'center',
paddingTop: theme.spacing(20),
justifyContent: 'center',
},
primary: {
color: theme.palette.primary.main,
},
container: {
display: 'flex',
flexDirection: 'column',
},
scrollerSection: {
display: 'flex',
flexDirection: 'column',
paddingBottom: theme.spacing(6),
'&>div': {
paddingBottom: theme.spacing(3),
},
[theme.breakpoints.up('md')]: {
padding: theme.spacing(2, 10),
paddingBottom: theme.spacing(9),
},
[theme.breakpoints.up('lg')]: {
padding: theme.spacing(2, 30),
paddingBottom: theme.spacing(9),
},
[theme.breakpoints.up('xl')]: {
padding: theme.spacing(2, 55),
},
},
scrollerSectionOffer: {
backgroundColor: theme.palette.secondary.main,
},
scrollerSectionCompany: {
backgroundColor: theme.palette.background.grey,
},
card: {
margin: theme.spacing(1),
width: '96%',
height: '100%',
maxWidth: '640px',
maxheight: '360px',
},
HorizontalScroller: {
marginTop: theme.spacing(1),
marginBottom: theme.spacing(4),
},
paper: {
margin: theme.spacing(1),
width: '96%',
height: '100%',
},
media: {
},
svg: {
width: 100,
height: 100,
},
polygon: {
fill: theme.palette.common.white,
stroke: theme.palette.divider,
strokeWidth: 4,
},
img: {
maxWidth: '100%',
},
titleContainer: {
marginTop: theme.spacing(4),
marginBottom: theme.spacing(3),
},
beforeTitle: {
fontSize: '0.8em',
fontWeight: '300',
textAlign: 'center',
textTransform: 'uppercase',
color: theme.palette.secondary.text,
},
title: {
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
fontSize: '1.5em',
fontWeight: '600',
textAlign: 'center',
},
white: {
color: theme.palette.common.white
},
button: {
textTransform: 'inherit',
margin: theme.spacing(0, 8),
padding: theme.spacing(1.2, 2),
[theme.breakpoints.up('sm')]: {
margin: 'auto',
},
},
});
class Index extends React.Component {
state = {
emphasisJobs: [],
emphasisCompanies: []
}
componentDidMount() {
localStorage.setItem("loginRedirect", "/")
this.props.fetchEmphasisJobsRequest({ isEmphasis: 1 })
this.props.fetchEmphasisCompaniesRequest({ isEmphasis: 1 })
}
UNSAFE_componentWillReceiveProps(nextProps) {
this.setState({
emphasisJobs: nextProps.emphasisJobs,
emphasisCompanies: nextProps.emphasisCompanies
})
}
render() {
const { classes } = this.props;
const socialShareUrl = typeof window !== 'undefined' ? window.location
: publicRuntimeConfig.frontServerUrl ;
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "/img/default_picture_svg"
const imgUrl = DefaultUrl
return (
<Layout>
<OgHead seo_title="Espace candidat - Plateforme de recrutement en vidéo | Talents Tube"
seo_description="Talents Tube est la première plateforme réservée aux offres d'emploi vidéo, vidéo marque employeur et aux CV vidéos. Découvrez une nouvelle méthode de recrutement."
seo_url={socialShareUrl}
image={imgUrl}
seo_key="Recrutement, video"
></OgHead>
<BreadcrumbJsonLd
itemListElements={[
{
position: 1,
name: 'Offres',
item: 'https://www.talentstube.com/Offres',
},
{
position: 2,
name: 'Entreprises',
item: 'https://www.talentstube.com/Offres',
},
{
position: 3,
name: 'Espace recruteur',
item: 'https://recruteur.talentstube.com/',
},
{
position: 4,
name: "Blog sur l'emploi",
item: 'https://blog.talentstube.com/',
},
]}
/>
<div className={classes.container}>
{/* <VideoSlider /> */}
<section className={classes.scrollerSection + ' ' + classes.scrollerSectionOffer}>
<div
className={classes.HorizontalScrollerOffre}
>
<div className={classes.titleContainer}>
<Typography gutterBottom
className={classes.beforeTitle}>
à la une
</Typography>
<Typography gutterBottom component="h1"
className={classes.title}>
Les offres d'emploi en <span className={classes.primary}>vidéo</span>
</Typography>
</div>
{this.state.emphasisJobs.loading ?
(<Loader />)
: !isEmpty(this.state.emphasisJobs.data) ? (
<HorizontalScroller
data={this.state.emphasisJobs.data}
className={classes.HorizontalScroller}
type="offre"
>
<TileOffre />
</HorizontalScroller>
) : (<NoResult text='Aucun résultat.' />)}
</div>
<Button
variant="contained"
name="Offres"
color="primary"
onClick={() => Router.push('/Offres')}
className={classes.button + ' cypButtonOffers'}
>
Toutes les offres
</Button>
</section>
<section className={classes.scrollerSection + ' ' + classes.scrollerSectionCompany}>
<div
className={classes.HorizontalScrollerOffre}
>
<div className={classes.titleContainer}>
<Typography gutterBottom
className={classes.beforeTitle}>
à la une
</Typography>
<Typography gutterBottom component="h1"
className={classes.title}>
Les entreprises en <span className={classes.primary}>vidéo</span>
</Typography>
</div>
{this.state.emphasisCompanies.loading ?
(<Loader />)
: !isEmpty(this.state.emphasisCompanies.data) ? (
<HorizontalScroller
data={this.state.emphasisCompanies.data}
className={classes.HorizontalScroller}
type="entreprise"
>
<TileCompany />
</HorizontalScroller>
) : (<NoResult text='Aucun résultat.' />)}
</div>
<Button
name="Entreprises"
variant="contained"
color="primary"
onClick={() => Router.push('/Entreprises')}
className={classes.button}
>
Toutes les entreprises
</Button>
</section>
<Footer />
</div>
</Layout>
);
}
}
function mapStateToProps(state) {
return {
emphasisJobs: state.emphasisJobs,
emphasisCompanies: state.emphasisCompanies
};
}
Index.propTypes = {
classes: PropTypes.object.isRequired,
};
export default (connect(mapStateToProps, { fetchEmphasisJobsRequest, fetchEmphasisCompaniesRequest })(withStyles(styles)(Index)));
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB