Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c71fe2b452 | |||
| ee45ef810b | |||
| 63bd801281 | |||
| ddb1abbe70 | |||
| e7b9298a3b | |||
| ea69a5f308 | |||
| 8fe612824b | |||
| e02f90634b | |||
| c9284e800a | |||
| 3e26ba8bca | |||
| f53743a03e | |||
| d90682c710 | |||
| 5456dfd4c4 | |||
| df81b18194 | |||
| ed9bfff65d | |||
| 39d29567ce | |||
| 10897f633d | |||
| 41916bc451 | |||
| 06e6b615b1 | |||
| ce95cb2d66 | |||
| fe1747ea90 | |||
| f6edb107b2 | |||
| 28ae59b7e4 | |||
| 65b6a9b9dc | |||
| d0ce6516dc | |||
| 12c3b2e1cd | |||
| 3fc5bc6424 | |||
| f0fe21a14e | |||
| 9c19993bcc | |||
| 00fdb164af | |||
| 6e6ac8e440 | |||
| 8259112aac | |||
| b0f66eb9fd | |||
| c08f3db680 | |||
| de1a56285d | |||
| 1e78256886 | |||
| 37c54c4dd0 | |||
| 21c61e6128 | |||
| 32e3826c27 | |||
| 9d647525b3 | |||
| ed19b99bba | |||
| 9c38c8c03d | |||
| f200235ced | |||
| 92a93452bb | |||
| 5626e2d592 | |||
| a52c855ec2 | |||
| 16e5218f16 | |||
| 68e5abb088 | |||
| b52f05002b | |||
| e1bb5de959 | |||
| aaf1226ea0 |
@@ -5,9 +5,6 @@ import {
|
||||
UPLOAD_MEDIA_PRES_REQUEST,
|
||||
UPLOAD_MEDIA_PRES_FAILURE,
|
||||
UPLOAD_MEDIA_PRES_SUCCESS,
|
||||
UPLOAD_MEDIA_CV_REQUEST,
|
||||
UPLOAD_MEDIA_CV_FAILURE,
|
||||
UPLOAD_MEDIA_CV_SUCCESS,
|
||||
|
||||
} from "../types";
|
||||
|
||||
@@ -41,19 +38,6 @@ import {
|
||||
res
|
||||
});
|
||||
|
||||
export const uploadMediaCv = payload => ({
|
||||
type: UPLOAD_MEDIA_CV_REQUEST,
|
||||
payload
|
||||
});
|
||||
|
||||
export const uploadMediaCvFailure = errors => ({
|
||||
type: UPLOAD_MEDIA_CV_FAILURE,
|
||||
errors
|
||||
});
|
||||
|
||||
export const uploadMediaCvSuccess = res => ({
|
||||
type: UPLOAD_MEDIA_CV_SUCCESS,
|
||||
res
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import {
|
||||
UPLOAD_MEDIA_CV_REQUEST,
|
||||
UPLOAD_MEDIA_CV_FAILURE,
|
||||
UPLOAD_MEDIA_CV_SUCCESS,
|
||||
|
||||
} from "../types";
|
||||
|
||||
|
||||
|
||||
export const uploadMediaCv = payload => ({
|
||||
type: UPLOAD_MEDIA_CV_REQUEST,
|
||||
payload
|
||||
});
|
||||
|
||||
export const uploadMediaCvFailure = errors => ({
|
||||
type: UPLOAD_MEDIA_CV_FAILURE,
|
||||
errors
|
||||
});
|
||||
|
||||
export const uploadMediaCvSuccess = res => ({
|
||||
type: UPLOAD_MEDIA_CV_SUCCESS,
|
||||
res
|
||||
});
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import Business from '@material-ui/icons/Business';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import WatchLater from '@material-ui/icons/WatchLater';
|
||||
import Home from '@material-ui/icons/Home';
|
||||
import People from '@material-ui/icons/People';
|
||||
|
||||
const variantIcon = {
|
||||
assignment: AssignmentIcon,
|
||||
@@ -19,6 +20,7 @@ const variantIcon = {
|
||||
business: Business,
|
||||
watch_later: WatchLater,
|
||||
home: Home,
|
||||
people: People,
|
||||
};
|
||||
|
||||
const styles = theme => ({
|
||||
|
||||
@@ -7,6 +7,7 @@ import LocationOnIcon from '@material-ui/icons/LocationOn';
|
||||
import HomeOnIcon from '@material-ui/icons/Home';
|
||||
import WatchLater from '@material-ui/icons/WatchLater';
|
||||
import BusinessCenterIcon from '@material-ui/icons/BusinessCenter';
|
||||
import People from '@material-ui/icons/People';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import Business from '@material-ui/icons/Business';
|
||||
|
||||
@@ -18,6 +19,7 @@ const variantIcon = {
|
||||
watch_later: WatchLater,
|
||||
business_center: BusinessCenterIcon,
|
||||
business: Business,
|
||||
people: People,
|
||||
};
|
||||
|
||||
const styles = theme => ({
|
||||
|
||||
@@ -8,7 +8,7 @@ const styles = theme => ({
|
||||
padding: theme.spacing(0, 4),
|
||||
},
|
||||
text: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1,2em',
|
||||
fontWeight: '500',
|
||||
color: theme.palette.primary.main,
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import Head from 'next/head'
|
||||
|
||||
|
||||
const OgHead = props => {
|
||||
return (
|
||||
<Head>
|
||||
<title key="title">{props.seo_title}</title>
|
||||
<meta name="robots" content="noindex, nofollow"></meta>
|
||||
|
||||
<meta name="description" kenoindexy="description" content={props.seo_description} />
|
||||
<meta name="keywords" content={props.seo_key}/>
|
||||
<meta key="og:url" property="og:url" content={props.seo_url} />
|
||||
<meta key="og:type" property="og:type" content="article" />
|
||||
<meta key="og:title" property="og:title" content={props.seo_title} />
|
||||
<meta property="fb:app_id" content="1800752833559014" data-react-helmet="true"></meta>
|
||||
<meta
|
||||
key="og:description"
|
||||
property="og:description"
|
||||
@@ -19,16 +20,18 @@ const OgHead = props => {
|
||||
/>
|
||||
<meta name="keywords" content={props.seo_key}/>
|
||||
<meta key="og:image" property="og:image" content={props.image} />
|
||||
<meta key="og:image:width" property="og:image:width" content="355" />
|
||||
<meta key="og:image:height" property="og:image:height" content="200" />
|
||||
<meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:site" content="@TalentsTube"/>
|
||||
<meta name="twitter:title" content={props.seo_title}/>
|
||||
<meta name="twitter:description" content={props.seo_description}/>
|
||||
<meta name="twitter:image" content={props.image}/>
|
||||
<meta name="robots" content="noindex, nofollow"></meta>
|
||||
{/* <meta httpEquiv='cache-control' content='no-store,no-cache'></meta>
|
||||
<meta httpEquiv='expires' content='0'></meta>
|
||||
<meta httpEquiv='pragma' content='no-cache'></meta> */}
|
||||
{/* <link rel="canonical" href={ props.seo_url} /> */}
|
||||
|
||||
<link rel="canonical" href={ props.seo_url} />
|
||||
</Head>
|
||||
|
||||
)
|
||||
|
||||
@@ -72,7 +72,7 @@ export default function VideoVimeo(props) {
|
||||
|
||||
<section className={className +' '+classesOverride}>
|
||||
<iframe className='player'
|
||||
src={"https://player.vimeo.com/video/"+ videoId + options+"?autoplay="+autoplay}
|
||||
src={"https://player.vimeo.com/video/"+ videoId + options+"?texttrack=fr&autoplay="+autoplay}
|
||||
frameBorder="0"
|
||||
title={title}
|
||||
webkitallowfullscreen="true" mozallowfullscreen="true" allowFullScreen></iframe>
|
||||
|
||||
@@ -24,8 +24,8 @@ const theme = createMuiTheme({
|
||||
},
|
||||
offerlistitem: {
|
||||
title: '#1E2327',
|
||||
icon: '#BBBCBD',
|
||||
text: '#787B7D',
|
||||
icon: '#1E2327',
|
||||
text: '#1E2327',
|
||||
},
|
||||
answer: {
|
||||
main: '#E8E8E8',
|
||||
|
||||
@@ -368,7 +368,7 @@ class AccountEtape1 extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
value={this.state.currentJob ? this.state.currentJob : ''}
|
||||
value={this.state.currentJob =='null' || this.state.currentJob =='' ? '' :this.state.currentJob}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -442,7 +442,7 @@ class AccountEtape1 extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://www.linkedin.com/in/"
|
||||
value={this.state.linkedin ? this.state.linkedin : ''}
|
||||
value={this.state.linkedin =='null' || this.state.linkedin =='' ? '' :this.state.linkedin}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
|
||||
@@ -456,7 +456,7 @@ class AccountEtape1 extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://twitter.com/.."
|
||||
value={this.state.twitter ? this.state.twitter : ''}
|
||||
value={this.state.twitter =='null' || this.state.twitter =='' ? '' :this.state.twitter}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -469,7 +469,7 @@ class AccountEtape1 extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://monsite.fr"
|
||||
value={this.state.website ? this.state.website : ''}
|
||||
value={this.state.website =='null' || this.state.website =='' ? '' :this.state.website}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
|
||||
@@ -210,7 +210,7 @@ class Etape2 extends React.Component {
|
||||
<section className={classes.container}>
|
||||
<Fragment>
|
||||
{this.AfficherSuccess()}
|
||||
{ loading ? <LoaderVideo/> : <div></div> }
|
||||
{ loading ? <LoaderVideo textePrincipal="Votre vidéo est en cours d’envoi..." texteSecondaire="Veuillez rester sur la page pendant le chargement qui peut durer plusieurs minutes."/> : <div></div> }
|
||||
|
||||
<div className={classes.root}>
|
||||
<Hidden xsUp>
|
||||
|
||||
@@ -2,7 +2,7 @@ import React, { Fragment } from 'react';
|
||||
import { connect } from "react-redux";
|
||||
import { fetchCurrentUserRequest } from '../../actions/user'
|
||||
import { fetchCompanyRequest } from '../../actions/companies'
|
||||
import { uploadMediaCv } from '../../actions/media'
|
||||
import { uploadMediaCv } from '../../actions/mediaCv'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import { makeStyles } from '@material-ui/styles';
|
||||
import { Button, Typography, Divider, Hidden } from '@material-ui/core';
|
||||
@@ -191,7 +191,7 @@ class Etape3 extends React.Component {
|
||||
return (
|
||||
<Fragment>
|
||||
{ loading ?
|
||||
<LoaderVideo /> :
|
||||
<LoaderVideo textePrincipal="Votre candidature vidéo est en cours d’envoi..." texteSecondaire="Veuillez rester sur la page pendant le chargement qui peut durer plusieurs minutes."/> :
|
||||
<Fragment>
|
||||
{this.AfficherSuccess()}
|
||||
|
||||
@@ -246,7 +246,7 @@ function mapStateToProps(state) {
|
||||
// console.log(state.media.message)
|
||||
return {
|
||||
user: state.user ,
|
||||
cvLink : state.media.message,
|
||||
cvLink : state.mediaCv.message,
|
||||
loading: !!state.media.loading,
|
||||
cv : true,
|
||||
//errors: errorMessageSelector(state),
|
||||
|
||||
@@ -21,7 +21,7 @@ import DialogActions from '@material-ui/core/DialogActions';
|
||||
import DialogContent from '@material-ui/core/DialogContent';
|
||||
import DialogContentText from '@material-ui/core/DialogContentText';
|
||||
import DialogTitle from '@material-ui/core/DialogTitle';
|
||||
import { uploadMediaCv } from '../../actions/media'
|
||||
import { uploadMediaCv } from '../../actions/mediaCv'
|
||||
import GetApp from '@material-ui/icons/GetApp';
|
||||
// import PlacesAutocomplete from 'react-places-autocomplete';
|
||||
// import {
|
||||
@@ -31,6 +31,8 @@ import GetApp from '@material-ui/icons/GetApp';
|
||||
// } from 'react-places-autocomplete';
|
||||
// import GoogleAutoComplete from 'react-google-autocomplete-address-fields';
|
||||
|
||||
|
||||
|
||||
const styles = theme => ({
|
||||
container: {
|
||||
width: '100%',
|
||||
@@ -91,13 +93,25 @@ const styles = theme => ({
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.important,
|
||||
},
|
||||
|
||||
containerImport:{
|
||||
width:"100%",
|
||||
textAlign:"left",
|
||||
align:"left",
|
||||
alignItems:"flex-start",
|
||||
border: 0,
|
||||
margin: 0,
|
||||
display: "inline-flex",
|
||||
padding: 0,
|
||||
position: "relative",
|
||||
flexDirection: "column",
|
||||
verticalAlign: "top",
|
||||
marginBottom:"20px !important"
|
||||
},
|
||||
importButton: {
|
||||
padding: '4px 8px',
|
||||
textTransform: 'inherit',
|
||||
border: '2px solid #1E2327',
|
||||
color: '#1E2327',
|
||||
|
||||
},
|
||||
remplacerButton: {
|
||||
color: '#1E2327',
|
||||
@@ -114,6 +128,24 @@ const styles = theme => ({
|
||||
},
|
||||
player:{
|
||||
width:"100px"
|
||||
},
|
||||
labelGeoloc:{
|
||||
paddingLeft:"14px",
|
||||
fontSize: "0.8rem",
|
||||
color:"#1E2327",
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
|
||||
fontWeight: "400",
|
||||
lineHeight: "1",
|
||||
letterSpacing: "0.00938em", }
|
||||
,conteneurGoogle:{
|
||||
border:"1px solid rgb(200, 200, 200)",
|
||||
borderRadius :"5px",
|
||||
padding:"5px 0px",
|
||||
|
||||
|
||||
},
|
||||
conteneurGoogleComposant:{
|
||||
paddingLeft:"14px"
|
||||
}
|
||||
|
||||
});
|
||||
@@ -145,12 +177,25 @@ class Answer extends Component {
|
||||
this.onChange = this.onChange.bind(this);
|
||||
|
||||
}
|
||||
|
||||
state = {
|
||||
file: null,
|
||||
firstname: '',
|
||||
lastname: '',
|
||||
phone: '',
|
||||
currentJob: '',
|
||||
geoloc: '',
|
||||
value:'',
|
||||
route: '',
|
||||
street_number: '',
|
||||
locality: '',
|
||||
administrative_area_level_2: '',
|
||||
administrative_area_level_1: '',
|
||||
country: '',
|
||||
postal_code: '',
|
||||
formatted_address:"",
|
||||
lat:"",
|
||||
lng:"",
|
||||
linkedin: '',
|
||||
twitter: '',
|
||||
website: '',
|
||||
@@ -169,13 +214,25 @@ class Answer extends Component {
|
||||
|
||||
UNSAFE_componentWillReceiveProps(nextProps) {
|
||||
this.setState({
|
||||
firstname: nextProps.user.firstname,
|
||||
lastname: nextProps.user.lastname,
|
||||
phone: nextProps.user.phone,
|
||||
currentJob: nextProps.user.currentJob,
|
||||
linkedin: nextProps.user.linkedin,
|
||||
twitter: nextProps.user.twitter,
|
||||
website: nextProps.user.website,
|
||||
firstname: this.state.firstname,
|
||||
lastname: this.state.lastname,
|
||||
phone: this.state.phone,
|
||||
currentJob: this.state.currentJob,
|
||||
geoloc: this.state.geoloc,
|
||||
value: this.state.value,
|
||||
route: this.state.route,
|
||||
street_number: this.state.street_number,
|
||||
locality: this.state.locality,
|
||||
administrative_area_level_2: this.state.administrative_area_level_2,
|
||||
administrative_area_level_1: this.state.administrative_area_level_1,
|
||||
country: this.state.country,
|
||||
postal_code: this.state.postal_code,
|
||||
formatted_address : this.state.formatted_address,
|
||||
lat:this.state.lat,
|
||||
lng: this.state.lng,
|
||||
linkedin: this.state.linkedin,
|
||||
twitter: this.state.twitter,
|
||||
website: this.state.website,
|
||||
mediaId: nextProps.mediaId,
|
||||
mediaUrl: nextProps.mediaUrl,
|
||||
thumbnails: nextProps.thumbnails,
|
||||
@@ -195,13 +252,25 @@ class Answer extends Component {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
console.log("ANSWER !!!!!!! !!!!!! !!!!!! ");
|
||||
console.log("ANSWER ! ");
|
||||
console.log(this.props);
|
||||
this.setState({
|
||||
firstname: this.props.user.firstname,
|
||||
lastname: this.props.user.lastname,
|
||||
phone: this.props.user.phone,
|
||||
currentJob: this.props.user.currentJob,
|
||||
value: this.props.user.geoloc && this.props.user.geoloc[0].formatted_address ? this.props.user.geoloc[0].formatted_address :"",
|
||||
geoloc: this.props.user.geoloc && this.props.user.geoloc[0].formatted_address ? this.props.user.geoloc[0].formatted_address :"",
|
||||
route: "",
|
||||
street_number: "",
|
||||
locality: "",
|
||||
administrative_area_level_2: "",
|
||||
administrative_area_level_1: "",
|
||||
country: "",
|
||||
postal_code: "",
|
||||
formatted_address:"",
|
||||
lat:"",
|
||||
lng:"",
|
||||
linkedin: this.props.user.linkedin,
|
||||
twitter: this.props.user.twitter,
|
||||
website: this.props.user.website,
|
||||
@@ -210,84 +279,80 @@ class Answer extends Component {
|
||||
thumbnails : this.props.thumbnails,
|
||||
heure : this.props.heure,
|
||||
loading: false,
|
||||
cvLink: this.props.cvLink instanceof Object ? this.props.user.cv : this.props.cvLink
|
||||
cvLink: this.props.user.cv
|
||||
|
||||
})
|
||||
console.log(this.state);
|
||||
}
|
||||
|
||||
inputFilesystemChange = (e) => {
|
||||
this.uploadMediaCv(e)
|
||||
}
|
||||
|
||||
uploadMediaCv = (e) => {
|
||||
var file = e.target.files[0]
|
||||
inputFilesystemChange = (e) => {
|
||||
this.uploadMediaCv(e)
|
||||
}
|
||||
|
||||
const data = new FormData()
|
||||
data.append('upload', file)
|
||||
|
||||
this.props.uploadMediaCv(data)
|
||||
}
|
||||
|
||||
AfficherSuccess() {
|
||||
uploadMediaCv = (e) => {
|
||||
var file = e.target.files[0]
|
||||
|
||||
const data = new FormData()
|
||||
data.append('upload', file)
|
||||
this.props.uploadMediaCv(data)
|
||||
}
|
||||
|
||||
AfficherSuccess() {
|
||||
if (!this.state.success || !this.state.success.message) {
|
||||
console.log("Erreur Upload CV");
|
||||
return "";
|
||||
} else if (this.state.success.length != 0 && this.state.success.message != "") {
|
||||
return (
|
||||
<Snackbar open={open} autoHideDuration={1000} onClose={() => this.setState({open: false})}>
|
||||
<Snackbar open={open} autoHideDuration={1000} onClose={() => this.setState({open: false})}>
|
||||
<Alert onClose={() => this.setState({open: false})} severity="success">
|
||||
{ReactHtmlParser(this.state.success.message)}
|
||||
{ReactHtmlParser(this.state.success.message)}
|
||||
</Alert>
|
||||
</Snackbar>
|
||||
</Snackbar>
|
||||
);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
AfficherLienCv() {
|
||||
|
||||
AfficherLienCv() {
|
||||
console.log("afficher lien");
|
||||
if (this.state.cvLink !="") {
|
||||
|
||||
if (this.state.cvLink !="") {
|
||||
|
||||
return (
|
||||
|
||||
<Fragment>
|
||||
<Hidden> </Hidden>
|
||||
<Hidden> </Hidden>
|
||||
|
||||
<Fragment>
|
||||
|
||||
<Typography >
|
||||
<a href={publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.postedContentCv + this.state.cvLink}
|
||||
target="_blank"
|
||||
style={{
|
||||
color:'#1E2327',
|
||||
'&:hover': {
|
||||
color: '#1E2327',
|
||||
},
|
||||
backgroundColor: '#F3F3F4',
|
||||
width:'100%',
|
||||
fontWeight: '500',
|
||||
fontSize: '1em',
|
||||
padding:'15px',
|
||||
margin:'20px 0',
|
||||
|
||||
}}
|
||||
>
|
||||
Visualiser mon CV
|
||||
</a>
|
||||
<br />
|
||||
|
||||
<Hidden> </Hidden>
|
||||
<Hidden> </Hidden>
|
||||
|
||||
<Hidden> </Hidden>
|
||||
|
||||
<Button size="small">MON CV</Button>
|
||||
|
||||
|
||||
<Typography >
|
||||
<a href={publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.postedContentCv + this.state.cvLink}
|
||||
target="_blank"
|
||||
style={{
|
||||
color:'#1689FB',
|
||||
'&:hover': {
|
||||
color: '#1689FB',
|
||||
},
|
||||
fontWeight: '700',
|
||||
fontSize: '1em',
|
||||
}}
|
||||
>
|
||||
Visualiser mon CV
|
||||
</a>
|
||||
<br />
|
||||
{/* <a href="https://www.permatheque.fr/PDF/mansobufukuoka-larevolutiondunseulbrindepaille.pdf" target="_blank">lien</a> */}
|
||||
</Typography>
|
||||
|
||||
</Fragment>
|
||||
</Typography>
|
||||
|
||||
</Fragment>
|
||||
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -312,27 +377,97 @@ class Answer extends Component {
|
||||
|
||||
if (e.target.value === '') {
|
||||
console.log('cleared');
|
||||
this.props.onSelectionChanged('');
|
||||
//this.props.onSelectionChanged('');
|
||||
}
|
||||
}
|
||||
|
||||
onSuggestionSelected = (suggestion) => {
|
||||
remplirLocation = (typeDonnee, donnee) =>{
|
||||
console.log("DEBUT remplirLocation");
|
||||
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");
|
||||
|
||||
}
|
||||
|
||||
onSuggestionSelected = (suggestion) => {
|
||||
|
||||
console.log('Selected suggestion:', suggestion)
|
||||
const address = suggestion.description;
|
||||
this.setState({ geoloc: address})
|
||||
this.setState({
|
||||
value: address
|
||||
});
|
||||
|
||||
geocodeByAddress(address)
|
||||
.then(address => {
|
||||
console.log('Selected ' + JSON.stringify(address[0]));
|
||||
this.props.onSelectionChanged(address[0]);
|
||||
|
||||
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))
|
||||
}
|
||||
if(address[0].address_components[1]){
|
||||
this.remplirLocation(JSON.stringify(address[0].address_components[1].types[0]), JSON.stringify(address[0].address_components[1].long_name))
|
||||
}
|
||||
if(address[0].address_components[2]){
|
||||
this.remplirLocation(JSON.stringify(address[0].address_components[2].types[0]), JSON.stringify(address[0].address_components[2].long_name))
|
||||
}
|
||||
if(address[0].address_components[3]){
|
||||
this.remplirLocation(JSON.stringify(address[0].address_components[3].types[0]), JSON.stringify(address[0].address_components[3].long_name))
|
||||
}
|
||||
if(address[0].address_components[4]){
|
||||
this.remplirLocation(JSON.stringify(address[0].address_components[4].types[0]), JSON.stringify(address[0].address_components[4].long_name))
|
||||
}
|
||||
if(address[0].address_components[5]){
|
||||
this.remplirLocation(JSON.stringify(address[0].address_components[5].types[0]), JSON.stringify(address[0].address_components[5].long_name))
|
||||
}
|
||||
if(address[0].address_components[6]){
|
||||
this.remplirLocation(JSON.stringify(address[0].address_components[6].types[0]), JSON.stringify(address[0].address_components[6].long_name))
|
||||
}
|
||||
if(address[0].geometry){
|
||||
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()})
|
||||
}
|
||||
|
||||
|
||||
// console.log("GEOLOC ON geocodeByAddress")
|
||||
// console.log(this.state.geoloc)
|
||||
// document.getElementById("geoloc").value =JSON.stringify(address[0]);
|
||||
// this.props.onSelectionChanged(address[0]);
|
||||
})
|
||||
.catch(error => console.error('Error', error))
|
||||
}
|
||||
|
||||
onSuggestionSelected(suggestion) {
|
||||
|
||||
// Add your business logic here. In this case we just log...
|
||||
console.log('Selected suggestion:', suggestion)
|
||||
}
|
||||
@@ -346,9 +481,9 @@ class Answer extends Component {
|
||||
const className = suggestion.active ? 'suggestion-item--active' : 'suggestion-item';
|
||||
const style = suggestion.active
|
||||
? { backgroundColor: 'red', cursor: 'pointer',border: '1px solid' }
|
||||
: { backgroundColor: '#ffffff', cursor: 'pointer',border: '1px solid' };
|
||||
: { backgroundColor: '#123456', cursor: 'pointer',border: '1px solid' };
|
||||
return (<div {...getSuggestionItemProps(suggestion,{className,style})}>
|
||||
<span>{suggestion.description}</span>
|
||||
<span >{suggestion.description}</span>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
@@ -363,7 +498,7 @@ class Answer extends Component {
|
||||
|
||||
|
||||
|
||||
handleChange = (e) => {
|
||||
handleChange = (e) => {
|
||||
this.setState({ [e.target.name]: e.target.value })
|
||||
}
|
||||
|
||||
@@ -372,13 +507,30 @@ class Answer extends Component {
|
||||
|
||||
onSubmit = (e) => {
|
||||
e.preventDefault()
|
||||
|
||||
//TODO : Vérifier si le nom et prénom sont renseignés
|
||||
console.log("firstname")
|
||||
console.log(this.state.firstname)
|
||||
const data = new FormData()
|
||||
|
||||
|
||||
data.append('firstname', this.state.firstname)
|
||||
data.append('lastname', this.state.lastname)
|
||||
data.append('phone', this.state.phone)
|
||||
data.append('currentJob', this.state.currentJob)
|
||||
console.log("GEOLOC ON SUBMIT")
|
||||
console.log(this.state)
|
||||
data.append('geoloc', this.state.geoloc)
|
||||
|
||||
data.append('street_number', this.state.street_number.replace('"', ''))
|
||||
data.append('route', this.state.route.replace('"', ''))
|
||||
data.append('locality', this.state.locality.replace('"', ''))
|
||||
data.append('administrative_area_level_2', this.state.administrative_area_level_2.replace('"', ''))
|
||||
data.append('administrative_area_level_1', this.state.administrative_area_level_1.replace('"', ''))
|
||||
data.append('country', this.state.country.replace('"', ''))
|
||||
data.append('postal_code', this.state.postal_code.replace('"', ''))
|
||||
data.append('formatted_address', this.state.formatted_address.replace('"', ''))
|
||||
data.append('lat', this.state.lat)
|
||||
data.append('lng', this.state.lng)
|
||||
//
|
||||
data.append('linkedin', this.state.linkedin)
|
||||
data.append('twitter', this.state.twitter)
|
||||
data.append('website', this.state.website)
|
||||
@@ -391,6 +543,9 @@ class Answer extends Component {
|
||||
// //TODO Envoyer un mail a chaque user
|
||||
// console.log(user.email)
|
||||
// )
|
||||
// US 471 : TODO envoyer le lien du cv pour le mettre dans la candidature (this.state.cvLink)
|
||||
|
||||
console.log(this.state.cvLink, "lien CV")
|
||||
this.props.postAdAnswerRequest(
|
||||
{
|
||||
adId: this.props.adId,
|
||||
@@ -434,6 +589,10 @@ class Answer extends Component {
|
||||
value: this.state.address,
|
||||
onChange: this.onChange,
|
||||
}
|
||||
const searchOptions = {
|
||||
componentRestrictions: { country: ['fr'] },
|
||||
}
|
||||
|
||||
return (
|
||||
<section className={classes.container}>
|
||||
|
||||
@@ -465,27 +624,20 @@ class Answer extends Component {
|
||||
</Button>
|
||||
</label></Fragment>)
|
||||
} */}
|
||||
<Player fluid={false} width={450}
|
||||
<Player fluid={false} width={"75%"} height={350}
|
||||
playsInline className={classes.player}
|
||||
src={publicRuntimeConfig.symphonyUrl + "uploads/videos/"+this.state.mediaUrl}
|
||||
//src={this.state.mediaUrl}
|
||||
// src="https://media.w3.org/2010/05/sintel/trailer_hd.mp4"
|
||||
/>
|
||||
|
||||
<GooglePlaceAutocomplete
|
||||
name="location"
|
||||
label="Location"
|
||||
onSuggestionSelected={this.onSuggestionSelected}
|
||||
textFieldProps={{ onChange: (e) => this.onChange(e), value: this.state.value, placeholder: 'Search for a place'}}
|
||||
types={['(regions)']}
|
||||
renderTarget={() => (<div />)}
|
||||
/>
|
||||
|
||||
<Button className={classes.remplacerButton} onClick={this.openDialog.bind(this)}>
|
||||
Remplacer ma vidéo
|
||||
</Button>
|
||||
<Dialog open={this.state.open} onEnter={console.log("Hey.")}>
|
||||
<Dialog open={this.state.open}>
|
||||
<DialogTitle> Souhaitez-vous remplacer votre vidéo de réponse ?</DialogTitle>
|
||||
<DialogContent className={classes.popup}> Cette vidéo sera définitivement supprimée. Vous pourrez importer ou réaliser une nouvelle video de réponse. </DialogContent>
|
||||
<DialogContent className={classes.popup}> Cette vidéo et tous les éléments de votre candidature seront définitivement supprimés. Vous pourrez importer ou réaliser une nouvelle vidéo de réponse. </DialogContent>
|
||||
<DialogActions>
|
||||
|
||||
<Button onClick={this.closeDialog.bind(this)} autoFocus>
|
||||
@@ -498,18 +650,8 @@ 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}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<TextField
|
||||
name="firstname"
|
||||
required
|
||||
@@ -520,8 +662,71 @@ class Answer extends Component {
|
||||
variant="outlined"
|
||||
value={this.state.firstname}
|
||||
onChange={this.handleChange}
|
||||
error={!!_.isEmpty(this.state.firstname)}
|
||||
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 }}
|
||||
style={{ position: 'relative', zIndex:2, width: '100%' }}>
|
||||
<label htmlFor="outlined-required"
|
||||
className={classes.labelGeoloc}>
|
||||
Adresse
|
||||
</label>
|
||||
<div className={classes.conteneurGoogleComposant}>
|
||||
<GooglePlaceAutocomplete
|
||||
style={{ paddingLeft:'14px !important', left: 0, right: 0, zIndex: '2 !important', width: '100%' }}
|
||||
name="location"
|
||||
label="Location"
|
||||
id="outlined-required"
|
||||
variant="outlined"
|
||||
textFieldProps={{ id: "outlined-required" }}
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
options={this.searchOptions}
|
||||
onSuggestionSelected={this.onSuggestionSelected}
|
||||
textFieldProps={{ onChange: (e) => this.onChange(e), value: this.state.value, placeholder: 'Ex : Rue de Rivoli, Paris, France', fullWidth: true, size:"small"}}
|
||||
types={['(regions)']}
|
||||
componentRestrictions={{country: 'fr'}}
|
||||
renderTarget={() => (
|
||||
<div
|
||||
style={{
|
||||
|
||||
width: '100%',
|
||||
zIndex:9
|
||||
}}
|
||||
>
|
||||
</div>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* <Input
|
||||
name="geoloc"
|
||||
id="geoloc"
|
||||
label="geoloc"
|
||||
ref="geoloc"
|
||||
onChange={this.handleChange}
|
||||
value={this.state.geoloc =='null' || this.state.geoloc =='' ? '' :this.state.geoloc}
|
||||
/> */}
|
||||
</div>
|
||||
|
||||
<TextField
|
||||
name="phone"
|
||||
id="outlined"
|
||||
@@ -532,6 +737,7 @@ class Answer extends Component {
|
||||
value={this.state.phone}
|
||||
onChange={this.handleChange}
|
||||
type="tel"
|
||||
helperText="Renseignez votre numéro de téléphone pour permettre au recruteur de vous contacter"
|
||||
/>
|
||||
|
||||
<TextField
|
||||
@@ -551,33 +757,33 @@ class Answer extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
value={this.state.currentJob}
|
||||
value={this.state.currentJob =='null' || this.state.currentJob =='' ? '' :this.state.currentJob}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
|
||||
{this.AfficherSuccess()}
|
||||
|
||||
<input
|
||||
type="file"
|
||||
accept=".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document, .pdf, .odt"
|
||||
className={classes.input+' cypButtonImportVid'}
|
||||
style={{ display: 'none' }}
|
||||
id="import-button-file"
|
||||
onChange={this.inputFilesystemChange}
|
||||
/>
|
||||
<label htmlFor="import-button-file">
|
||||
<Button component="span" className={classes.importButton} classes={{ root: classes.rootButton }}>
|
||||
|
||||
|
||||
<GetApp className={classes.icon} /> Importer mon CV
|
||||
|
||||
|
||||
</Button>
|
||||
|
||||
</label>
|
||||
<Hidden> </Hidden>
|
||||
{this.AfficherLienCv()}
|
||||
{this.AfficherSuccess()}
|
||||
<div className={classes.containerImport}>
|
||||
<input
|
||||
type="file"
|
||||
accept=".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document, .pdf, .odt"
|
||||
className={classes.input+' cypButtonImportVid'}
|
||||
style={{ display: 'none' }}
|
||||
id="import-button-file"
|
||||
onChange={this.inputFilesystemChange}
|
||||
/>
|
||||
<label htmlFor="import-button-file">
|
||||
<Button component="span" className={classes.importButton} classes={{ root: classes.rootButton }}>
|
||||
|
||||
|
||||
<GetApp className={classes.icon} /> Importer mon CV
|
||||
|
||||
|
||||
</Button>
|
||||
|
||||
</label>
|
||||
<Hidden> </Hidden>
|
||||
{this.AfficherLienCv()}
|
||||
</div>
|
||||
<TextField
|
||||
name="linkedin"
|
||||
id="outlined"
|
||||
@@ -586,7 +792,7 @@ class Answer extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://www.linkedin.com/in/"
|
||||
value={this.state.linkedin}
|
||||
value={this.state.linkedin =='null' || this.state.linkedin =='' ? '' :this.state.linkedin}
|
||||
onChange={this.handleChange}
|
||||
|
||||
/>
|
||||
@@ -599,7 +805,7 @@ class Answer extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://twitter.com/.."
|
||||
value={this.state.twitter}
|
||||
value={this.state.twitter =='null' || this.state.twitter =='' ? '' :this.state.twitter}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
|
||||
@@ -611,7 +817,7 @@ class Answer extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://monsite.fr"
|
||||
value={this.state.website}
|
||||
value={this.state.website =='null' || this.state.website =='' ? '' :this.state.website}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
|
||||
@@ -628,10 +834,10 @@ function mapStateToProps(state, ownProps) {
|
||||
// console.log(state.media.message.heure);
|
||||
return {
|
||||
user: state.user ,
|
||||
cvLink : state.media.message,
|
||||
cvLink : state.mediaCv.message,
|
||||
loading: !!state.media.loading,
|
||||
cv : true,
|
||||
user: state.user,
|
||||
// user: state.user,
|
||||
// loading: !!state.user.loading,
|
||||
pictureLoading: !!state.user.pictureLoading,
|
||||
errors: state.user.errors || ownProps.errors,
|
||||
|
||||
@@ -139,7 +139,7 @@ class CompanyRowComponent extends React.Component {
|
||||
render() {
|
||||
const { classes, theme, rowData } = this.props;
|
||||
|
||||
const imgDefaultUrl = "/static/images/default/default_picture_company.svg"
|
||||
const imgDefaultUrl = "https://blog.talentstube.com/wp-content/uploads/2021/01/default_picture_company.jpg"
|
||||
|
||||
const imgUrl = (rowData.presentation_video && rowData.presentation_video.thumbnails[0] && rowData.presentation_video.thumbnails[0].sizes[4]) ? rowData.presentation_video.thumbnails[0].sizes[4].link : imgDefaultUrl
|
||||
const logoUrl = publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + rowData.logo
|
||||
|
||||
@@ -59,7 +59,7 @@ const styles = theme => ({
|
||||
titleContainer: {
|
||||
color: theme.palette.primary.darkMain,
|
||||
fontSize: '1.5em',
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontWeight: '600',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
fontSize: '1.2em',
|
||||
@@ -113,7 +113,7 @@ const styles = theme => ({
|
||||
},
|
||||
},
|
||||
titleReactApp: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
paddingTop: theme.spacing(4),
|
||||
|
||||
@@ -0,0 +1,246 @@
|
||||
import Link from 'next/link'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import { Typography } from '@material-ui/core';
|
||||
import { Fragment } from 'react';
|
||||
import NewsLetterRegistration from './NewsLetterRegistration'
|
||||
import dynamic from 'next/dynamic'
|
||||
import Button from '@material-ui/core/Button'
|
||||
import getConfig from 'next/config'
|
||||
const { publicRuntimeConfig } = getConfig();
|
||||
|
||||
const styles = theme => ({
|
||||
root: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
backgroundColor: "#1E2327",
|
||||
[theme.breakpoints.up('md')]: {
|
||||
display: 'flex',
|
||||
flexDirection: 'row',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'space-around',
|
||||
backgroundColor: "#1E2327",
|
||||
padding: theme.spacing(10, 18),
|
||||
},
|
||||
'& a': {
|
||||
textDecoration: 'none',
|
||||
color:"#fff"
|
||||
},
|
||||
},
|
||||
container: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'flex-start',
|
||||
padding: theme.spacing(0, 5),
|
||||
paddingBottom: theme.spacing(3.5),
|
||||
'&:first-child': {
|
||||
paddingTop: theme.spacing(4),
|
||||
},
|
||||
[theme.breakpoints.up('md')]: {
|
||||
padding: 0,
|
||||
'&:first-child': {
|
||||
paddingTop: 0,
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
containerRegion: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
backgroundColor: theme.palette.secondary.main,
|
||||
padding: theme.spacing(3),
|
||||
[theme.breakpoints.up('md')]: {
|
||||
padding: theme.spacing(8, 0),
|
||||
},
|
||||
|
||||
},
|
||||
titleContainer: {
|
||||
color: "#fff",
|
||||
fontSize: '1.5em',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontWeight: '600',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
fontSize: '1.2em',
|
||||
paddingBottom: theme.spacing(2),
|
||||
},
|
||||
},
|
||||
textContainer: {
|
||||
fontWeight: '300',
|
||||
fontSize: '0.9em',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
fontWeight: '300',
|
||||
fontSize: '0.8em',
|
||||
},
|
||||
},
|
||||
textContainerRegion: {
|
||||
fontWeight: '300',
|
||||
fontSize: '0.9em',
|
||||
color: theme.palette.primary.dark,
|
||||
},
|
||||
footerLogo: {
|
||||
width: '15vw',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
width: '4vw',
|
||||
},
|
||||
},
|
||||
footerLogoTT: {
|
||||
width: '70%',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
paddingBottom: theme.spacing(1),
|
||||
width: '100%'
|
||||
},
|
||||
},
|
||||
containerReactApp: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
height: 'auto',
|
||||
paddingTop: theme.spacing(4),
|
||||
backgroundColor: "#000",
|
||||
[theme.breakpoints.down('xs')]: {
|
||||
height: '100vh',
|
||||
},
|
||||
[theme.breakpoints.up('md')]: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-around',
|
||||
height: '35vh',
|
||||
padding: theme.spacing(6, 1),
|
||||
position: 'relative',
|
||||
},
|
||||
},
|
||||
titleReactApp: {
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
paddingTop: theme.spacing(4),
|
||||
paddingLeft: theme.spacing(4),
|
||||
paddingRight: theme.spacing(4),
|
||||
[theme.breakpoints.up('md')]: {
|
||||
order: 1,
|
||||
width: '20%',
|
||||
textAlign: 'left',
|
||||
},
|
||||
},
|
||||
buttonReactApp: {
|
||||
textTransform: 'inherit',
|
||||
margin: theme.spacing(0, 8),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
[theme.breakpoints.up('md')]: {
|
||||
order: 3,
|
||||
margin: 'inherit',
|
||||
marginRight: '5vw',
|
||||
},
|
||||
},
|
||||
imageReactApp: {
|
||||
width: '100%',
|
||||
[theme.breakpoints.up('sm')]: {
|
||||
width: 'auto',
|
||||
},
|
||||
[theme.breakpoints.up('md')]: {
|
||||
width: '25%',
|
||||
order: 2,
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
},
|
||||
},
|
||||
containerNewsletter: {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
padding: theme.spacing(6, 4),
|
||||
},
|
||||
version:{
|
||||
marginTop: '15px',
|
||||
fontSize: '0.7em',
|
||||
fontWeight: '300',
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
function Footer(props) {
|
||||
const { classes } = props;
|
||||
return (
|
||||
<div>
|
||||
|
||||
|
||||
<section className={classes.containerNewsletter}>
|
||||
<NewsLetterRegistration />
|
||||
</section>
|
||||
|
||||
<div className={classes.root}>
|
||||
<section className={classes.container}>
|
||||
<img alt="talents-tube" src='/static/images/logos/TalentsTube_logo-blanc.svg' className={classes.footerLogoTT} />
|
||||
|
||||
</section>
|
||||
<section className={classes.container}>
|
||||
<Typography color="secondary" component="p" className={classes.titleContainer}>
|
||||
Informations
|
||||
</Typography>
|
||||
|
||||
<Link href="/Cgu" >
|
||||
<a>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
CGU
|
||||
</Typography>
|
||||
</a>
|
||||
</Link>
|
||||
|
||||
<Link href="/MentionsLegales" >
|
||||
<a>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
Mentions légales
|
||||
</Typography>
|
||||
</a>
|
||||
</Link>
|
||||
<Link href="/Confidentialite" >
|
||||
<a>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
Politique de confidentialité et Protection <br />des données
|
||||
</Typography>
|
||||
</a>
|
||||
</Link>
|
||||
<Link href="" >
|
||||
<a href="https://blog.talentstube.com/contact" target="_blank">
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
Contact
|
||||
</Typography>
|
||||
</a>
|
||||
</Link>
|
||||
</section>
|
||||
<section className={classes.container}>
|
||||
<Typography color="secondary" component="p" className={classes.titleContainer}>
|
||||
Rencontrons-nous
|
||||
</Typography>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
3, rue Louis de Broglie
|
||||
</Typography>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
56 000 Vannes
|
||||
</Typography>
|
||||
<Typography gutterBottom component="p" className={classes.textContainer}>
|
||||
<a href="tel:+33230050631" >02.30.05.06.31 </a>
|
||||
</Typography>
|
||||
{/* <Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
contact@talentstube.com
|
||||
</Typography> */}
|
||||
</section>
|
||||
|
||||
</div>
|
||||
<section className={classes.containerRegion}>
|
||||
<Typography gutterBottom component="p" className={classes.textContainerRegion} align="center" >
|
||||
Entreprise soutenue par
|
||||
</Typography>
|
||||
<a href="https://www.bretagne.bzh/" target="_blank" className={classes.darkMenuItem} rel="noopener">
|
||||
<img alt="Région Bretagne" src='/static/images/logos/Logo-region.svg' className={classes.footerLogo} />
|
||||
</a>
|
||||
<Typography className={classes.version} align="center" >
|
||||
{publicRuntimeConfig.version}
|
||||
</Typography>
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default withStyles(styles)(Footer)
|
||||
@@ -225,6 +225,9 @@ const styles = theme => ({
|
||||
justifyContent: 'space-between',
|
||||
padding: 0,
|
||||
},
|
||||
appBar:{
|
||||
position:'fixed'
|
||||
},
|
||||
appBarDesktopSection: {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
|
||||
@@ -28,7 +28,7 @@ import ArrowForward from '@material-ui/icons/ArrowForward';
|
||||
import List from '@material-ui/core/List';
|
||||
import ListItem from '@material-ui/core/ListItem';
|
||||
import { ListItemText } from '@material-ui/core';
|
||||
import Loader from './../templates/loader'
|
||||
import Loader from '../templates/loader'
|
||||
import { connect } from 'react-redux'
|
||||
import { fetchCurrentUserRequest } from "../../actions/user";
|
||||
import { requestLogout } from "../../actions/auth";
|
||||
@@ -36,7 +36,7 @@ import Button from '@material-ui/core/Button';
|
||||
import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import { withRouter } from "next/router";
|
||||
import ActiveLink from "./../atoms/Activelink";
|
||||
import ActiveLink from "../atoms/Activelink";
|
||||
import axios from 'axios';
|
||||
import setAuthorizationHeader from "../../data/setAuthorizationHeader";
|
||||
import getConfig from 'next/config'
|
||||
@@ -302,7 +302,7 @@ const styles = theme => ({
|
||||
});
|
||||
let urlEnv;
|
||||
|
||||
class Header extends React.Component {
|
||||
class HeaderPersonnalise extends React.Component {
|
||||
state = {
|
||||
top: false,
|
||||
left: false,
|
||||
@@ -597,7 +597,7 @@ class Header extends React.Component {
|
||||
focusRipple
|
||||
className={classes.back}
|
||||
focusVisibleClassName={classes.focusVisible}
|
||||
onClick={() => Router.push("/Offres")}>
|
||||
onClick={() => Router.push("/"+this.props.retour)}>
|
||||
<ArrowLeft color="primary" classes={{ root: classes.icon }}></ArrowLeft>
|
||||
</ButtonBase>
|
||||
<div className={classes.grow} />
|
||||
@@ -631,4 +631,4 @@ function mapStateToProps(state) {
|
||||
loading: !!state.user.loading
|
||||
};
|
||||
}
|
||||
export default (connect(mapStateToProps, { fetchCurrentUserRequest, requestLogout })(withStyles(styles)(withWidth()(Header))));
|
||||
export default (connect(mapStateToProps, { fetchCurrentUserRequest, requestLogout })(withStyles(styles)(withWidth()(HeaderPersonnalise))));
|
||||
@@ -1,32 +1,21 @@
|
||||
import React, { Fragment,lazy, Suspense } from 'react'
|
||||
import Router from 'next/router'
|
||||
import React, { Fragment } from 'react'
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import getConfig from 'next/config'
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import Button from '@material-ui/core/Button';
|
||||
import Avatar from '@material-ui/core/Avatar';
|
||||
import Card from '@material-ui/core/Card';
|
||||
import Chip from '@material-ui/core/Chip';
|
||||
import CardContent from '@material-ui/core/CardContent';
|
||||
import CardMedia from '@material-ui/core/CardMedia';
|
||||
import CardHeader from '@material-ui/core/CardHeader';
|
||||
import KeyboardArrowleftIcon from '@material-ui/icons/PlayArrowRounded';
|
||||
import IconText from '../atoms/IconText';
|
||||
import IconTextInline from './../atoms/IconTextInline';
|
||||
import SocialShare from './SocialShare';
|
||||
import SimpleCollapse from '../atoms/SimpleCollapse';
|
||||
import _ from "lodash/string";
|
||||
import Ar from "lodash/array";
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import Link from 'next/link'
|
||||
import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
const VideoVimeo = lazy(() => import('../atoms/VideoVimeo'));
|
||||
//import VideoVimeo from '../atoms/VideoVimeo'
|
||||
import OgHead from '../atoms/OgHead'
|
||||
import { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import JobPosting from '../atoms/JobPosting'
|
||||
import Moment from 'react-moment';
|
||||
import StickyBox from "react-sticky-box";
|
||||
const renderLoader = () => <p>Chargement</p>;
|
||||
const styles = theme => ({
|
||||
primary: {
|
||||
color: theme.palette.primary.main,
|
||||
@@ -343,7 +332,7 @@ const styles = theme => ({
|
||||
padding: theme.spacing(1, 0),
|
||||
whiteSpace: 'pre-line',
|
||||
textAlign: 'justify',
|
||||
lineHeight : '2em',
|
||||
lineHeight : '1.5em',
|
||||
color: '#1E2327'
|
||||
},
|
||||
ul:{
|
||||
@@ -677,28 +666,18 @@ const { publicRuntimeConfig } = getConfig()
|
||||
|
||||
function OffreDetail(props) {
|
||||
let { classes, offre, isCandidature } = props;
|
||||
const logoUrl = (offre.company ? publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + offre.company.logo : "/static/images/defaultdefault_picture_company.svg/")
|
||||
const DefaultUrl = "/static/images/default/default_picture_company.svg"
|
||||
const imgUrl = (offre.company && offre.company.presentation_video && offre.company.presentation_video.thumbnails && offre.company.presentation_video.thumbnails[0] && offre.company.presentation_video.thumbnails[0].sizes[2]) ? offre.company.presentation_video.thumbnails[0].sizes[2].link : DefaultUrl
|
||||
const imgUrlDesktop = (offre.company && offre.company.presentation_video && offre.company.presentation_video.thumbnails && offre.company.presentation_video.thumbnails[0] && offre.company.presentation_video.thumbnails[0].sizes[4]) ? offre.company.presentation_video.thumbnails[0].sizes[4].link : DefaultUrl
|
||||
const imgUrlOffre = (offre && offre.video && offre.video.thumbnails && offre.video.thumbnails[0] && offre.video.thumbnails[0].sizes[2]) ? offre.video.thumbnails[0].sizes[2].link : DefaultUrl
|
||||
const imgUrlDesktopOffre = (offre && offre.video && offre.video.thumbnails && offre.video.thumbnails[0] && offre.video.thumbnails[0].sizes[4]) ? offre.video.thumbnails[0].sizes[4].link : DefaultUrl
|
||||
const imgUrlTerritoire = (offre.territories && offre.territories[0] && offre.territories[0].territory && offre.territories[0].territory.presentation_video.thumbnails && offre.territories[0].territory.presentation_video.thumbnails[0] && offre.territories[0].territory.presentation_video.thumbnails[0].sizes[2]) ? offre.territories[0].territory.presentation_video.thumbnails[0].sizes[2].link : DefaultUrl
|
||||
const imgUrlDesktopTerritoire = (offre.territories && offre.territories[0] && offre.territories[0].territory.presentation_video && offre.territories[0].territory.presentation_video.thumbnails && offre.territories[0].territory.presentation_video.thumbnails[0] && offre.territories[0].territory.presentation_video.thumbnails[0].sizes[4]) ? offre.territories[0].territory.presentation_video.thumbnails[0].sizes[4].link : DefaultUrl
|
||||
const logoUrl = (offre.company ? publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + offre.company.logo : "https://blog.talentstube.com/wp-content/uploads/2021/01/default_picture_company.jpg")
|
||||
const DefaultUrl = "https://blog.talentstube.com/wp-content/uploads/2021/01/default_picture_company.jpg"
|
||||
const imgUrl = (offre.company && offre.company.presentation_video && offre.company.presentation_video.thumbnails && offre.company.presentation_video.thumbnails[0] && offre.company.presentation_video.thumbnails[0].sizes[3]) ? offre.company.presentation_video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlDesktop = (offre.company && offre.company.presentation_video && offre.company.presentation_video.thumbnails && offre.company.presentation_video.thumbnails[0] && offre.company.presentation_video.thumbnails[0].sizes[3]) ? offre.company.presentation_video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlOffre = (offre && offre.video && offre.video.thumbnails && offre.video.thumbnails[0] && offre.video.thumbnails[0].sizes[3]) ? offre.video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlDesktopOffre = (offre && offre.video && offre.video.thumbnails && offre.video.thumbnails[0] && offre.video.thumbnails[0].sizes[3]) ? offre.video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlTerritoire = (offre.territories && offre.territories[0] && offre.territories[0].territory && offre.territories[0].territory.presentation_video.thumbnails && offre.territories[0].territory.presentation_video.thumbnails[0] && offre.territories[0].territory.presentation_video.thumbnails[0].sizes[3]) ? offre.territories[0].territory.presentation_video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlDesktopTerritoire = (offre.territories && offre.territories[0] && offre.territories[0].territory.presentation_video && offre.territories[0].territory.presentation_video.thumbnails && offre.territories[0].territory.presentation_video.thumbnails[0] && offre.territories[0].territory.presentation_video.thumbnails[0].sizes[3]) ? offre.territories[0].territory.presentation_video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location : publicRuntimeConfig.frontServerUrl + `/Offre/${offre.id}-${_.kebabCase(offre.title)}`;
|
||||
const entrepriseLink = (offre.company && `/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}`);
|
||||
const territoryVideoUrlTab = (offre.territories && offre.territories[0] && offre.territories[0].territory) ? offre.territories[0].territory.presentation_video.cdn_url.split('/') : '';
|
||||
const territoryVideoId = territoryVideoUrlTab[2]
|
||||
let descriptionSEO = ""
|
||||
let titleSEO = ""
|
||||
offre.company.brand_name ? descriptionSEO += offre.company.brand_name : ""
|
||||
descriptionSEO += " recrute en vidéo un(e) "+offre.title
|
||||
titleSEO = "Offre d'emploi vidéo "+offre.title
|
||||
offre.location.gmap_address.formatted_address ? descriptionSEO += ", "+offre.location.gmap_address.formatted_address : ""
|
||||
offre.location.gmap_address.formatted_address ? titleSEO += ", "+offre.location.gmap_address.formatted_address : ""
|
||||
offre.company.brand_name ? titleSEO += " - "+offre.company.brand_name : ""
|
||||
descriptionSEO += ". Envoyez votre candidature en vidéo. "
|
||||
titleSEO += " | Talents Tube "
|
||||
let jobVille=""
|
||||
let jobDpt=""
|
||||
let jobPays=""
|
||||
@@ -708,12 +687,12 @@ function OffreDetail(props) {
|
||||
let nombreHeure =""
|
||||
let dureeContrat =""
|
||||
let teletravail =""
|
||||
offre.location.gmap_address.address_components[0] ? jobVille = offre.location.gmap_address.address_components[0].long_name: jobVille=""
|
||||
offre.location.gmap_address.address_components[1] ? jobDpt = offre.location.gmap_address.address_components[1].long_name: jobDpt=""
|
||||
offre.location.gmap_address.address_components[3] ? jobPays = offre.location.gmap_address.address_components[3].long_name: jobPays=""
|
||||
offre.location && offre.location.gmap_address.address_components[0] ? jobVille = offre.location.gmap_address.address_components[0].long_name: jobVille=""
|
||||
offre.location && offre.location.gmap_address.address_components[1] ? jobDpt = offre.location.gmap_address.address_components[1].long_name: jobDpt=""
|
||||
offre.location && offre.location.gmap_address.address_components[3] ? jobPays = offre.location.gmap_address.address_components[3].long_name: jobPays=""
|
||||
// offre.location.gmap_address ? jobAdr = location.gmap_address.adr_address: jobAdr=""
|
||||
offre.extra.contract_type ? jobContract = offre.extra.contract_type : jobContract =""
|
||||
offre.extra.temps_type ? tempsType = offre.extra.temps_type : tempsType =""
|
||||
offre.extra && offre.extra.contract_type ? jobContract = offre.extra.contract_type : jobContract =""
|
||||
offre.extra && offre.extra.temps_type ? tempsType = offre.extra.temps_type : tempsType =""
|
||||
console.log("competences!!");
|
||||
//console.log(offre.competences);
|
||||
var competences = [];
|
||||
@@ -721,8 +700,8 @@ function OffreDetail(props) {
|
||||
if(offre.competences){
|
||||
for (var i = 0; i < offre.competences.length; i++) {
|
||||
//console.log(offre.competences[i]);
|
||||
console.log("competences "+i);
|
||||
console.log(offre.competences[i]);
|
||||
// console.log("competences "+i);
|
||||
// console.log(offre.competences[i]);
|
||||
|
||||
for (const property in offre.competences[i]) {
|
||||
console.log(` ${offre.competences[i][property]}`);
|
||||
@@ -734,7 +713,7 @@ function OffreDetail(props) {
|
||||
const listItems = competences.map((number) =>
|
||||
<li className={classes.listeCompetences}>{number}</li>
|
||||
);
|
||||
offre.extra.teletravail ? teletravail = offre.extra.teletravail : teletravail =""
|
||||
offre.extra && offre.extra.teletravail ? teletravail = offre.extra.teletravail : teletravail =""
|
||||
//gestion du type de temps de travail
|
||||
if(tempsType=="PART_TIME"){
|
||||
tempsTypeFr="Temps partiel"
|
||||
@@ -744,27 +723,27 @@ function OffreDetail(props) {
|
||||
|
||||
}
|
||||
//gestion du nombre d'heure
|
||||
if(offre.extra.nombre_heure && offre.extra.nombre_heure!=0 && tempsType=="PART_TIME"){
|
||||
if(offre.extra && offre.extra.nombre_heure && offre.extra.nombre_heure!=0 && tempsType=="PART_TIME"){
|
||||
nombreHeure=" ("+offre.extra.nombre_heure+" h/semaine)";
|
||||
}
|
||||
//gestion de la duree de contrat
|
||||
if(offre.extra.duree_contrat && offre.extra.duree_contrat!=0 && jobContract=="CDD"){
|
||||
if(offre.extra && offre.extra.duree_contrat && offre.extra.duree_contrat!=0 && jobContract=="CDD"){
|
||||
dureeContrat=" ("+offre.extra.duree_contrat+" mois)";;
|
||||
}
|
||||
//gestion du télétravail
|
||||
if(offre.extra.teletravail=='tele_occasionel'){
|
||||
if(offre.extra && offre.extra.teletravail=='tele_occasionel'){
|
||||
teletravail='Télétravail occasionnel';
|
||||
}else if(offre.extra.teletravail=='tele_partiel'){
|
||||
}else if(offre.extra && offre.extra.teletravail=='tele_partiel'){
|
||||
teletravail='Télétravail partiel';
|
||||
}else if(offre.extra.teletravail=='tele_total'){
|
||||
}else if(offre.extra && offre.extra.teletravail=='tele_total'){
|
||||
teletravail='Télétravail total';
|
||||
}else{
|
||||
teletravail=null;
|
||||
}
|
||||
|
||||
const imgDefaultUrl = "/static/images/default/default_picture_company.svg"
|
||||
const imgDefaultUrl = "https://blog.talentstube.com/wp-content/uploads/2021/01/default_picture_company.jpg"
|
||||
{/* CONST MARQUE EMPLOYEUR */}
|
||||
const marqueEmployeur = offre.company.presentation_video && !offre.is_promoted && (
|
||||
const marqueEmployeur = offre.company && offre.company.presentation_video && !offre.is_promoted && (
|
||||
<div className={classes.container + ' ' + classes.discoverContainerCompany}>
|
||||
<section>
|
||||
|
||||
@@ -772,7 +751,7 @@ function OffreDetail(props) {
|
||||
{/* <a href={entrepriseLink}> */}
|
||||
{/* const entrepriseLink = (offre.company && `/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}`); */}
|
||||
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.company.presentation_video.cdn_url, '/'))}&type=Entreprise`} >
|
||||
<Link href={`/Player?id=${offre.company.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.company.presentation_video.cdn_url, '/'))}&typeEntite=Entreprise&nameCompany=${offre.company.brand_name}&nameOffre=`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktop : imgUrl} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
<Typography variant="h3" component="h3" gutterBottom className={ classes.voirEntreprise} align="center">
|
||||
@@ -822,23 +801,19 @@ function OffreDetail(props) {
|
||||
{/* {offre.public_tag.map((label, index) => {
|
||||
descriptionSEO += label+", "
|
||||
})} */}
|
||||
{/* PARTIE REFERECEMENT GENERAL (FACEBOOK, GOOGLE, TWITTER LINKENDIN) */}
|
||||
<OgHead seo_title={titleSEO}
|
||||
seo_description={descriptionSEO}
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrlDesktop}
|
||||
></OgHead>
|
||||
{/* PARTIE REFERENCEMENT GENERAL (FACEBOOK, GOOGLE, TWITTER LINKENDIN) */}
|
||||
|
||||
{/* PARTIE REFERENCEMENT GOOGLE JOBS */}
|
||||
<JobPosting job_title={offre.title}
|
||||
job_description={offre.description}
|
||||
job_brand= {offre.company.brand_name && offre.company.brand_name}
|
||||
job_brand= {offre.company && offre.company.brand_name && offre.company.brand_name}
|
||||
job_brand_link= {entrepriseLink}
|
||||
job_title = {offre.title}
|
||||
job_location = {offre.location.gmap_address.formatted_address}
|
||||
job_location = {offre.location && offre.location.gmap_address.formatted_address}
|
||||
job_ville = {jobVille}
|
||||
job_dept = {jobDpt}
|
||||
job_pays = {jobPays}
|
||||
job_adr = {offre.location.gmap_address.formatted_address}
|
||||
job_adr = {offre.location && offre.location.gmap_address.formatted_address}
|
||||
job_date = {offre.published_at}
|
||||
job_date_fin = {offre.unpublished_at}
|
||||
job_temps_type= {tempsType}
|
||||
@@ -853,16 +828,16 @@ function OffreDetail(props) {
|
||||
{offre.video && (
|
||||
|
||||
<Fragment>
|
||||
<Suspense fallback={renderLoader()}>
|
||||
|
||||
{/* <VideoVimeo {...isCandidature == 'true' ? 'classes={{ video: classes.videoOffre }}' : ''} videoId={Ar.last(_.split(offre.video.cdn_url, '/'))} autoplay='1' /> */}
|
||||
<div className={classes.contentContainer}>
|
||||
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.video.cdn_url, '/'))}&type=Offre`} >
|
||||
<Link href={`/Player?id=${offre.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.video.cdn_url, '/'))}&typeEntite=Offre&nameCompany=${offre.company && offre.company.brand_name}&nameOffre=${offre.title}`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktopOffre : imgUrlOffre} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
<div className={classes.containerPoste}>
|
||||
|
||||
<Typography variant="h1" component="h1" gutterBottom className={classes.poste}>
|
||||
<Typography variant="h4" component="h1" gutterBottom className={classes.poste}>
|
||||
{offre.title} <br></br>
|
||||
<span className={classes.posteEntreprise}>{offre.company.brand_name ? offre.company.brand_name : ""}</span>
|
||||
</Typography>
|
||||
@@ -875,7 +850,7 @@ function OffreDetail(props) {
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</Suspense>
|
||||
|
||||
<div className={classes.container}>
|
||||
|
||||
|
||||
@@ -905,7 +880,7 @@ function OffreDetail(props) {
|
||||
{/* <a href={entrepriseLink}> */}
|
||||
{/* const entrepriseLink = (offre.company && `/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}`); */}
|
||||
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.company.presentation_video.cdn_url, '/'))}&type=Entreprise`} >
|
||||
<Link href={`/Player?id=${offre.company.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.company.presentation_video.cdn_url, '/'))}&typeEntite=Entreprise&nameCompany=${offre.company.brand_name}&nameOffre=`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktop : imgUrl} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
<Typography variant="h3" component="h3" gutterBottom className={ classes.voirEntreprise} align="center">
|
||||
@@ -925,7 +900,7 @@ function OffreDetail(props) {
|
||||
{offre.territories && territoryVideoId && (
|
||||
<div className={classes.container + ' ' + classes.discoverContainerTerritory}>
|
||||
<section>
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${territoryVideoId}&type=Territoire`} >
|
||||
<Link href={`/Player?id=${offre.territories[0].territory.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${territoryVideoId}&typeEntite=Territoire&nameCompany=${offre.territories[0].territory.brand_name}&nameOffre=`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktopTerritoire : imgUrlTerritoire} alt={(!!!offre.territories) ? offre.territories[0].territory.brand_name : ''} />
|
||||
<Typography variant="h3" component="h3" gutterBottom className={classes.title + ' ' + classes.voirTerritoire} align="center">
|
||||
@@ -950,23 +925,23 @@ function OffreDetail(props) {
|
||||
<section className={classes.stickyContainer}>
|
||||
<a href={entrepriseLink} className={classes.lien}>
|
||||
<Avatar className={classes.logo} classes={{ img: classes.MuiAvatarImg }}
|
||||
src={logoUrl} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
src={logoUrl} alt={offre.company && offre.company.brand_name && offre.company.brand_name} />
|
||||
</a>
|
||||
<Typography variant="h4" component="h4" className={classes.stickyTitle}>
|
||||
{offre.title}
|
||||
</Typography>
|
||||
<a href={entrepriseLink} className={classes.lien}>
|
||||
<Typography variant="h5" component="h5" className={classes.stickyEntreprise}>
|
||||
{offre.company.brand_name && offre.company.brand_name}
|
||||
{offre.company && offre.company.brand_name && offre.company.brand_name}
|
||||
</Typography>
|
||||
</a>
|
||||
</section>
|
||||
|
||||
<section className={classes.IconTextContainerDesktop}>
|
||||
|
||||
<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="assignment" text={offre.extra.contract_type+dureeContrat} />
|
||||
<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="assignment" text={offre.extra && offre.extra.contract_type+dureeContrat} />
|
||||
{tempsTypeFr ?<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="watch_later" text={tempsTypeFr+nombreHeure } />:""}
|
||||
<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={offre.location.gmap_address.formatted_address} />
|
||||
<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={offre.location && offre.location.gmap_address.formatted_address} />
|
||||
{teletravail && (<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="home" text={teletravail} /> )}
|
||||
{offre.beneficiaire && (<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="business" text={offre.beneficiaire} /> )}
|
||||
</section>
|
||||
@@ -979,9 +954,9 @@ function OffreDetail(props) {
|
||||
<Button
|
||||
cyp="ButtonApply"
|
||||
variant="contained"
|
||||
className={classes.button}
|
||||
|
||||
>Postuler </Button>
|
||||
className={classes.button}>
|
||||
Postuler
|
||||
</Button>
|
||||
</a>
|
||||
|
||||
|
||||
@@ -1011,14 +986,14 @@ function OffreDetail(props) {
|
||||
<Hidden mdUp>
|
||||
<section className={classes.contentContainerMobile}>
|
||||
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.video.cdn_url, '/'))}&type=Offre`} >
|
||||
<Link href={`/Player?id=${offre.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.video && offre.video.cdn_url, '/'))}&typeEntite=Offre&nameCompany=${offre.company && offre.company.brand_name}&nameOffre=${offre.title}`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('xs', props.width) ? imgUrlDesktopOffre : imgUrlOffre} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
<img src={isWidthUp('xs', props.width) ? imgUrlDesktopOffre : imgUrlOffre} alt={offre.company && offre.company.brand_name && offre.company.brand_name} />
|
||||
<div >
|
||||
|
||||
<Typography variant="h1" component="h1" gutterBottom className={classes.posteMobile}>
|
||||
{offre.title} <br></br>
|
||||
<span className={classes.posteEntreprise}>{offre.company.brand_name ? offre.company.brand_name : ""}</span>
|
||||
<span className={classes.posteEntreprise}>{offre.company && offre.company.brand_name ? offre.company.brand_name : ""}</span>
|
||||
</Typography>
|
||||
|
||||
</div>
|
||||
@@ -1044,7 +1019,7 @@ function OffreDetail(props) {
|
||||
</Typography>
|
||||
<a href={entrepriseLink} className={classes.lien}>
|
||||
<Typography gutterBottom variant="subtitle1" className={classes.text}>
|
||||
{offre.company.brand_name && offre.company.brand_name}
|
||||
{offre.company && offre.company.brand_name && offre.company.brand_name}
|
||||
</Typography>
|
||||
</a>
|
||||
{/* ville */}
|
||||
@@ -1067,7 +1042,7 @@ function OffreDetail(props) {
|
||||
</section>
|
||||
<section>
|
||||
{/* PARTIE MARQUE EMPLOYEUR MOBILE*/}
|
||||
{offre.company.presentation_video && !offre.is_promoted && (
|
||||
{offre.company && offre.company.presentation_video && !offre.is_promoted && (
|
||||
<div className={classes.container + ' ' + classes.discoverContainerCompany}>
|
||||
<section>
|
||||
|
||||
@@ -1075,7 +1050,7 @@ function OffreDetail(props) {
|
||||
{/* <a href={entrepriseLink}> */}
|
||||
{/* const entrepriseLink = (offre.company && `/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}`); */}
|
||||
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.company.presentation_video.cdn_url, '/'))}&type=Entreprise`} >
|
||||
<Link href={`/Player?id=${offre.company.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${Ar.last(_.split(offre.company.presentation_video.cdn_url, '/'))}&typeEntite=Entreprise&nameCompany=${offre.company.brand_name}&nameOffre=`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('xs', props.width) ? imgUrlDesktop : imgUrl} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
<Typography variant="h3" component="h3" gutterBottom className={ classes.voirEntrepriseMobile} align="center">
|
||||
@@ -1095,7 +1070,7 @@ function OffreDetail(props) {
|
||||
{offre.territories && territoryVideoId && (
|
||||
<div className={classes.container + ' ' + classes.discoverContainerTerritory}>
|
||||
<section>
|
||||
<Link href={`/Player?id=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${territoryVideoId}&type=Territoire`} >
|
||||
<Link href={`/Player?id=${offre.territories[0].territory.id}&url=/Offre/${offre.id}-${_.kebabCase(offre.title)}&videoId=${territoryVideoId}&typeEntite=Territoire&nameCompany=${offre.territories[0].territory.brand_name}&nameOffre=${offre.title}`} >
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktopTerritoire : imgUrlTerritoire} alt={(!!!offre.territories) ? offre.territories[0].territory.brand_name : ''} />
|
||||
<Typography variant="h3" component="h3" gutterBottom className={classes.title + ' ' + classes.voirTerritoireMobile} align="center">
|
||||
@@ -1116,4 +1091,4 @@ function OffreDetail(props) {
|
||||
</Fragment>
|
||||
)
|
||||
}
|
||||
export default withStyles(styles)(withWidth()(OffreDetail));
|
||||
export default withStyles(styles)(OffreDetail);
|
||||
@@ -42,7 +42,7 @@ const styles = theme => ({
|
||||
},
|
||||
margin: '1vh 2vh 1vh 2vh',
|
||||
[theme.breakpoints.up('sm')]: {
|
||||
margin: '1vh 0 1vh 0',
|
||||
margin: '2vh 0 2vh 0',
|
||||
},
|
||||
},
|
||||
detailsContainer: {
|
||||
|
||||
@@ -22,8 +22,8 @@ const styles = theme => ({
|
||||
},
|
||||
askToInstallText: {
|
||||
fontSize: '1.4em',
|
||||
fontWeight: '500',
|
||||
fontFamily: 'Dosis',
|
||||
fontWeight: '600',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
},
|
||||
installApp: {
|
||||
width: '100%',
|
||||
|
||||
@@ -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,14 +251,13 @@ 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}
|
||||
/>
|
||||
|
||||
|
||||
<TextField
|
||||
className={clsx(classes.margin, classes.textField)}
|
||||
label="Password"
|
||||
label="Mot de passe"
|
||||
name="password"
|
||||
id="adornment-password"
|
||||
variant="outlined"
|
||||
@@ -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,
|
||||
|
||||
@@ -95,11 +95,11 @@ export default function SocialShare(props) {
|
||||
<a href={"http://twitter.com/share?url=" + encodeURIComponent(props.url)} target="_blank">
|
||||
<Icon className={clsx(classes.icon, classes.TwitterIcon, 'fab fa-twitter')} color="secondary" />
|
||||
</a>
|
||||
<a href={"https://www.linkedin.com/shareArticle?mini=true&url=" + encodeURIComponent(props.url + "&title=Talent's Tube")} target="_blank">
|
||||
<a href={"https://www.linkedin.com/shareArticle?mini=true&url=" + encodeURIComponent(props.url + "&title=Talents Tube")} target="_blank">
|
||||
<Icon className={clsx(classes.icon, classes.LinkedinIcon, 'fab fa-linkedin-in')} color="secondary" />
|
||||
</a>
|
||||
{/* change because of https://github.com/zeit/next.js/blob/master/errors/invalid-href-passed.md */}
|
||||
<a href={"mailto:?subject=Offre d'emploi Talent's Tube&body=Regardez cette offre : " + props.url} target="_blank"s>
|
||||
<a href={"mailto:?subject=Offre d'emploi Talents Tube&body=Regardez cette offre : " + props.url} target="_blank"s>
|
||||
<Icon className={clsx(classes.icon, classes.MailIcon, 'fas fa-envelope')} color="secondary" />
|
||||
</a>
|
||||
</Hidden>
|
||||
@@ -110,11 +110,11 @@ export default function SocialShare(props) {
|
||||
<a href={"http://twitter.com/share?url=" + encodeURIComponent(props.url)} target="_blank">
|
||||
<Icon className={clsx(classes.icon, classes.TwitterIconMobile, 'fab fa-twitter')} color="secondary" />
|
||||
</a>
|
||||
<a href={"https://www.linkedin.com/shareArticle?mini=true&url=" + encodeURIComponent(props.url + "&title=Talent's Tube")} target="_blank">
|
||||
<a href={"https://www.linkedin.com/shareArticle?mini=true&url=" + encodeURIComponent(props.url + "&title=Talents Tube")} target="_blank">
|
||||
<Icon className={clsx(classes.icon, classes.LinkedinIconMobile, 'fab fa-linkedin-in')} color="secondary" />
|
||||
</a>
|
||||
{/* change because of https://github.com/zeit/next.js/blob/master/errors/invalid-href-passed.md */}
|
||||
<a href={"mailto:?subject=Offre d'emploi Talent's Tube&body=Regardez cette offre : " + props.url} target="_blank"s>
|
||||
<a href={"mailto:?subject=Offre d'emploi Talents Tube&body=Regardez cette offre : " + props.url} target="_blank"s>
|
||||
<Icon className={clsx(classes.icon, classes.MailIconMobile, 'fas fa-envelope')} color="secondary" />
|
||||
</a>
|
||||
</Hidden>
|
||||
|
||||
@@ -213,7 +213,7 @@ class Grid extends Component {
|
||||
NextButton: {
|
||||
fontSize: '0.9em',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
textTransform: 'inherit',
|
||||
marginLeft: '64px',
|
||||
marginRight: '64px',
|
||||
@@ -229,7 +229,7 @@ class Grid extends Component {
|
||||
PreviousButton: {
|
||||
fontSize: '0.9em',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
textTransform: 'inherit',
|
||||
marginLeft: '64px',
|
||||
marginRight: '64px',
|
||||
@@ -245,7 +245,7 @@ class Grid extends Component {
|
||||
PageDropdown: {
|
||||
fontSize: '0.9em',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
// display: 'none',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
import React, { Component, useEffect } from 'react'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import Router from 'next/router';
|
||||
import RootContainer from '../atoms/RootContainer'
|
||||
import ButtonBase from "@material-ui/core/ButtonBase";
|
||||
import ArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import { Hidden } from '@material-ui/core';
|
||||
import { Button, Hidden } from '@material-ui/core';
|
||||
import Dialog from '@material-ui/core/Dialog';
|
||||
import DialogActions from '@material-ui/core/DialogActions';
|
||||
import DialogContent from '@material-ui/core/DialogContent';
|
||||
import DialogContentText from '@material-ui/core/DialogContentText';
|
||||
import DialogTitle from '@material-ui/core/DialogTitle';
|
||||
|
||||
|
||||
const styles = theme => ({
|
||||
inner: {
|
||||
@@ -61,14 +68,64 @@ const styles = theme => ({
|
||||
fontSize: '0.8rem',
|
||||
fontWeight: '500',
|
||||
|
||||
},
|
||||
popup:{
|
||||
fontFamily: 'Roboto',
|
||||
color: '#1E2327',
|
||||
fontSize: '0.8rem',
|
||||
fontWeight: '500',
|
||||
}
|
||||
});
|
||||
|
||||
function LayoutBack(props) {
|
||||
class LayoutBack extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
}
|
||||
|
||||
const { classes, height} = props;
|
||||
state = {
|
||||
open: false,
|
||||
|
||||
};
|
||||
openDialog() {
|
||||
this.setState({ open: true });
|
||||
}
|
||||
|
||||
closeDialog() {
|
||||
this.setState({ open: false });
|
||||
}
|
||||
|
||||
refreshDialog() {
|
||||
this.setState({ open: false });
|
||||
window.location.reload();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Add a listener to prevent browser page refresh
|
||||
componentWillMount() {
|
||||
if (typeof window !== "undefined") {
|
||||
window.onbeforeunload = (e) => {
|
||||
console.log('Stop this');
|
||||
// this.openDialog();
|
||||
e.preventDefault()
|
||||
e.returnValue = '';
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Clear listener
|
||||
componentWillUnmount() {
|
||||
window.onbeforeunload = null
|
||||
}
|
||||
|
||||
|
||||
|
||||
render() {
|
||||
const { classes, height} = this.props;
|
||||
|
||||
//height fixed = height 100vh
|
||||
var openStudio = this.props.openStudio ? 1 : 0;
|
||||
const content = (height == 'fixed') ? classes.content+' '+classes.contentFixed : classes.content
|
||||
return (
|
||||
<RootContainer align='center'>
|
||||
@@ -78,26 +135,50 @@ function LayoutBack(props) {
|
||||
focusRipple
|
||||
className={classes.back}
|
||||
focusVisibleClassName={classes.focusVisible}
|
||||
onClick={() => Router.back()}>
|
||||
|
||||
>
|
||||
<ArrowLeft color="primary" classes={{ root: classes.icon }}></ArrowLeft>
|
||||
{/* <Hidden mdUp className={classes.retour}></Hidden> */}
|
||||
<Hidden smDown className={classes.retour}>Retour</Hidden>
|
||||
<Hidden smDown className={classes.retour}>
|
||||
<div onClick={this.props.step==1 || openStudio==1 ? this.openDialog.bind(this) : () => Router.back()}>Retour</div>
|
||||
|
||||
</Hidden>
|
||||
|
||||
<Dialog open={this.state.open}>
|
||||
<DialogTitle className={classes.popup}> Souhaitez-vous poursuivre votre candidature ?</DialogTitle>
|
||||
<DialogContent className={classes.popup}> Si vous cliquez sur le bouton Supprimer, tous les éléments associés à votre candidature (vidéo, CV…) seront définitivement supprimés. </DialogContent>
|
||||
<DialogActions className={classes.popup}>
|
||||
|
||||
|
||||
<Button onClick={this.refreshDialog.bind(this)} >
|
||||
Supprimer
|
||||
</Button>
|
||||
<Button onClick={this.closeDialog.bind(this)} autoFocus>
|
||||
Poursuivre
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
</ButtonBase>
|
||||
<Typography
|
||||
component="h1"
|
||||
align="center"
|
||||
className={classes.title}
|
||||
>
|
||||
{props.text}
|
||||
{this.props.text}
|
||||
</Typography>
|
||||
</div>
|
||||
</div>
|
||||
<div id="C" className={content}>
|
||||
{props.children}
|
||||
{this.props.children}
|
||||
</div>
|
||||
|
||||
</RootContainer>
|
||||
)
|
||||
}
|
||||
}
|
||||
LayoutBack.defaultProps = {
|
||||
step: 0,
|
||||
openStudio:false
|
||||
}
|
||||
|
||||
export default withStyles(styles)(LayoutBack)
|
||||
@@ -6,8 +6,9 @@ import RootContainer from '../atoms/RootContainer'
|
||||
import ButtonBase from "@material-ui/core/ButtonBase";
|
||||
import ArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
|
||||
import HideOnScroll from '../atoms/CollapsibleBack';
|
||||
import SocialShare from '../organisms/SocialShare'
|
||||
import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import Header from '../organisms/Header'
|
||||
import HeaderEntreprise from '../organisms/HeaderPersonnalise'
|
||||
import {AppBar,CssBaseline,Container,Toolbar,IconButton,Typography} from "@material-ui/core";
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import Link from 'next/link'
|
||||
@@ -80,63 +81,56 @@ const styles = theme => ({
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: '#BBBCBD',
|
||||
backgroundColor: '#F3F3F4',
|
||||
|
||||
},
|
||||
lien:{
|
||||
textDecoration:'none',
|
||||
color:'#fff'
|
||||
},
|
||||
})
|
||||
|
||||
function LayoutCompany(props) {
|
||||
|
||||
const { classes, companyId } = props;
|
||||
|
||||
const { classes, companyId, companyLibelle } = props;
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location : publicRuntimeConfig.frontServerUrl + `/Entreprise/${companyId}-${_.kebabCase(companyLibelle)}`;
|
||||
return (
|
||||
<React.Fragment>
|
||||
{isWidthUp('sm', props.width) ?
|
||||
(<Header />)
|
||||
:
|
||||
(<HideOnScroll threshold={50}>
|
||||
<AppBar className={classes.appBar}>
|
||||
<Toolbar>
|
||||
<ButtonBase name='back'
|
||||
focusRipple
|
||||
className={classes.back}
|
||||
focusVisibleClassName={classes.focusVisible}
|
||||
onClick={() => Router.back()}>
|
||||
<ArrowLeft classes={{ root: classes.icon }}></ArrowLeft>
|
||||
</ButtonBase>
|
||||
</Toolbar>
|
||||
</AppBar>
|
||||
</HideOnScroll>)
|
||||
}
|
||||
|
||||
<Container classes={{ root: classes.RootContainer }}>
|
||||
|
||||
<RootContainer>
|
||||
<HeaderEntreprise retour="Entreprises" menu="Entreprises"/>
|
||||
<div id="C" className={classes.content}>
|
||||
{props.children}
|
||||
</div>
|
||||
|
||||
<Hidden mdUp>
|
||||
<div id="F" className={classes.foot}>
|
||||
<Link href="#discover" >
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button + ' cypButtonApply'}
|
||||
classes={{ root: classes.rootButton}}
|
||||
|
||||
>
|
||||
<a href={`/Reponse?companyId=${companyId}`} className={classes.lien }>Postuler</a>
|
||||
</Button>
|
||||
<SocialShare url={socialShareUrl} />
|
||||
{/* <Link href="#discover" >
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.voirOffre + ' cypButtonApply'}
|
||||
>Voir les offres</Button>
|
||||
|
||||
</Link>
|
||||
<a
|
||||
</Link> */}
|
||||
{/* <a
|
||||
href={`/Reponse?companyId=${companyId}`}
|
||||
variant="contained"
|
||||
className={classes.button}
|
||||
classes={{ root: classes.rootButton }}
|
||||
// onClick={() => Router.push(`/Reponse?companyId=${companyId}`)}
|
||||
>
|
||||
Candidature spontanée</a>
|
||||
Candidature spontanée</a> */}
|
||||
</div>
|
||||
</Hidden>
|
||||
|
||||
</RootContainer>
|
||||
</Container>
|
||||
</React.Fragment>
|
||||
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
@@ -5,12 +5,14 @@ import Router from 'next/router';
|
||||
import RootContainer from '../atoms/RootContainer'
|
||||
import ButtonBase from "@material-ui/core/ButtonBase";
|
||||
import ArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
|
||||
import Header from '../organisms/HeaderOffre'
|
||||
import HeaderPersonnalise from '../organisms/HeaderPersonnalise'
|
||||
import SocialShare from '../organisms/SocialShare'
|
||||
import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import Link from 'next/link'
|
||||
|
||||
import getConfig from 'next/config'
|
||||
import _ from "lodash/string";
|
||||
const { publicRuntimeConfig } = getConfig()
|
||||
const styles = theme => ({
|
||||
foot: {
|
||||
display: 'flex',
|
||||
@@ -90,17 +92,9 @@ function LayoutOffre(props) {
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location : publicRuntimeConfig.frontServerUrl + `/Offre/${offreId}-${_.kebabCase(offre.title)}`;
|
||||
return (
|
||||
<RootContainer>
|
||||
{isWidthUp('xs', props.width) ?
|
||||
(<Header />)
|
||||
:
|
||||
(<ButtonBase name='back'
|
||||
focusRipple
|
||||
className={classes.back}
|
||||
focusVisibleClassName={classes.focusVisible}
|
||||
onClick={() => Router.back()}>
|
||||
<ArrowLeft classes={{ root: classes.icon }}></ArrowLeft>
|
||||
</ButtonBase>)
|
||||
}
|
||||
|
||||
<HeaderPersonnalise retour="Offres" menu="Offres d'emploi"/>
|
||||
|
||||
<div id="C" className={contentClass}>
|
||||
{props.children}
|
||||
</div>
|
||||
@@ -154,4 +148,4 @@ LayoutOffre.propTypes = {
|
||||
offre: PropTypes.object,
|
||||
};
|
||||
|
||||
export default withStyles(styles)(withWidth()(LayoutOffre))
|
||||
export default withStyles(styles)(LayoutOffre)
|
||||
@@ -8,7 +8,7 @@ const styles = theme => ({
|
||||
alignItems: 'center',
|
||||
textAlign: 'center',
|
||||
justifyContent: 'center',
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontWeight: '500',
|
||||
fontSize: '1em',
|
||||
padding: theme.spacing(6,0),
|
||||
|
||||
@@ -9,11 +9,24 @@ const styles = theme => ({
|
||||
alignItems: 'center',
|
||||
textAlign: 'center',
|
||||
justifyContent: 'center',
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontWeight: '500',
|
||||
fontSize: '1em',
|
||||
padding: theme.spacing(6,0),
|
||||
color: theme.palette.primary.main,
|
||||
margin:'50px 0',
|
||||
},
|
||||
loaderGras:{
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
paddingTop:'10px',
|
||||
fontSize: '1.875em',
|
||||
fontWeight: '500',
|
||||
marginBottom:'30px',
|
||||
|
||||
},
|
||||
loaderSecondaire:{
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1em',
|
||||
fontWeight: '300',
|
||||
},
|
||||
root: {
|
||||
top:"200px",
|
||||
@@ -26,13 +39,12 @@ const styles = theme => ({
|
||||
|
||||
class LoaderVideo extends React.Component {
|
||||
render() {
|
||||
const { classes } = this.props;
|
||||
const { classes, textePrincipal, texteSecondaire } = this.props;
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
<div className={classes.loader + ' ' + 'alert alert-info'}><CircularProgress color="primary" />Veuillez ne pas quitter la page.<br/> Le temps de chargement peut varier de quelques secondes à plusieurs minutes en fonction de la qualité de votre connexion internet.<br/></div>
|
||||
<div className={classes.loader }><CircularProgress color="primary" /><span className={classes.loaderGras }>{textePrincipal}</span><br/><span className={classes.loaderSecondaire }> {texteSecondaire}</span><br/></div>
|
||||
<div >
|
||||
<LinearProgress />
|
||||
<LinearProgress color="secondary" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -129,6 +129,9 @@ export default {
|
||||
withCredentials: true
|
||||
}).then(res => res)
|
||||
},
|
||||
|
||||
},
|
||||
cv:{
|
||||
uploadMediaCv: (payload) => {
|
||||
return axios.post("/api/mediaCv", payload, {
|
||||
headers: {
|
||||
@@ -142,12 +145,32 @@ export default {
|
||||
countAdView: id => {
|
||||
if (!!localStorage.ttJWT)
|
||||
setAuthorizationHeader(localStorage.ttJWT)
|
||||
axios.get(`api/adAjaxRecStat/${id}`)
|
||||
let continuerAds = true;
|
||||
|
||||
if (sessionStorage.getItem("ads"+id)){
|
||||
continuerAds=false;
|
||||
}
|
||||
|
||||
if( continuerAds){
|
||||
axios.get(`api/adAjaxRecStat/${id}`)
|
||||
sessionStorage.setItem('ads'+id, id);
|
||||
}
|
||||
},
|
||||
countCompanyView: id => {
|
||||
if (!!localStorage.ttJWT)
|
||||
setAuthorizationHeader(localStorage.ttJWT)
|
||||
axios.get(`api/companyAjaxRecStat/${id}`)
|
||||
if (!!localStorage.ttJWT){
|
||||
setAuthorizationHeader(localStorage.ttJWT);
|
||||
}
|
||||
|
||||
let continuer = true;
|
||||
|
||||
if (sessionStorage.getItem("companies"+id)){
|
||||
continuer=false;
|
||||
}
|
||||
|
||||
if( continuer){
|
||||
axios.get(`api/companyAjaxRecStat/${id}`);
|
||||
sessionStorage.setItem('companies'+id, id);
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -55,8 +55,8 @@ module.exports = withPlugins(
|
||||
blogUrl: 'https://blog.talentstube.com',
|
||||
frontServerUrl: 'https://pp.app.talentstube.com/',
|
||||
cvThequeUrl: 'https://recruteur.talentstube.com',
|
||||
version : 'V2.4.2',
|
||||
adListDefaultUrl: '/statique/images/default/default_picture_company.svg',
|
||||
version : 'V2.7.3',
|
||||
adListDefaultUrl: '/statique/images/default/default_picture_company.jpg',
|
||||
cachedMediaUrl: '/media/cache/profile_thumb/uploads/img/',
|
||||
postedContentUrl: '/uploads/img/',
|
||||
postedContentCv: '/uploads/cv/',
|
||||
|
||||
@@ -1,28 +1,503 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://app.talentstube.com/Candidature</loc>
|
||||
<lastmod>2019-09-17</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/Cgu</loc>
|
||||
<lastmod>2019-09-17</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/Confidentialite</loc>
|
||||
<lastmod>2019-11-04</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/Entreprises</loc>
|
||||
<lastmod>2019-09-17</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/Help</loc>
|
||||
<lastmod>2019-10-11</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/Login</loc>
|
||||
<lastmod>2019-10-14</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/MentionsLegales</loc>
|
||||
<lastmod>2019-11-04</lastmod>
|
||||
</url>,<url>
|
||||
<loc>https://app.talentstube.com/Offres</loc>
|
||||
<lastmod>2019-10-16</lastmod>
|
||||
<loc>https://www.talentstube.com/Player?id=135&url=/Offre/135-commercial-b-to-c-f-h&videoId=502499843&typeEntite=Offre&nameCompany=Fym%20Action&nameOffre=Commercial%20B%20to%20C%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=133&url=/Offre/133-gestionnaire-de-copropriete-f-h&videoId=500395879&typeEntite=Offre&nameCompany=Cabinet%20JOURDAN&nameOffre=Gestionnaire%20de%20co%20propriete</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=132&url=/Offre/132-comptable-f-h&videoId=495504495&typeEntite=Offre&nameCompany=Cabinet%20JOURDAN&nameOffre=Comptable%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=130&url=/Offre/130-assistant-f-h&videoId=495156742&typeEntite=Offre&nameCompany=Cabinet%20JOURDAN&nameOffre=Assistant%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=131&url=/Offre/131-poseur-f-h&videoId=494089386&typeEntite=Offre&nameCompany=TPC%20Ouest&nameOffre=Poseur%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=131&url=/Offre/140-aide-a-domicile-f-h&videoId=507891163&typeEntite=Offre&nameCompany=ADMR56&nameOffre=Aide%20a%20domicile</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=135&url=/Offre/129-commercial-b-to-b-f-h&videoId=491331138&typeEntite=Offre&nameCompany=Fym%20Action&nameOffre=Commercial%20B%20to%20b%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=122&url=/Offre/122-chauffeurs-spl-f-h&videoId=482599011&typeEntite=Offre&nameCompany=AER%20Recyclage&nameOffre=Chauffeurs%20SPL%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=128&url=/Offre/128-techniciens-poseurs-f-h&videoId=485471109&typeEntite=Offre&nameCompany=Pro%20Fermetures&nameOffre=Techniciens%20Poseurs%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=113&url=/Offre/113-aide-a-domicile-f-h&videoId=440702903&typeEntite=Offre&nameCompany=Onela&nameOffre=Aide%20à%20domicile%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=120&url=/Offre/120-technico-commercial-f-h&videoId=462942715&typeEntite=Offre&nameCompany=Temporis&nameOffre=Technico-Commercial%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=115&url=/Offre/115-technicien-ramoneur-fumiste-f-h&videoId=460206945&typeEntite=Offre&nameCompany=La%20Centrale%20des%20Ramoneurs&nameOffre=Technicien%20Ramoneur%20/%20Fumiste%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=109&url=/Offre/109-equipier-de-plateforme-polyvalent-f-h&videoId=422692890&typeEntite=Offre&nameCompany=AER%20Recyclage&nameOffre=Equipier%20de%20plateforme%20polyvalent%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=112&url=/Offre/112-conseillers-technico-commerciaux-h-f&videoId=438478115&typeEntite=Offre&nameCompany=Pro%20Fermetures&nameOffre=Conseillers%20Technico-Commerciaux%20(H/F)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=111&url=/Offre/111-couvreur-etancheur-f-h&videoId=432410136&typeEntite=Offre&nameCompany=Blandin&nameOffre=Couvreur/Étancheur%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=108&url=/Offre/108-plombier-chauffagiste-f-h&videoId=398509552&typeEntite=Offre&nameCompany=Blandin&nameOffre=Plombier/Chauffagiste%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=107&url=/Offre/107-operateur-soudeur-chaudronnier-f-h&videoId=397982745&typeEntite=Offre&nameCompany=GEIQ%20Industrie%2044&nameOffre=Opérateur%20Soudeur%20/%20Chaudronnier%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=101&url=/Offre/101-conducteurs-routiers-f-h&videoId=391023366&typeEntite=Offre&nameCompany=Lactalis%20Logistique%20et%20Transports&nameOffre=Conducteurs%20routiers%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=103&url=/Offre/103-agents-de-quai-f-h&videoId=391023871&typeEntite=Offre&nameCompany=Lactalis%20Logistique%20et%20Transports&nameOffre=Agents%20de%20quai%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=77&url=/Offre/77-commercial-sedentaire-en-vente-directe-b-to-b-h-f&videoId=343666512&typeEntite=Offre&nameCompany=Télémaque&nameOffre=Commercial%20sédentaire%20en%20vente%20directe%20B%20to%20B%20(H/F)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=102&url=/Offre/102-preparateurs-de-commandes-f-h&videoId=391023988&typeEntite=Offre&nameCompany=Lactalis%20Logistique%20et%20Transports&nameOffre=Préparateurs%20de%20commandes%20(F/H)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=46&url=/Offre/46-conducteurs-routiers-h-f&videoId=273464203&typeEntite=Offre&nameCompany=Groupe%20MOUSSET&nameOffre=Conducteurs%20routiers%20(H/F)</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=32518&url=/Entreprise/32518-cabinet-jourdan&videoId=491607083&typeEntite=Entreprise&nameCompany=Cabinet%20JOURDAN&nameOffre=</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=32507&url=/Entreprise/32507-tpc-ouest&videoId=489836459&typeEntite=Entreprise&nameCompany=TPC%20Ouest&nameOffre=</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=32355&url=/Entreprise/32355-hyphae&videoId=478847996&typeEntite=Entreprise&nameCompany=HYPHAE&nameOffre=</loc>
|
||||
<lastmod>2021-02-04</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=21247&url=/Entreprise/21247-lactalis-logistique-et-transports&videoId=391023777&typeEntite=Entreprise&nameCompany=Lactalis%20Logistique%20et%20Transports&nameOffre=</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=19800&url=/Entreprise/19800-silvadec&videoId=386500340&typeEntite=Entreprise&nameCompany=Silvadec&nameOffre=</loc>
|
||||
<lastmod>2021-02-04</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=19205&url=/Entreprise/19205-intermarche-logistique-alimentaire-international&videoId=385268706&typeEntite=Entreprise&nameCompany=Intermarché%20Logistique%20Alimentaire%20International&nameOffre=</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Player?id=12480&url=/Entreprise/12480-fym-action&videoId=345898361&typeEntite=Entreprise&nameCompany=Fym%20Action&nameOffre=</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url><url>
|
||||
<loc>https://www.talentstube.com/Offre/140-aide-a-domicile-f-h</loc>
|
||||
<lastmod>2021-02-10</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/133-gestionnaire-de-copropriete-f-h</loc>
|
||||
<lastmod>2021-01-29</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprises</loc>
|
||||
<lastmod>2021-01-18</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offres</loc>
|
||||
<lastmod>2021-01-18</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/134-assistant-administratif-et-commercial-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/135-commercial-b-to-c-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/130-assistant-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/131-poseur-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/132-comptable-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/129-commerciaux-b-to-b-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/128-techniciens-poseurs-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/122-chauffeurs-spl-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/115-technicien-ramoneur-fumiste-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/109-equipier-de-plateforme-polyvalent-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/111-couvreur-etancheur-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/107-operateur-soudeur-chaudronnier-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/103-agents-de-quai-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/102-preparateurs-de-commandes-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/46-conducteurs-routiers-h-f</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/32507-tpc-ouest</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/32355-hyphae</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/28481-onela</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/28172-pro-fermetures</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/26064-aer-recyclage</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/21247-lactalis-logistique-et-transports</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/19800-silvadec</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/19205-intermarche-logistique-alimentaire-international</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/18143-l-n-u-f-lisieux</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/17467-l-n-u-f-vallet</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16785-nachos</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16639-fast-point</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16247-sasp</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16015-la-veggisserie</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16007-bforpu-b</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/15797-sinay</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/15559-monibrand</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/13464-jpa</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/12531-grand-ouest-etiquettes</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/12480-fym-action</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/11592-youston</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/11413-les-vergers-de-chateaubourg</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/11345-telemaque</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/9138-vital-concept</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/8639-mma-questembert</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/7593-opticultures</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/7174-atlantem</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/7004-la-table-de-la-desirade</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/6898-le-ptit-club</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/6555-mazars</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/6363-square-habitat</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/5250-linpac-packaging-pontivy-groupe-klockner-pentaplast</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4211-progressis-ge</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4097-a-2-com</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4088-venetis</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4059-eiffage-construction-grand-ouest</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/3381-mairie-saint-hilaire-de-riez</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/2958-skiold-acemo</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/2527-groupe-mousset</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/2341-temporis</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1899-faurecia</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1691-groupe-syselec</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1467-groupe-rocher-operations</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1297-albea</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/438-bouyer-leroux</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/266-mgdis</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/157-medaviz</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/95-multiplast</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/52-talents-tube</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/46-actual</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/18-coriolis-composites</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/17-thibault-bergeron</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"next-optimized-images": "^1.4.1",
|
||||
"next-redux-saga": "^4.0.2",
|
||||
"next-redux-wrapper": "^3.0.0-alpha.2",
|
||||
"next-seo": "^4.7.3",
|
||||
"next-seo": "^4.18.0",
|
||||
"next-transpile-modules": "^2.3.1",
|
||||
"node-mailjet": "^3.3.1",
|
||||
"nodemailer": "^4.6.8",
|
||||
@@ -61,6 +61,7 @@
|
||||
"react-redux": "^7.0.3",
|
||||
"react-redux-loading-bar": "^5.0.0",
|
||||
"react-router-dom": "^5.2.0",
|
||||
"react-select": "^3.1.1",
|
||||
"react-sticky-box": "^0.9.3",
|
||||
"react-swipeable-views": "^0.13.3",
|
||||
"reactstrap": "^6.4.0",
|
||||
|
||||
@@ -33,7 +33,7 @@ const styles = theme => ({
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
textAlign: 'center',
|
||||
|
||||
@@ -22,7 +22,7 @@ const styles = theme => ({
|
||||
bottom: 0,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
|
||||
@@ -22,7 +22,7 @@ const styles = theme => ({
|
||||
bottom: 0,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
|
||||
@@ -11,9 +11,8 @@ import CompanyRow from "../components/organisms/CompanyRow"
|
||||
import { fetchCompaniesRequest } from '../actions/companies'
|
||||
import { CompaniesSelector } from '../reducers/companies'
|
||||
import { connect } from "react-redux";
|
||||
import Head from 'next/head'
|
||||
import OgHead from '../components/atoms/OgHead';
|
||||
|
||||
import { SocialProfileJsonLd } from 'next-seo';
|
||||
const styles = theme => ({
|
||||
root: {
|
||||
position: 'relative',
|
||||
@@ -45,7 +44,7 @@ const styles = theme => ({
|
||||
},
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
textAlign: 'center',
|
||||
@@ -72,7 +71,7 @@ class Entreprises extends React.Component {
|
||||
const { publicRuntimeConfig } = getConfig();
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location
|
||||
: publicRuntimeConfig.frontServerUrl + `/Entreprises`;
|
||||
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "/img/default_picture_svg"
|
||||
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "img/default_picture_svg"
|
||||
const imgUrl = DefaultUrl ;
|
||||
return (
|
||||
<LayoutGrid backLink="/">
|
||||
@@ -103,7 +102,18 @@ class Entreprises extends React.Component {
|
||||
image={imgUrl}
|
||||
seo_key="Recrutement, video"
|
||||
|
||||
></OgHead>
|
||||
></OgHead>
|
||||
<SocialProfileJsonLd
|
||||
type="Talents Tube"
|
||||
name="Talents Tube"
|
||||
url="https://www.talentstube.com"
|
||||
sameAs={[
|
||||
'https://www.facebook.com/TalentsTuber',
|
||||
'https://www.instagram.com/talents.tube/',
|
||||
'https://www.linkedin.com/company/talentstube/',
|
||||
'https://twitter.com/TalentsTuber',
|
||||
]}
|
||||
/>
|
||||
<Typography gutterBottom component="h1"
|
||||
className={classes.title}>
|
||||
Les entreprises en <span className={classes.primary}>vidéo</span>
|
||||
|
||||
@@ -25,7 +25,7 @@ const styles = theme => ({
|
||||
},
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
|
||||
@@ -22,7 +22,7 @@ const styles = theme => ({
|
||||
bottom: 0,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
|
||||
@@ -4,9 +4,11 @@ import { connect } from "react-redux";
|
||||
import PropTypes from 'prop-types';
|
||||
import getConfig from 'next/config'
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import OgHead from '../components/atoms/OgHead'
|
||||
import RootContainer from '../components/atoms/RootContainer'
|
||||
import LayoutOffre from "../components/templates/LayoutOffre";
|
||||
const OffreDetail = lazy(() => import('../components/organisms/OffreDetail'));
|
||||
//import OffreDetail from "../components/organisms/OffreDetail";
|
||||
// const OffreDetail = lazy(() => import('../components/organisms/OffreDetail'));
|
||||
import OffreDetail from "../components/organisms/OffreDetail";
|
||||
import { fetchJobRequest, clearAd, countAdViewRequest } from '../actions/ads'
|
||||
import _ from "lodash/string";
|
||||
const renderLoader = () => <p>Chargement</p>;
|
||||
@@ -15,9 +17,12 @@ const styles = theme => ({
|
||||
});
|
||||
|
||||
const { publicRuntimeConfig } = getConfig()
|
||||
let descriptionSEO = ""
|
||||
let titleSEO = ""
|
||||
|
||||
|
||||
class Offre extends React.Component {
|
||||
|
||||
|
||||
componentDidMount() {
|
||||
localStorage.setItem('loginRedirect', window.location.pathname)
|
||||
localStorage.setItem('adId', this.props.offre.id)
|
||||
@@ -33,12 +38,30 @@ class Offre extends React.Component {
|
||||
}
|
||||
render() {
|
||||
const { classes, offre } = this.props;
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location : publicRuntimeConfig.frontServerUrl + `/Offre/${offre.id}-${_.kebabCase(offre.title)}`;
|
||||
descriptionSEO=""
|
||||
offre.company && offre.company.brand_name ? descriptionSEO += offre.company.brand_name : ""
|
||||
descriptionSEO += " recrute un(e) "+offre.title+", "+(offre.location && offre.location.gmap_address.formatted_address)+". Envoyez votre candidature vidéo"
|
||||
titleSEO = "Offre d'emploi "+offre && offre.title && offre.title.replace(' (F/H)', '')+", "+(offre.location && offre.location.gmap_address.formatted_address)+". Envoyez votre candidature vidéo"
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location : publicRuntimeConfig.frontServerUrl + `Offre/${offre.id}-${_.kebabCase(offre.title)}`;
|
||||
const DefaultUrl = "https://blog.talentstube.com/wp-content/uploads/2021/01/default_picture_company.jpg"
|
||||
const imgUrl = (offre.company && offre.company.presentation_video && offre.company.presentation_video.thumbnails && offre.company.presentation_video.thumbnails[0] && offre.company.presentation_video.thumbnails[0].sizes[3]) ? offre.company.presentation_video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlDesktop = (offre.company && offre.company.presentation_video && offre.company.presentation_video.thumbnails && offre.company.presentation_video.thumbnails[0] && offre.company.presentation_video.thumbnails[0].sizes[4]) ? offre.company.presentation_video.thumbnails[0].sizes[4].link : DefaultUrl
|
||||
const imgUrlOffre = (offre && offre.video && offre.video.thumbnails && offre.video.thumbnails[0] && offre.video.thumbnails[0].sizes[3]) ? offre.video.thumbnails[0].sizes[3].link : DefaultUrl
|
||||
const imgUrlDesktopOffre = (offre && offre.video && offre.video.thumbnails && offre.video.thumbnails[0] && offre.video.thumbnails[0].sizes[4]) ? offre.video.thumbnails[0].sizes[4].link : DefaultUrl
|
||||
return (
|
||||
<LayoutOffre backLink="/Offres" offreId={offre.id} offre={offre} isProvided={offre.is_promoted}>
|
||||
<RootContainer>
|
||||
<OgHead seo_title={titleSEO}
|
||||
seo_description={descriptionSEO}
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrlOffre}
|
||||
></OgHead>
|
||||
|
||||
<LayoutOffre backLink="/Offres" offreId={offre.id} offre={offre} isProvided={offre.is_promoted}>
|
||||
|
||||
{/* <Suspense fallback={renderLoader()}><OffreDetail offre={offre}/></Suspense> */}
|
||||
<Suspense fallback={renderLoader()}><OffreDetail offre={offre}/></Suspense>
|
||||
</LayoutOffre>
|
||||
<OffreDetail offre={offre}/>
|
||||
</LayoutOffre>
|
||||
</RootContainer>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,11 +11,9 @@ import OffreRow from "../components/organisms/OffreRow"
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import { fetchJobsRequest, togglePromotedFilterRequest} from '../actions/ads'
|
||||
import { AdsSelector } from '../reducers/ads'
|
||||
import { TextField } from '@material-ui/core';
|
||||
import Head from 'next/head'
|
||||
import OgHead from '../components/atoms/OgHead';
|
||||
import getConfig from 'next/config'
|
||||
|
||||
import { SocialProfileJsonLd } from 'next-seo';
|
||||
|
||||
const styles = theme => ({
|
||||
root: {
|
||||
@@ -40,7 +38,7 @@ const styles = theme => ({
|
||||
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
textAlign: 'center',
|
||||
@@ -104,7 +102,7 @@ class Offres extends React.Component {
|
||||
const { publicRuntimeConfig } = getConfig();
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location
|
||||
: publicRuntimeConfig.frontServerUrl + `/Offres`;
|
||||
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "/img/default_picture_svg"
|
||||
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "img/default_picture_svg"
|
||||
const imgUrl = DefaultUrl ;
|
||||
return (
|
||||
<LayoutGrid backLink="/">
|
||||
@@ -114,7 +112,18 @@ class Offres extends React.Component {
|
||||
image={imgUrl}
|
||||
seo_key="Recrutement, video"
|
||||
|
||||
></OgHead>
|
||||
></OgHead>
|
||||
<SocialProfileJsonLd
|
||||
type="Talents Tube"
|
||||
name="Talents Tube"
|
||||
url="https://www.talentstube.com"
|
||||
sameAs={[
|
||||
'https://www.facebook.com/TalentsTuber',
|
||||
'https://www.instagram.com/talents.tube/',
|
||||
'https://www.linkedin.com/company/talentstube/',
|
||||
'https://twitter.com/TalentsTuber',
|
||||
]}
|
||||
/>
|
||||
|
||||
<Typography gutterBottom component="h1"
|
||||
className={classes.title}>
|
||||
|
||||
@@ -39,7 +39,7 @@ const styles = theme => ({
|
||||
}
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
import React, { Component, Fragment,lazy, Suspense } from 'react';
|
||||
import React, { Component, Fragment,lazy, Suspense, useEffect } from 'react';
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import Typography from '@material-ui/core/Typography'
|
||||
import LayoutBackUrl from '../components/templates/LayoutBackUrl';
|
||||
import RootContainer from '../components/atoms/RootContainer'
|
||||
import Router from 'next/router';
|
||||
import Head from 'next/head'
|
||||
// const VideoVimeo = lazy(() => import('../components/atoms/VideoVimeo'));
|
||||
import VideoVimeo from '../components/atoms/VideoVimeo';
|
||||
import queryString from 'query-string';
|
||||
import { fetchJobRequest, clearAd, countAdViewRequest } from '../actions/ads'
|
||||
const renderLoader = () => <p>Chargement</p>;
|
||||
import { NextSeo } from 'next-seo';
|
||||
import dynamic from 'next/dynamic'
|
||||
const styles = theme => ({
|
||||
player: {
|
||||
background:'#1E2327',
|
||||
@@ -29,7 +33,7 @@ const styles = theme => ({
|
||||
bottom: 0,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
@@ -49,31 +53,75 @@ const styles = theme => ({
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
let params = dynamic( () => window.location.search, {ssr: false} )
|
||||
class Player extends Component {
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
var today = new Date(),
|
||||
date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
|
||||
|
||||
this.state = {
|
||||
date: date
|
||||
};
|
||||
|
||||
console.log("LOCATION SEARCH");
|
||||
console.log(params);
|
||||
}
|
||||
render() {
|
||||
const { classes } = this.props
|
||||
const params = queryString.parse(location.search);
|
||||
console.log(params.id);
|
||||
console.log(params.type);
|
||||
console.log(params.videoId);
|
||||
let url = params.id;
|
||||
const { classes, id, url, typeEntite, videoId, nameCompany, nameOffre } = this.props
|
||||
|
||||
|
||||
console.log(id);
|
||||
console.log(typeEntite);
|
||||
let typeVideo= null;
|
||||
let titleVideo= null;
|
||||
let descriptionVideo= null;
|
||||
if(typeEntite=="Offre"){
|
||||
titleVideo=nameCompany+" recrute un(e)"+nameOffre
|
||||
descriptionVideo=nameCompany+" recrute en vidéo un(e)"+nameOffre
|
||||
}else if(typeEntite=="Entreprise"){
|
||||
titleVideo="Découvrez l'entreprise "+nameCompany+" et ses offres d'emploi vidéo"
|
||||
descriptionVideo="Découvrez l'entreprise "+nameCompany+" et ses offres d'emploi vidéo. Envoyez votre candidature spontanée en vidéo"
|
||||
}else if(typeEntite=="Territoire"){
|
||||
titleVideo="Découvrez le territoire "+nameCompany
|
||||
descriptionVideo="Découvrez le territoire "+nameCompany
|
||||
}
|
||||
console.log(videoId);
|
||||
|
||||
return (
|
||||
<LayoutBackUrl text="Player" url={url} >
|
||||
|
||||
|
||||
<VideoVimeo classes={{ video: classes.video }} videoId={params.videoId} options="" autoplay='1' />
|
||||
|
||||
</LayoutBackUrl>
|
||||
<RootContainer>
|
||||
<NextSeo
|
||||
title={titleVideo}
|
||||
description={descriptionVideo}
|
||||
noindex={true}
|
||||
nofollow={true}
|
||||
openGraph={{
|
||||
title: titleVideo,
|
||||
description: descriptionVideo,
|
||||
url: "https://www.talentstube.com/Player?id="+id+"&url="+url+"&videoId="+videoId+"&typeEntite="+typeEntite+"&nameCompany="+nameCompany+"&nameOffre="+nameOffre,
|
||||
type: 'video.movie',
|
||||
video: {
|
||||
// Multiple Open Graph actors is only available in version `7.0.2-canary.35`+ of next
|
||||
releaseDate: this.state.date,
|
||||
// Multiple Open Graph tags is only available in version `7.0.2-canary.35`+ of next
|
||||
},
|
||||
site_name: 'Talents Tube',
|
||||
}}
|
||||
/>
|
||||
<LayoutBackUrl text="Player" url={url} >
|
||||
<VideoVimeo classes={{ video: classes.video }} videoId={videoId} options="" autoplay='1' />
|
||||
</LayoutBackUrl>
|
||||
</RootContainer>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Player.getInitialProps = function (context) {
|
||||
|
||||
let { id, videoId,type } = context.query;
|
||||
let { id, url,videoId,typeEntite, nameCompany, nameOffre } = context.query;
|
||||
let {res} = context;
|
||||
return {};
|
||||
return {id:id, url:url, videoId:videoId, typeEntite:typeEntite, nameCompany:nameCompany, nameOffre:nameOffre};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -337,18 +338,14 @@ class Reponse extends React.Component {
|
||||
classes.rootStepperActive
|
||||
)
|
||||
return (
|
||||
<LayoutBack text="Candidature">
|
||||
<LayoutBack text="Candidature" step={this.state.activeStep} openStudio={this.state.openStudio}>
|
||||
<Head>
|
||||
<title>Candidature vidéo</title>
|
||||
<meta name="description" content="Talent's tube, postulez en video." />
|
||||
<meta name="description" content="Talents tube, postulez en video." />
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
|
||||
</Head>
|
||||
{/* https://codesandbox.io/s/ii0us */}
|
||||
{ loading ?
|
||||
<LoaderVideo /> :
|
||||
<Fragment>
|
||||
|
||||
<section className={classes.headerContainer}>
|
||||
{ !!offre.company && (
|
||||
|
||||
@@ -356,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}>
|
||||
@@ -370,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}>
|
||||
@@ -384,6 +382,12 @@ class Reponse extends React.Component {
|
||||
}
|
||||
|
||||
</section>
|
||||
{ loading ?
|
||||
<LoaderVideo textePrincipal="Votre candidature vidéo est en cours d’envoi..." texteSecondaire="Veuillez rester sur la page pendant le chargement qui peut durer plusieurs minutes."/>
|
||||
:
|
||||
<Fragment>
|
||||
|
||||
|
||||
<section className={classes.headerContainer}>
|
||||
<Stepper activeStep={activeStep} classes={{ root: rootStepper }} className={classes.rootStepperContainer} alternativeLabel>
|
||||
{steps.map((label, index) => {
|
||||
@@ -445,7 +449,7 @@ class Reponse extends React.Component {
|
||||
):
|
||||
(
|
||||
<Fragment>
|
||||
|
||||
|
||||
{this.state.openStudio == false ?
|
||||
<Button component="span" className={classes.captureButton} classes={{ root: classes.rootButton }} onClick={this.realise}>
|
||||
<img alt="talents-tube" src='/statique/images/capture.svg' className={classes.iconButton} />
|
||||
@@ -456,8 +460,9 @@ class Reponse extends React.Component {
|
||||
</Button>
|
||||
:
|
||||
<div className={classes.recorderContainer}>
|
||||
<Button onClick={this.retour}>Retour au menu</Button>
|
||||
<Recorder uploader={this.props.uploadMedia} />
|
||||
<Button onClick={this.retour}>Revenir au menu</Button>
|
||||
|
||||
</div>
|
||||
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ const styles = theme => ({
|
||||
},
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
// import PropTypes from 'prop-types';
|
||||
import Document, { Head, Main, NextScript } from 'next/document';
|
||||
import { ServerStyleSheets } from '@material-ui/styles';
|
||||
import flush from 'styled-jsx/server';
|
||||
@@ -31,11 +31,10 @@ class MyDocument extends Document {
|
||||
/>
|
||||
{/* PWA primary color */}
|
||||
<meta name="theme-color" content={theme.palette.primary.main} />
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Dosis:600|Roboto:200,300,400,500,700,900&display=swap" rel="stylesheet">
|
||||
<link rel="preload" href="/statique/css/fonts.css" rel="stylesheet">
|
||||
</link>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDYV8IJGtIoWLfXJQQvIuDQ88n2aEuRgpg&libraries=places"></script>
|
||||
<script type="text/javascript" src="/static/js/pwaInstaller.js" ></script>
|
||||
<script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDYV8IJGtIoWLfXJQQvIuDQ88n2aEuRgpg&libraries=places"></script>
|
||||
<script async type="text/javascript" src="/static/js/pwaInstaller.js" ></script>
|
||||
{/* Global Site Tag (gtag.js) - Google Analytics */}
|
||||
{/* <script
|
||||
async
|
||||
@@ -52,7 +51,7 @@ class MyDocument extends Document {
|
||||
}}
|
||||
/> */}
|
||||
|
||||
<script
|
||||
<script defer
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
|
||||
@@ -19,6 +19,7 @@ import NoResult from './../components/atoms/NoResult';
|
||||
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
|
||||
@@ -122,7 +123,7 @@ const styles = theme => ({
|
||||
color: theme.palette.secondary.text,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
textAlign: 'center',
|
||||
@@ -172,6 +173,30 @@ class Index extends React.Component {
|
||||
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 /> */}
|
||||
|
||||
@@ -0,0 +1,750 @@
|
||||
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 d’entreprises 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 d’entreprises 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 d’emploi vidéo :</b><br/>
|
||||
<ul>
|
||||
<li>Pas besoin d’une 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 d’emploi video :</b><br/>
|
||||
<ul>
|
||||
<li>L’offre est en vidéo pour mieux comprendre l’entreprise, 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 aujourd’hui votre
|
||||
meilleur atout
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>Pas besoin d’une « 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 l’humain au cœur des recrutements
|
||||
</Typography>
|
||||
<Typography className={classes.bloc1DroiteParagraphe}>
|
||||
Chez Talents Tube, nous pensons que la technologie ne doit pas remplacer
|
||||
l’humain mais être à son service. C’est 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 aujourd’hui la SEULE
|
||||
plateforme de recrutement qui permet aux entreprises de publier des offres
|
||||
d’emploi 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 d’experts 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
|
||||
d’adapter NOTRE solution à VOS besoins et ainsi créer une expérience utilisateur
|
||||
inoubliable. <br/><br/>
|
||||
Composée d’experts de la fonction RH & Recrutement, nous sommes
|
||||
passionnés par ce que nous faisons. Notre SEUL objectif : favoriser la rencontre
|
||||
d’entreprises 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>
|
||||
);
|
||||
}
|
||||
@@ -120,7 +120,7 @@ const styles = theme => ({
|
||||
color: theme.palette.secondary.text,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontFamily: '"Roboto", "Helvetica", "Arial", "sans-serif"',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
textAlign: 'center',
|
||||
@@ -148,6 +148,8 @@ class Index extends React.Component {
|
||||
suggestions: [],
|
||||
valueMetier: '',
|
||||
suggestionsMetier: [],
|
||||
valueMetierCompetence: '',
|
||||
suggestionsMetierCompetence: [],
|
||||
};
|
||||
}
|
||||
|
||||
@@ -266,10 +268,63 @@ class Index extends React.Component {
|
||||
};
|
||||
|
||||
|
||||
// METIER COMPETENCE
|
||||
// Filter logic
|
||||
getSuggestionsMetierCompetence = async (valueMetierCompetence) => {
|
||||
const inputValue = valueMetierCompetence.trim().toLowerCase();
|
||||
let response = await fetch(publicRuntimeConfig.symphonyUrl+"api/getDetailAppelation?q=" + inputValue );
|
||||
// let response = await fetch("http://www.omdbapi.com/?s=" + inputValue + "&apikey=a591bb53");
|
||||
let data = await response.json()
|
||||
return data.competencesDeBase;
|
||||
};
|
||||
|
||||
// Trigger suggestions
|
||||
getSuggestionMetierCompetenceValue = suggestion => suggestion.libelle;
|
||||
// Render Each Option
|
||||
renderSuggestionMetierCompetence = suggestion => (
|
||||
<span className="sugg-option">
|
||||
|
||||
<span className="name">
|
||||
{suggestion.libelle} ({suggestion.code})
|
||||
</span>
|
||||
</span>
|
||||
);
|
||||
|
||||
// OnChange event handler
|
||||
onChangeMetierCompetence = (event, { newValue }) => {
|
||||
this.setState({
|
||||
valueMetierCompetence: newValue
|
||||
});
|
||||
};
|
||||
|
||||
// Suggestion rerender when user types
|
||||
onSuggestionsMetierCompetenceFetchRequested = ({ value }) => {
|
||||
this.getSuggestionsMetierCompetence(value)
|
||||
.then(data => {
|
||||
if (data.Error) {
|
||||
this.setState({
|
||||
suggestionsMetierCompetence: []
|
||||
});
|
||||
} else {
|
||||
this.setState({
|
||||
suggestionsMetierCompetence: data
|
||||
});
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
// Triggered on clear
|
||||
onSuggestionsMetierCompetenceClearRequested = () => {
|
||||
this.setState({
|
||||
suggestionsMetierCompetence: []
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
render() {
|
||||
const { classes } = this.props;
|
||||
const { value, suggestions, valueMetier, suggestionsMetier } = this.state;
|
||||
const { value, suggestions, valueMetier, suggestionsMetier, valueMetierCompetence, suggestionsMetierCompetence } = this.state;
|
||||
// Option props
|
||||
const inputProps = {
|
||||
placeholder: 'Saisir une compétence',
|
||||
@@ -282,19 +337,22 @@ class Index extends React.Component {
|
||||
value:valueMetier,
|
||||
onChange: this.onChangeMetier
|
||||
};
|
||||
|
||||
const inputPropsMetierCompetence = {
|
||||
placeholder: 'Saisir un id appellation',
|
||||
value:valueMetierCompetence,
|
||||
onChange: this.onChangeMetierCompetence
|
||||
};
|
||||
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="Talents Tube - Plateforme de recrutement en vidéo"
|
||||
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>
|
||||
<Head>
|
||||
<title key="title">Recrutement vidéo : fonctionnement – Talents Tube</title>
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
<div className={classes.container}>
|
||||
|
||||
{/* <VideoSlider /> */}
|
||||
@@ -319,6 +377,15 @@ class Index extends React.Component {
|
||||
renderSuggestion={this.renderSuggestionMetier}
|
||||
inputProps={inputPropsMetier}
|
||||
/>
|
||||
|
||||
<Autosuggest
|
||||
suggestions={suggestionsMetierCompetence}
|
||||
onSuggestionsFetchRequested={this.onSuggestionsMetierCompetenceFetchRequested}
|
||||
onSuggestionsClearRequested={this.onSuggestionsMetierCompetenceClearRequested}
|
||||
getSuggestionValue={this.getSuggestionMetierCompetenceValue}
|
||||
renderSuggestion={this.renderSuggestionMetierCompetence}
|
||||
inputProps={inputPropsMetierCompetence}
|
||||
/>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,354 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/133-gestionnaire-de-copropriete-f-h</loc>
|
||||
<lastmod>2021-01-29</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprises</loc>
|
||||
<lastmod>2021-01-29</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offres</loc>
|
||||
<lastmod>2021-01-29</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/134-assistant-administratif-et-commercial-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/135-commercial-b-to-c-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/130-assistant-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/131-poseur-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/132-comptable-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/129-commerciaux-b-to-b-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/128-techniciens-poseurs-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/122-chauffeurs-spl-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/115-technicien-ramoneur-fumiste-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/109-equipier-de-plateforme-polyvalent-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/111-couvreur-etancheur-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/107-operateur-soudeur-chaudronnier-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/103-agents-de-quai-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/102-preparateurs-de-commandes-f-h</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Offre/46-conducteurs-routiers-h-f</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/32507-tpc-ouest</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/32355-hyphae</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/28481-onela</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/28172-pro-fermetures</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/26064-aer-recyclage</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/21247-lactalis-logistique-et-transports</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/19800-silvadec</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/19205-intermarche-logistique-alimentaire-international</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/18143-l-n-u-f-lisieux</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/17467-l-n-u-f-vallet</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16785-nachos</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16639-fast-point</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16247-sasp</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16015-la-veggisserie</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/16007-bforpu-b</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/15797-sinay</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/15559-monibrand</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/13464-jpa</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/12531-grand-ouest-etiquettes</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/12480-fym-action</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/11592-youston</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/11413-les-vergers-de-chateaubourg</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/11345-telemaque</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/9138-vital-concept</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/8639-mma-questembert</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/7593-opticultures</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/7174-atlantem</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/7004-la-table-de-la-desirade</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/6898-le-ptit-club</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/6555-mazars</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/6363-square-habitat</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/5250-linpac-packaging-pontivy-groupe-klockner-pentaplast</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4211-progressis-ge</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4097-a-2-com</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4088-venetis</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/4059-eiffage-construction-grand-ouest</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/3381-mairie-saint-hilaire-de-riez</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/2958-skiold-acemo</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/2527-groupe-mousset</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/2341-temporis</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1899-faurecia</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1691-groupe-syselec</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1467-groupe-rocher-operations</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/1297-albea</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/438-bouyer-leroux</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/266-mgdis</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/157-medaviz</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/95-multiplast</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/52-talents-tube</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/46-actual</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/18-coriolis-composites</loc>
|
||||
<lastmod>2021-01-23</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://www.talentstube.com/Entreprise/17-thibault-bergeron</loc>
|
||||
<lastmod>2021-01-24</lastmod>
|
||||
<priority>0.70</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,36 @@
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url(KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url(KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Core Owl Carousel CSS File
|
||||
* v1.3.3
|
||||
*/
|
||||
|
||||
/* clearfix */
|
||||
.owl-carousel .owl-wrapper:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
}
|
||||
/* display none until init */
|
||||
.owl-carousel{
|
||||
display: none;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
-ms-touch-action: pan-y;
|
||||
}
|
||||
.owl-carousel .owl-wrapper{
|
||||
display: none;
|
||||
position: relative;
|
||||
-webkit-transform: translate3d(0px, 0px, 0px);
|
||||
}
|
||||
.owl-carousel .owl-wrapper-outer{
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
.owl-carousel .owl-wrapper-outer.autoHeight{
|
||||
-webkit-transition: height 500ms ease-in-out;
|
||||
-moz-transition: height 500ms ease-in-out;
|
||||
-ms-transition: height 500ms ease-in-out;
|
||||
-o-transition: height 500ms ease-in-out;
|
||||
transition: height 500ms ease-in-out;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item{
|
||||
float: left;
|
||||
}
|
||||
.owl-controls .owl-page,
|
||||
.owl-controls .owl-buttons div{
|
||||
cursor: pointer;
|
||||
}
|
||||
.owl-controls {
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/* mouse grab icon */
|
||||
.grabbing {
|
||||
cursor:url(../img/grabbing.png) 8 8, move;
|
||||
}
|
||||
|
||||
/* fix */
|
||||
.owl-carousel .owl-wrapper,
|
||||
.owl-carousel .owl-item{
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
-webkit-transform: translate3d(0,0,0);
|
||||
-moz-transform: translate3d(0,0,0);
|
||||
-ms-transform: translate3d(0,0,0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Owl Carousel Owl Demo Theme
|
||||
* v1.3.3
|
||||
*/
|
||||
|
||||
.owl-theme .owl-controls{
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Styling Next and Prev buttons */
|
||||
|
||||
.owl-theme .owl-controls .owl-buttons div{
|
||||
color: #FFF;
|
||||
display: inline-block;
|
||||
zoom: 1;
|
||||
*display: inline;/*IE7 life-saver */
|
||||
margin: 5px;
|
||||
padding: 3px 10px;
|
||||
font-size: 12px;
|
||||
-webkit-border-radius: 30px;
|
||||
-moz-border-radius: 30px;
|
||||
border-radius: 30px;
|
||||
background: #869791;
|
||||
filter: Alpha(Opacity=50);/*IE7 fix*/
|
||||
opacity: 0.5;
|
||||
}
|
||||
/* Clickable class fix problem with hover on touch devices */
|
||||
/* Use it for non-touch hover action */
|
||||
.owl-theme .owl-controls.clickable .owl-buttons div:hover{
|
||||
filter: Alpha(Opacity=100);/*IE7 fix*/
|
||||
opacity: 1;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Styling Pagination*/
|
||||
|
||||
.owl-theme .owl-controls .owl-page{
|
||||
display: inline-block;
|
||||
zoom: 1;
|
||||
*display: inline;/*IE7 life-saver */
|
||||
}
|
||||
.owl-theme .owl-controls .owl-page span{
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
margin: 5px 7px;
|
||||
filter: Alpha(Opacity=50);/*IE7 fix*/
|
||||
opacity: 0.5;
|
||||
-webkit-border-radius: 20px;
|
||||
-moz-border-radius: 20px;
|
||||
border-radius: 20px;
|
||||
background: #FF5A5F;
|
||||
}
|
||||
|
||||
.owl-theme .owl-controls .owl-page.active span,
|
||||
.owl-theme .owl-controls.clickable .owl-page:hover span{
|
||||
filter: Alpha(Opacity=100);/*IE7 fix*/
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* If PaginationNumbers is true */
|
||||
|
||||
.owl-theme .owl-controls .owl-page span.owl-numbers{
|
||||
height: auto;
|
||||
width: auto;
|
||||
color: #FFF;
|
||||
padding: 2px 10px;
|
||||
font-size: 12px;
|
||||
-webkit-border-radius: 30px;
|
||||
-moz-border-radius: 30px;
|
||||
border-radius: 30px;
|
||||
}
|
||||
|
||||
.screenshot-slider .item{
|
||||
margin: 3px;
|
||||
}
|
||||
.screenshot-slider .item img{
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<svg id="Import" xmlns="http://www.w3.org/2000/svg" width="73.762" height="56.425" viewBox="0 0 73.762 56.425">
|
||||
<g id="Groupe_7895" data-name="Groupe 7895" transform="translate(9.499)">
|
||||
<rect id="Rectangle_316" data-name="Rectangle 316" width="42.463" height="23.869" transform="translate(0 3.769) rotate(-5.093)"/>
|
||||
<rect id="Rectangle_317" data-name="Rectangle 317" width="2.656" height="2.656" transform="translate(1.401 6.158) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_318" data-name="Rectangle 318" width="2.656" height="2.656" transform="translate(1.866 11.472) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_319" data-name="Rectangle 319" width="2.656" height="2.656" transform="translate(2.327 16.747) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_320" data-name="Rectangle 320" width="2.656" height="2.656" transform="translate(2.826 22.019) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_321" data-name="Rectangle 321" width="2.656" height="2.656" transform="translate(38.67 2.848) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_322" data-name="Rectangle 322" width="2.656" height="2.656" transform="translate(39.131 8.123) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_323" data-name="Rectangle 323" width="2.656" height="2.656" transform="translate(39.633 13.433) rotate(-5.093)" fill="#fff"/>
|
||||
<rect id="Rectangle_324" data-name="Rectangle 324" width="2.656" height="2.656" transform="translate(40.094 18.708) rotate(-5.093)" fill="#fff"/>
|
||||
<path id="Tracé_278" data-name="Tracé 278" d="M229.4,202.9l6.275,3.311-5.582,4.35Z" transform="translate(-210.257 -192.71)" fill="#fff"/>
|
||||
</g>
|
||||
<path id="Tracé_279" data-name="Tracé 279" d="M217.367,282.859l-6.93,6.93-48.507-6.93L155,275.93l6.93-6.93h55.437Z" transform="translate(-155 -233.363)" fill="#d0e7fe"/>
|
||||
<path id="Tracé_280" data-name="Tracé 280" d="M173,269v6.93h48.507l6.93-6.93Z" transform="translate(-166.07 -233.363)" fill="#b8dbfe"/>
|
||||
<g id="Groupe_7897" data-name="Groupe 7897" transform="translate(28.442 19.099)">
|
||||
<g id="Groupe_7896" data-name="Groupe 7896" transform="translate(3.551)">
|
||||
<path id="Tracé_281" data-name="Tracé 281" d="M239.065,257.45a.488.488,0,0,1-.231-.039.939.939,0,0,1-.693-1.155,50.925,50.925,0,0,0,1.463-12.088,51.857,51.857,0,0,0-.346-6.006.969.969,0,0,1,1.925-.231,55.915,55.915,0,0,1,.346,6.237,52.807,52.807,0,0,1-1.5,12.55A.952.952,0,0,1,239.065,257.45Z" transform="translate(-238.104 -232.827)" fill="#25d89a"/>
|
||||
<path id="Tracé_282" data-name="Tracé 282" d="M240.5,229.337a1.021,1.021,0,0,1-.962-.808c-.077-.462-.154-.885-.27-1.347a.944.944,0,0,1,1.848-.385c.077.462.192.924.269,1.386a.969.969,0,0,1-.77,1.116A.141.141,0,0,1,240.5,229.337Z" transform="translate(-238.804 -226.042)" fill="#25d89a"/>
|
||||
</g>
|
||||
<path id="Tracé_283" data-name="Tracé 283" d="M233.084,279.525l-4.042-6.237a.972.972,0,1,1,1.617-1.078l3,4.62,4.62-3a.972.972,0,0,1,1.078,1.617Z" transform="translate(-228.879 -254.171)" fill="#25d89a"/>
|
||||
</g>
|
||||
<path id="Tracé_284" data-name="Tracé 284" d="M316.393,300.545h-9.008a.385.385,0,1,1,0-.77h8.7l5.505-5.659a.381.381,0,1,1,.539.539Z" transform="translate(-248.483 -248.739)" fill="#25d89a"/>
|
||||
<path id="Tracé_285" data-name="Tracé 285" d="M317.93,299.2h-6.545a.385.385,0,0,1,0-.77h6.237l4.2-4.312a.381.381,0,1,1,.539.539Z" transform="translate(-250.943 -248.739)" fill="#fa6362"/>
|
||||
<g id="Groupe_7899" data-name="Groupe 7899" transform="translate(30.144 40.641)">
|
||||
<g id="Groupe_7898" data-name="Groupe 7898" transform="translate(0 0)">
|
||||
<path id="Tracé_286" data-name="Tracé 286" d="M233.3,282l2.5,3.811,5.89-3.811h-3.542l-.654.423a1.636,1.636,0,0,0,.077-.423H233.3Z" transform="translate(-233.3 -282)" fill="#21b77e"/>
|
||||
</g>
|
||||
</g>
|
||||
<rect id="Rectangle_325" data-name="Rectangle 325" width="55.437" height="13.859" transform="translate(0 42.566)" fill="#fff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 688 KiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 315 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 156 KiB |
@@ -0,0 +1,31 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="207.525" height="43.208" viewBox="0 0 207.525 43.208">
|
||||
<g id="Logo" transform="translate(-63.142 -208.083)">
|
||||
<g id="Groupe_7907" data-name="Groupe 7907" transform="translate(63.142 217.603)" style="isolation: isolate">
|
||||
<g id="Groupe_7904" data-name="Groupe 7904" transform="translate(0 1.508)" style="isolation: isolate">
|
||||
<path id="Tracé_369" data-name="Tracé 369" d="M65.046,260.631v-7.353h-.529a1.375,1.375,0,0,1,0-2.751h.529v-2.38a1.6,1.6,0,0,1,3.2,0v2.38h2.513a1.376,1.376,0,1,1,0,2.751H68.247v6.85a1.524,1.524,0,0,0,1.719,1.746,7.557,7.557,0,0,0,.793-.079,1.349,1.349,0,0,1,1.349,1.323,1.377,1.377,0,0,1-.846,1.243,6.365,6.365,0,0,1-2.2.37C66.713,264.73,65.046,263.7,65.046,260.631Z" transform="translate(-63.142 -246.56)" fill="#fff"/>
|
||||
</g>
|
||||
<g id="Groupe_7905" data-name="Groupe 7905" transform="translate(11.73 5.29)" style="isolation: isolate">
|
||||
<path id="Tracé_370" data-name="Tracé 370" d="M104.07,269.887v-.053c0-3.015,2.354-4.5,5.766-4.5a11.663,11.663,0,0,1,3.756.582v-.344c0-1.983-1.217-3.041-3.465-3.041a8.3,8.3,0,0,0-3.095.555,1.792,1.792,0,0,1-.5.08,1.332,1.332,0,0,1-1.349-1.322,1.4,1.4,0,0,1,.873-1.27,11.967,11.967,0,0,1,4.5-.82,6.258,6.258,0,0,1,4.629,1.56,5.8,5.8,0,0,1,1.507,4.311V272.5a1.524,1.524,0,0,1-1.561,1.534,1.446,1.446,0,0,1-1.56-1.349v-.529a5.676,5.676,0,0,1-4.549,2.036C106.4,274.2,104.07,272.69,104.07,269.887Zm9.575-1.005v-.952a8.875,8.875,0,0,0-3.174-.555c-2.063,0-3.28.873-3.28,2.327v.053c0,1.349,1.19,2.116,2.724,2.116C112.031,271.87,113.645,270.654,113.645,268.882Z" transform="translate(-104.07 -259.757)" fill="#fff"/>
|
||||
</g>
|
||||
<g id="Groupe_7906" data-name="Groupe 7906" transform="translate(28.512)" style="isolation: isolate">
|
||||
<path id="Tracé_371" data-name="Tracé 371" d="M162.626,242.886a1.575,1.575,0,0,1,1.587-1.587,1.6,1.6,0,0,1,1.613,1.587v16.4a1.6,1.6,0,0,1-3.2,0Z" transform="translate(-162.626 -241.299)" fill="#fff"/>
|
||||
<path id="Tracé_372" data-name="Tracé 372" d="M192.864,273.96a6.968,6.968,0,0,1-7.168-7.247v-.053c0-3.994,2.83-7.273,6.824-7.273a6.606,6.606,0,0,1,6.638,6.877,1.5,1.5,0,0,1-1.507,1.534H188.9a3.9,3.9,0,0,0,4.02,3.544,5.019,5.019,0,0,0,3.306-1.217,1.192,1.192,0,0,1,.82-.291,1.259,1.259,0,0,1,1.269,1.3,1.4,1.4,0,0,1-.423.979A7.171,7.171,0,0,1,192.864,273.96Zm3.174-8.279c-.212-2.063-1.428-3.676-3.544-3.676-1.957,0-3.333,1.507-3.624,3.676Z" transform="translate(-179.084 -254.203)" fill="#fff"/>
|
||||
<path id="Tracé_373" data-name="Tracé 373" d="M244.11,261.133a1.581,1.581,0,0,1,1.587-1.613,1.6,1.6,0,0,1,1.614,1.613v.688a5.062,5.062,0,0,1,4.364-2.434c3.147,0,4.972,2.116,4.972,5.343v7.458a1.559,1.559,0,0,1-1.587,1.587,1.581,1.581,0,0,1-1.613-1.587v-6.48c0-2.169-1.084-3.412-2.989-3.412-1.851,0-3.147,1.3-3.147,3.465v6.427a1.6,1.6,0,0,1-3.2,0Z" transform="translate(-220.757 -254.203)" fill="#fff"/>
|
||||
<path id="Tracé_374" data-name="Tracé 374" d="M298.892,260.631v-7.353h-.529a1.375,1.375,0,0,1,0-2.751h.529v-2.38a1.6,1.6,0,0,1,3.2,0v2.38h2.513a1.376,1.376,0,1,1,0,2.751h-2.513v6.85a1.524,1.524,0,0,0,1.719,1.746,7.566,7.566,0,0,0,.794-.079,1.349,1.349,0,0,1,1.349,1.323,1.377,1.377,0,0,1-.846,1.243,6.362,6.362,0,0,1-2.2.37C300.558,264.73,298.892,263.7,298.892,260.631Z" transform="translate(-258.48 -245.052)" fill="#fff"/>
|
||||
<path id="Tracé_375" data-name="Tracé 375" d="M335.893,272.373a1.226,1.226,0,0,1-.608-1.111,1.281,1.281,0,0,1,1.3-1.3,1.4,1.4,0,0,1,.688.185,7.372,7.372,0,0,0,4.02,1.349c1.375,0,2.169-.582,2.169-1.508v-.053c0-1.084-1.481-1.454-3.121-1.957-2.063-.582-4.364-1.428-4.364-4.1v-.053c0-2.645,2.2-4.258,4.972-4.258a9.6,9.6,0,0,1,4.39,1.137,1.356,1.356,0,0,1,.767,1.217,1.287,1.287,0,0,1-1.322,1.3,1.256,1.256,0,0,1-.635-.159,7.615,7.615,0,0,0-3.28-.952c-1.243,0-1.957.582-1.957,1.375v.053c0,1.031,1.508,1.455,3.147,1.984,2.037.634,4.337,1.56,4.337,4.073v.053c0,2.936-2.274,4.39-5.184,4.39A9.544,9.544,0,0,1,335.893,272.373Z" transform="translate(-285.802 -254.335)" fill="#fff"/>
|
||||
<path id="Tracé_376" data-name="Tracé 376" d="M410.736,260.631v-7.353h-.529a1.375,1.375,0,1,1,0-2.751h.529v-2.38a1.6,1.6,0,0,1,3.2,0v2.38h2.513a1.376,1.376,0,1,1,0,2.751h-2.513v6.85a1.524,1.524,0,0,0,1.719,1.746,7.578,7.578,0,0,0,.794-.079,1.349,1.349,0,0,1,1.349,1.323,1.377,1.377,0,0,1-.846,1.243,6.364,6.364,0,0,1-2.2.37C412.4,264.73,410.736,263.7,410.736,260.631Z" transform="translate(-338.27 -245.052)" fill="#fff"/>
|
||||
<path id="Tracé_377" data-name="Tracé 377" d="M463.107,272.518a1.613,1.613,0,0,1-3.227,0V271.8a5.026,5.026,0,0,1-4.364,2.46c-3.147,0-4.972-2.116-4.972-5.369v-7.432a1.6,1.6,0,1,1,3.2,0v6.48c0,2.169,1.085,3.385,2.989,3.385,1.851,0,3.147-1.27,3.147-3.438v-6.427a1.6,1.6,0,0,1,1.613-1.613,1.62,1.62,0,0,1,1.613,1.613Z" transform="translate(-368.028 -254.533)" fill="#fff"/>
|
||||
<path id="Tracé_378" data-name="Tracé 378" d="M508.312,242.886A1.559,1.559,0,0,1,509.9,241.3a1.581,1.581,0,0,1,1.613,1.587V249.1a5.59,5.59,0,0,1,4.761-2.619c3.28,0,6.48,2.592,6.48,7.247v.053c0,4.628-3.174,7.247-6.48,7.247a5.7,5.7,0,0,1-4.761-2.46v.714a1.6,1.6,0,0,1-3.2,0Zm11.188,10.9v-.053c0-2.7-1.825-4.47-3.994-4.47a4.211,4.211,0,0,0-4.073,4.47v.053a4.211,4.211,0,0,0,4.073,4.47C517.7,258.253,519.5,256.534,519.5,253.783Z" transform="translate(-409.24 -241.299)" fill="#fff"/>
|
||||
<path id="Tracé_379" data-name="Tracé 379" d="M574.724,273.96a6.968,6.968,0,0,1-7.167-7.247v-.053c0-3.994,2.83-7.273,6.824-7.273a6.606,6.606,0,0,1,6.638,6.877,1.5,1.5,0,0,1-1.508,1.534h-8.754a3.9,3.9,0,0,0,4.02,3.544,5.02,5.02,0,0,0,3.306-1.217,1.191,1.191,0,0,1,.819-.291,1.259,1.259,0,0,1,1.27,1.3,1.4,1.4,0,0,1-.423.979A7.171,7.171,0,0,1,574.724,273.96Zm3.174-8.279c-.212-2.063-1.428-3.676-3.544-3.676-1.957,0-3.333,1.507-3.623,3.676Z" transform="translate(-451.506 -254.203)" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Groupe_7908" data-name="Groupe 7908" transform="translate(234.216 208.083)">
|
||||
<circle id="Ellipse_2" data-name="Ellipse 2" cx="5.337" cy="5.337" r="5.337" transform="translate(15.103 23.449)" fill="#fff"/>
|
||||
<circle id="Ellipse_3" data-name="Ellipse 3" cx="5.337" cy="5.337" r="5.337" transform="translate(15.103 9.198)" fill="#fff"/>
|
||||
<circle id="Ellipse_4" data-name="Ellipse 4" cx="6.416" cy="6.416" r="6.416" transform="translate(0 15.217)" fill="#fff"/>
|
||||
<circle id="Ellipse_5" data-name="Ellipse 5" cx="6.416" cy="6.416" r="6.416" fill="#fff"/>
|
||||
<circle id="Ellipse_6" data-name="Ellipse 6" cx="6.416" cy="6.416" r="6.416" transform="translate(0 30.376)" fill="#fff"/>
|
||||
<circle id="Ellipse_7" data-name="Ellipse 7" cx="4.429" cy="4.429" r="4.429" transform="translate(27.594 17.204)" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
@@ -5,9 +5,6 @@ import {
|
||||
UPLOAD_MEDIA_PRES_REQUEST,
|
||||
UPLOAD_MEDIA_PRES_FAILURE,
|
||||
UPLOAD_MEDIA_PRES_SUCCESS,
|
||||
UPLOAD_MEDIA_CV_REQUEST,
|
||||
UPLOAD_MEDIA_CV_FAILURE,
|
||||
UPLOAD_MEDIA_CV_SUCCESS,
|
||||
} from "../types";
|
||||
|
||||
export function media(state = {
|
||||
@@ -47,23 +44,7 @@ export function media(state = {
|
||||
errors: action.errors,
|
||||
loading: false
|
||||
};
|
||||
case UPLOAD_MEDIA_CV_REQUEST:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
};
|
||||
case UPLOAD_MEDIA_CV_SUCCESS:
|
||||
return {
|
||||
...state,
|
||||
...action.res.data,
|
||||
loading: false
|
||||
};
|
||||
case UPLOAD_MEDIA_CV_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
errors: action.errors,
|
||||
loading: false
|
||||
};
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
import {
|
||||
UPLOAD_MEDIA_CV_REQUEST,
|
||||
UPLOAD_MEDIA_CV_FAILURE,
|
||||
UPLOAD_MEDIA_CV_SUCCESS,
|
||||
} from "../types";
|
||||
|
||||
export function mediaCv(state = {
|
||||
}, action = {}) {
|
||||
switch (action.type) {
|
||||
case UPLOAD_MEDIA_CV_REQUEST:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
};
|
||||
case UPLOAD_MEDIA_CV_SUCCESS:
|
||||
return {
|
||||
...state,
|
||||
...action.res.data,
|
||||
loading: false
|
||||
};
|
||||
case UPLOAD_MEDIA_CV_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
errors: action.errors,
|
||||
loading: false
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
export const mediaCvErrorsSelector = state => {return !!state.mediaCv.errors ?state.mediaCv.errors.response.data:null};
|
||||
|
||||
export const errorMessageSelector = (state) => {
|
||||
let err = mediaCvErrorsSelector(state)
|
||||
if (!!!err)
|
||||
return null;
|
||||
switch(err.code)
|
||||
{
|
||||
case 500:
|
||||
return {message: "Le téléversement de votre video à échoué."}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import { emphasisCompanies } from "./reducers/emphasisCompanies";
|
||||
import { answer } from "./reducers/answer";
|
||||
import { answers } from "./reducers/answers";
|
||||
import { media } from "./reducers/media";
|
||||
import { mediaCv } from "./reducers/mediaCv";
|
||||
|
||||
export const exampleInitialState = {
|
||||
user: {
|
||||
@@ -41,6 +42,9 @@ export const exampleInitialState = {
|
||||
},
|
||||
media:{
|
||||
|
||||
},
|
||||
mediaCv:{
|
||||
|
||||
},
|
||||
answers:{
|
||||
data: {}
|
||||
@@ -57,5 +61,6 @@ export default combineReducers({
|
||||
emphasisCompanies,
|
||||
answer,
|
||||
media,
|
||||
mediaCv,
|
||||
answers
|
||||
});
|
||||
|
||||
@@ -26,9 +26,13 @@ import {
|
||||
uploadMediaFailure,
|
||||
uploadMediaPresSuccess,
|
||||
uploadMediaPresFailure,
|
||||
|
||||
} from "../actions/media";
|
||||
|
||||
import {
|
||||
uploadMediaCvSuccess,
|
||||
uploadMediaCvFailure
|
||||
} from "../actions/media";
|
||||
} from "../actions/mediaCv";
|
||||
import AuthRouter from "../pages/AuthRouter";
|
||||
|
||||
export function* postAdAnswerRequestSaga(action) {
|
||||
@@ -101,7 +105,7 @@ export function* uploadMediaPresSaga(action) {
|
||||
export function* uploadMediaCvSaga(action) {
|
||||
try {
|
||||
|
||||
const res = yield call(api.medias.uploadMediaCv, action.payload);
|
||||
const res = yield call(api.cv.uploadMediaCv, action.payload);
|
||||
|
||||
if (!!res.data)
|
||||
yield put(uploadMediaCvSuccess(res));
|
||||
|
||||
@@ -168,7 +168,7 @@ app.prepare()
|
||||
|
||||
server.get('/Player', (req, res) => {
|
||||
const actualPage = '/Player'
|
||||
const queryParams = { id: req.query.id, videoId:req.query.videoId, type:req.query.type }
|
||||
const queryParams = { id: req.query.id, url: req.query.url, videoId:req.query.videoId, typeEntite:req.query.typeEntite, nameCompany:req.query.nameCompany, nameOffre:req.query.nameOffre }
|
||||
app.render(req, res, actualPage, queryParams)
|
||||
})
|
||||
|
||||
|
||||
@@ -25,12 +25,12 @@ exports.sendTransactionnelEmail = function () {
|
||||
"Messages":[
|
||||
{
|
||||
"From": {
|
||||
"Email": "l.laniau@talentstube.com",
|
||||
"Email": "dev@talentstube.com",
|
||||
"Name": "Laurent"
|
||||
},
|
||||
"To": [
|
||||
{
|
||||
"Email": "l.laniau@talentstube.com",
|
||||
"Email": "dev@talentstube.com",
|
||||
"Name": "Laurent"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -10,6 +10,14 @@ const formatDate = require("./formatDate");
|
||||
const robotsTxt = `# crawl setup
|
||||
User-agent: *
|
||||
Disallow: /Login*
|
||||
Disallow: /Help
|
||||
Disallow: /MentionsLegales
|
||||
Disallow: /Inscription
|
||||
Disallow: /Cgu
|
||||
Disallow: /Confidentialite
|
||||
Disallow: /Candidature
|
||||
Disallow: /CandidatureValidation
|
||||
Disallow: /profileStep
|
||||
# Sitemap
|
||||
Sitemap: https://www.talentstube.com/sitemap_local.xml`
|
||||
|
||||
@@ -33,8 +41,8 @@ const sitemapXml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
)}
|
||||
</urlset>`;
|
||||
|
||||
fs.writeFileSync("out/sitemap_local.xml", sitemapXml);
|
||||
console.log("sitemap_local.xml saved!");
|
||||
// fs.writeFileSync("out/sitemap_local.xml", sitemapXml);
|
||||
//console.log("sitemap_local.xml saved!");
|
||||
|
||||
// GOOGLE's VERIFY HTML
|
||||
// const googleVerify = `google-site-verification: google8f5d91a719b65f09.html`;
|
||||
|
||||
@@ -16,7 +16,7 @@ function setup() {
|
||||
const tranport = setup();
|
||||
const email = {
|
||||
from: process.env.EMAIL_FROM,
|
||||
to: "l.laniau@talentstube.com",
|
||||
to: "contact@talentstube.com",
|
||||
subject: "PWA feedback 💌⚡️",
|
||||
text: `
|
||||
Hello Team,
|
||||
|
||||