Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c3ced21cce | |||
| a156050184 | |||
| 535069bb64 | |||
| e4603f4ca8 | |||
| cab481cd2f | |||
| 34d1384fb7 | |||
| 4b2fabd4b4 | |||
| 130fb89c5f | |||
| eeee4d3f45 | |||
| 7f2c8374a4 | |||
| e380dec152 | |||
| 58bf654651 | |||
| ead5370495 | |||
| ce8f8660f3 | |||
| 28fbf3a013 | |||
| 726cd78bd3 | |||
| 70a0e47d28 | |||
| d338cfaad4 | |||
| 1815b2834e | |||
| 27ac00bafb | |||
| 6a7024d5ac | |||
| 485ccece1e | |||
| 1fd45a00a3 | |||
| 36571b5cca | |||
| 7ad96db928 | |||
| 5ce9f108cd | |||
| 99bb737647 | |||
| e2ef540aac | |||
| 6e6119ffaf | |||
| 473edf7472 | |||
| 96b08352a0 | |||
| 7a45d19d2b | |||
| c73b08c1aa | |||
| b6e4347abb |
+27
-27
@@ -1,13 +1,13 @@
|
||||
import {
|
||||
FETCH_ADS_REQUEST,
|
||||
FETCH_ADS_SUCCESS,
|
||||
FETCH_ADS_FAILURE,
|
||||
FETCH_AD_REQUEST,
|
||||
FETCH_AD_SUCCESS,
|
||||
FETCH_AD_FAILURE,
|
||||
FETCH_EMPHASIS_ADS_REQUEST,
|
||||
FETCH_EMPHASIS_ADS_SUCCESS,
|
||||
FETCH_EMPHASIS_ADS_FAILURE,
|
||||
FETCH_JOBS_REQUEST,
|
||||
FETCH_JOBS_SUCCESS,
|
||||
FETCH_JOBS_FAILURE,
|
||||
FETCH_JOB_REQUEST,
|
||||
FETCH_JOB_SUCCESS,
|
||||
FETCH_JOB_FAILURE,
|
||||
FETCH_EMPHASIS_JOBS_REQUEST,
|
||||
FETCH_EMPHASIS_JOBS_SUCCESS,
|
||||
FETCH_EMPHASIS_JOBS_FAILURE,
|
||||
CLEAR_AD,
|
||||
COUNT_AD_VIEW,
|
||||
TOGGLE_PROMOTED_FILTER_ADS
|
||||
@@ -28,52 +28,52 @@ export const togglePromotedFilterRequest = () => ({
|
||||
|
||||
//Ads list
|
||||
|
||||
export const fetchAdsRequest = (payload) => ({
|
||||
type: FETCH_ADS_REQUEST,
|
||||
export const fetchJobsRequest = (payload) => ({
|
||||
type: FETCH_JOBS_REQUEST,
|
||||
payload
|
||||
});
|
||||
|
||||
export const fetchAdsSuccess = res => ({
|
||||
type: FETCH_ADS_SUCCESS,
|
||||
export const fetchJobsSuccess = res => ({
|
||||
type: FETCH_JOBS_SUCCESS,
|
||||
res
|
||||
});
|
||||
|
||||
export const fetchAdsFailure = res => ({
|
||||
type: FETCH_ADS_FAILURE,
|
||||
export const fetchJobsFailure = res => ({
|
||||
type: FETCH_JOBS_FAILURE,
|
||||
res
|
||||
});
|
||||
|
||||
//Ads list
|
||||
|
||||
export const fetchEmphasisAdsRequest = (payload) => ({
|
||||
type: FETCH_EMPHASIS_ADS_REQUEST,
|
||||
export const fetchEmphasisJobsRequest = (payload) => ({
|
||||
type: FETCH_EMPHASIS_JOBS_REQUEST,
|
||||
payload
|
||||
});
|
||||
|
||||
export const fetchEmphasisAdsSuccess = res => ({
|
||||
type: FETCH_EMPHASIS_ADS_SUCCESS,
|
||||
export const fetchEmphasisJobsSuccess = res => ({
|
||||
type: FETCH_EMPHASIS_JOBS_SUCCESS,
|
||||
res
|
||||
});
|
||||
|
||||
export const fetchEmphasisAdsFailure = res => ({
|
||||
type: FETCH_EMPHASIS_ADS_FAILURE,
|
||||
export const fetchEmphasisJobsFailure = res => ({
|
||||
type: FETCH_EMPHASIS_JOBS_FAILURE,
|
||||
res
|
||||
});
|
||||
|
||||
//Single ad
|
||||
|
||||
export const fetchAdRequest = payload => ({
|
||||
type: FETCH_AD_REQUEST,
|
||||
export const fetchJobRequest = payload => ({
|
||||
type: FETCH_JOB_REQUEST,
|
||||
payload
|
||||
});
|
||||
|
||||
export const fetchAdSuccess = res => ({
|
||||
type: FETCH_AD_SUCCESS,
|
||||
export const fetchJobSuccess = res => ({
|
||||
type: FETCH_JOB_SUCCESS,
|
||||
res
|
||||
});
|
||||
|
||||
export const fetchAdFailure = res => ({
|
||||
type: FETCH_AD_FAILURE,
|
||||
export const fetchJobFailure = res => ({
|
||||
type: FETCH_JOB_FAILURE,
|
||||
res
|
||||
});
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@ import {
|
||||
POST_AD_ANSWER_REQUEST,
|
||||
POST_AD_ANSWER_FAILURE,
|
||||
POST_AD_ANSWER_SUCCESS,
|
||||
FETCH_ADS_ANSWER_REQUEST,
|
||||
FETCH_ADS_ANSWER_SUCCESS,
|
||||
FETCH_ADS_ANSWER_FAILURE,
|
||||
FETCH_JOBS_ANSWER_REQUEST,
|
||||
FETCH_JOBS_ANSWER_SUCCESS,
|
||||
FETCH_JOBS_ANSWER_FAILURE,
|
||||
FETCH_ANSWER_REQUEST,
|
||||
FETCH_ANSWER_SUCCESS,
|
||||
FETCH_ANSWER_FAILURE,
|
||||
@@ -47,19 +47,19 @@ export const postMessageAnswerSuccess = res => ({
|
||||
});
|
||||
|
||||
|
||||
export const fetchAdsAnsweredRequest = payload => ({
|
||||
type: FETCH_ADS_ANSWER_REQUEST,
|
||||
export const fetchJobsAnsweredRequest = payload => ({
|
||||
type: FETCH_JOBS_ANSWER_REQUEST,
|
||||
payload
|
||||
});
|
||||
|
||||
export const fetchAdsAnsweredSuccess = res => ({
|
||||
type: FETCH_ADS_ANSWER_SUCCESS,
|
||||
export const fetchJobsAnsweredSuccess = res => ({
|
||||
type: FETCH_JOBS_ANSWER_SUCCESS,
|
||||
res
|
||||
});
|
||||
|
||||
|
||||
export const fetchAdsAnsweredFailure = errors => ({
|
||||
type: FETCH_ADS_ANSWER_FAILURE,
|
||||
export const fetchJobsAnsweredFailure = errors => ({
|
||||
type: FETCH_JOBS_ANSWER_FAILURE,
|
||||
errors
|
||||
});
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ export default function ChatCard(props) {
|
||||
className={classes.messageDate}
|
||||
align="center"
|
||||
>
|
||||
Envoyée le {(new Date(props.message.c_time)).toLocaleDateString("fr-FR")} à {(new Date(props.message.c_time)).toLocaleTimeString("fr-FR")}
|
||||
Envoyé le {(new Date(props.message.c_time)).toLocaleDateString("fr-FR")} à {(new Date(props.message.c_time)).toLocaleTimeString("fr-FR")}
|
||||
</Typography>
|
||||
</Fragment>
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@ import AssignmentIcon from '@material-ui/icons/Assignment';
|
||||
import RoomIcon from '@material-ui/icons/Room';
|
||||
import LocationOnIcon from '@material-ui/icons/LocationOn';
|
||||
import BusinessCenterIcon from '@material-ui/icons/BusinessCenter';
|
||||
import Business from '@material-ui/icons/Business';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
|
||||
const variantIcon = {
|
||||
@@ -13,6 +14,7 @@ const variantIcon = {
|
||||
room: RoomIcon,
|
||||
location_on: LocationOnIcon,
|
||||
business_center: BusinessCenterIcon,
|
||||
business: Business,
|
||||
};
|
||||
|
||||
const styles = theme => ({
|
||||
|
||||
@@ -4,14 +4,18 @@ import { withStyles } from '@material-ui/core/styles';
|
||||
import AssignmentIcon from '@material-ui/icons/Assignment';
|
||||
import RoomIcon from '@material-ui/icons/Room';
|
||||
import LocationOnIcon from '@material-ui/icons/LocationOn';
|
||||
import WatchLater from '@material-ui/icons/WatchLater';
|
||||
import BusinessCenterIcon from '@material-ui/icons/BusinessCenter';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import Business from '@material-ui/icons/Business';
|
||||
|
||||
const variantIcon = {
|
||||
assignment: AssignmentIcon,
|
||||
room: RoomIcon,
|
||||
location_on: LocationOnIcon,
|
||||
watch_later: WatchLater,
|
||||
business_center: BusinessCenterIcon,
|
||||
business: Business,
|
||||
};
|
||||
|
||||
const styles = theme => ({
|
||||
|
||||
@@ -5,19 +5,24 @@ const JobPosting = props => {
|
||||
return (
|
||||
|
||||
<JobPostingJsonLd
|
||||
datePosted="2020-01-06T03:37:40Z"
|
||||
datePosted={props.job_date}
|
||||
description={props.job_description}
|
||||
hiringOrganization={{
|
||||
name: props.job_brand,
|
||||
sameAs: props.job_brand_link,
|
||||
}}
|
||||
jobLocation={{
|
||||
addressLocality: props.job_location,
|
||||
addressLocality: props.job_ville,
|
||||
addressRegion: props.job_dept,
|
||||
// postalCode: props.job_location,
|
||||
streetAddress: props.job_location,
|
||||
addressCountry: props.job_pays,
|
||||
|
||||
}}
|
||||
title={props.job_title}
|
||||
validThrough="2020-01-06"
|
||||
validThrough={props.job_date_fin}
|
||||
applicantLocationRequirements="FR"
|
||||
employmentType = {props.job_contract_type + ","+props.job_temps_type }
|
||||
/>
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ const OgHead = props => {
|
||||
<Head>
|
||||
<title key="title">{props.seo_title}</title>
|
||||
<meta name="robots" content="noindex, nofollow"></meta>
|
||||
<meta name="description" kenoindexy="description" content={props.seo_title} />
|
||||
<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" />
|
||||
@@ -24,7 +24,11 @@ const OgHead = props => {
|
||||
<meta name="twitter:title" content={props.seo_title}/>
|
||||
<meta name="twitter:description" content={props.seo_title}/>
|
||||
<meta name="twitter:image" content={props.image}/>
|
||||
<link rel="canonical" href={ props.seo_url} />
|
||||
<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} /> */}
|
||||
|
||||
</Head>
|
||||
|
||||
)
|
||||
|
||||
@@ -7,8 +7,11 @@ import { connect } from 'react-redux'
|
||||
import { updateUserRequest } from '../../actions/user'
|
||||
import getConfig from 'next/config'
|
||||
import Validator from "validator";
|
||||
import AccountProfile from '../organisms/AccountProfile';
|
||||
import ReactHtmlParser, { processNodes, convertNodeToElement, htmlparser2 } from 'react-html-parser';
|
||||
|
||||
import {
|
||||
Button,
|
||||
} from '@material-ui/core';
|
||||
|
||||
const styles = theme => ({
|
||||
container: {
|
||||
@@ -58,7 +61,7 @@ const styles = theme => ({
|
||||
const { publicRuntimeConfig } = getConfig();
|
||||
|
||||
//https://xd.adobe.com/view/ba98331a-9145-4d67-7e27-25a36e519ef4-cca9/screen/a96779d7-bdb3-410a-8f19-e6987acb98ee/Candidature-Step-3
|
||||
class Accountdetails extends Component {
|
||||
class AccountEtape1 extends Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -110,7 +113,8 @@ class Accountdetails extends Component {
|
||||
onBlur(e) {
|
||||
console.log("blur")
|
||||
this.setState({ [e.target.name]: e.target.value });
|
||||
this.soumettre();
|
||||
|
||||
this.soumettre(e.target.name, "unitaire");
|
||||
}
|
||||
|
||||
|
||||
@@ -156,12 +160,16 @@ class Accountdetails extends Component {
|
||||
onSubmit = (e) => {
|
||||
|
||||
e.preventDefault();
|
||||
this.soumettre(e);
|
||||
console.log("submit")
|
||||
console.log(e.keyCode)
|
||||
|
||||
this.soumettre(e.target.name, "global")
|
||||
|
||||
}
|
||||
soumettre(e){
|
||||
|
||||
const errors = this.validate(this.state);
|
||||
soumettre(champ, type){
|
||||
console.log("soumettre");
|
||||
console.log(champ);
|
||||
const errors = this.validate(this.state, champ, type);
|
||||
const success = {};
|
||||
this.setState({ errors });
|
||||
if (!this.state.errors || !this.state.errors.message){
|
||||
@@ -189,18 +197,19 @@ class Accountdetails extends Component {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
validate = data => {
|
||||
validate(data,champ, type){
|
||||
console.log("valdiate")
|
||||
console.log(champ);
|
||||
const errors = {};
|
||||
errors.message ="";
|
||||
//if (!Validator.isEmail(data.currentJob)) errors.message += "Le poste actuel doit etre un email\n";
|
||||
if (!data.firstname || data.firstname==="") errors.message += "Veuillez saisir votre prénom<br />";
|
||||
if (!data.lastname || data.lastname==="") errors.message += " Veuillez saisir saisir votre nom<br />";
|
||||
if (!data.phone || data.phone==="") errors.message += "Veuillez saisir un numéro de téléphone valide<br />";
|
||||
if (!data.currentJob || data.currentJob==="") errors.message += "Veuillez saisir votre intitulé de poste actuel ou poste recherché<br />";
|
||||
if ((data.zipCode && data.zipCode!="") && !Validator.isPostalCode(data.zipCode, "FR")) errors.message += "Le code postal n'est pas correct<br />";
|
||||
if ((data.website && data.website!="") && !Validator.isURL(data.website)) errors.message += " Veuillez ajouter un site internet avec une url valide<br />";
|
||||
if (!Validator.isMobilePhone(data.phone, "fr-FR") && !Validator.isNumeric(data.phone, "fr-FR")) errors.message += "Le téléphone n'est pas correct<br />";
|
||||
if (type=="global" || (champ=="firstname" && data.firstname=="")) errors.message += "Veuillez saisir votre prénom<br />";
|
||||
if (type=="global" || (champ=="lastname" && data.lastname=="")) errors.message += " Veuillez saisir votre nom<br />";
|
||||
if (type=="global" || (champ=="phone" && data.phone=="")) errors.message += "Veuillez saisir un numéro de téléphone<br />";
|
||||
if (type=="global" || (champ=="currentJob" && data.currentJob=="")) errors.message += "Veuillez saisir votre intitulé de poste actuel ou poste recherché<br />";
|
||||
if (type=="global" || (champ=="zipCode" && (data.zipCode && data.zipCode!="") && !Validator.isPostalCode(data.zipCode, "FR"))) errors.message += "Le code postal n'est pas correct<br />";
|
||||
// if ((data.website && data.website!="") && !Validator.isURL(data.website)) errors.message += " Veuillez ajouter un site internet avec une url valide<br />";
|
||||
if (!Validator.isMobilePhone(data.phone, "fr-FR") && !Validator.isNumeric(data.phone, "fr-FR")) errors.message += "Le téléphone n'est pas correct<br />";
|
||||
//console.log(errors.email);
|
||||
|
||||
return errors;
|
||||
@@ -221,18 +230,18 @@ class Accountdetails extends Component {
|
||||
|
||||
|
||||
AfficherSuccess() {
|
||||
if (this.state.success && this.state.success.length != 0 && this.state.success.message != "") {
|
||||
return (
|
||||
<Snackbar open={open} autoHideDuration={1000} onClose={() => this.setState({open: false})}>
|
||||
<Alert onClose={() => this.setState({open: false})} severity="success">
|
||||
{ReactHtmlParser(this.state.success.message)}
|
||||
</Alert>
|
||||
</Snackbar>
|
||||
// if (this.state.success && this.state.success.length != 0 && this.state.success.message != "") {
|
||||
// return (
|
||||
// <Snackbar open={open} autoHideDuration={1000} onClose={() => this.setState({open: false})}>
|
||||
// <Alert onClose={() => this.setState({open: false})} severity="success">
|
||||
// {ReactHtmlParser(this.state.success.message)}
|
||||
// </Alert>
|
||||
// </Snackbar>
|
||||
|
||||
|
||||
);
|
||||
// );
|
||||
|
||||
}
|
||||
// }
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -249,9 +258,17 @@ class Accountdetails extends Component {
|
||||
this.props.updateUserPictureRequest(data)
|
||||
}
|
||||
|
||||
|
||||
|
||||
render() {
|
||||
const { classes, user } = this.props
|
||||
const logoUrl = user.picture;
|
||||
function refresh() {
|
||||
document
|
||||
.location
|
||||
.reload(true);
|
||||
|
||||
}
|
||||
return (
|
||||
<section className={classes.container}>
|
||||
<form className={classes.form}
|
||||
@@ -351,7 +368,7 @@ class Accountdetails extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
value={this.state.currentJob && this.state.currentJob !='null' ? this.state.currentJob : ''}
|
||||
value={this.state.currentJob ? this.state.currentJob : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -363,7 +380,7 @@ class Accountdetails extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
value={this.state.address1 && this.state.address1 !='null' ? this.state.address1 : ''}
|
||||
value={this.state.address1 ? this.state.address1 : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -375,7 +392,7 @@ class Accountdetails extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
value={this.state.address2 && this.state.address2 !='null' ? this.state.address2 : ''}
|
||||
value={this.state.address2 ? this.state.address2 : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -387,7 +404,7 @@ class Accountdetails extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.textFieldSmall }}
|
||||
variant="outlined"
|
||||
value={this.state.zipCode && this.state.zipCode !='null' ? this.state.zipCode : ''}
|
||||
value={this.state.zipCode ? this.state.zipCode : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -399,7 +416,7 @@ class Accountdetails extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.textFieldSmall }}
|
||||
variant="outlined"
|
||||
value={this.state.city && this.state.city !='null' ? this.state.city : ''}
|
||||
value={this.state.city ? this.state.city : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -411,7 +428,7 @@ class Accountdetails extends Component {
|
||||
className={classes.textField}
|
||||
classes={{ root: classes.textFieldSmall }}
|
||||
variant="outlined"
|
||||
value={this.state.country && this.state.country !='null' ? this.state.country : ''}
|
||||
value={this.state.country ? this.state.country : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -425,7 +442,7 @@ class Accountdetails extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://www.linkedin.com/in/"
|
||||
value={this.state.linkedin && this.state.linkedin !='null' ? this.state.linkedin : ''}
|
||||
value={this.state.linkedin ? this.state.linkedin : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
|
||||
@@ -439,7 +456,7 @@ class Accountdetails extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://twitter.com/.."
|
||||
value={this.state.twitter && this.state.twitter !='null' ? this.state.twitter : ''}
|
||||
value={this.state.twitter ? this.state.twitter : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
@@ -452,10 +469,18 @@ class Accountdetails extends Component {
|
||||
classes={{ root: classes.rootTextfield }}
|
||||
variant="outlined"
|
||||
placeholder="http://monsite.fr"
|
||||
value={this.state.website && this.state.website !='null' ? this.state.website : ''}
|
||||
value={this.state.website ? this.state.website : ''}
|
||||
onChange={this.handleChange}
|
||||
onBlur={this.onBlur}
|
||||
/>
|
||||
<Button
|
||||
type="submit"
|
||||
variant="contained"
|
||||
color="primary"
|
||||
|
||||
className={classes.button}>
|
||||
Enregistrer
|
||||
</Button>
|
||||
</form>
|
||||
{/* <div id="F" className={classes.foot}>
|
||||
<Button variant="contained" className={classes.button + ' cypButtonSendApplication'} onClick={this.onSubmit}>Mettre à jour!</Button>
|
||||
@@ -475,4 +500,4 @@ function mapStateToProps(state, ownProps) {
|
||||
};
|
||||
}
|
||||
|
||||
export default withStyles(styles)(connect(mapStateToProps, { updateUserRequest })(Accountdetails))
|
||||
export default withStyles(styles)(connect(mapStateToProps, { updateUserRequest })(AccountEtape1));
|
||||
|
||||
@@ -12,7 +12,7 @@ import {fetchCompanyRequest} from '../../actions/companies'
|
||||
import {fetchCurrentUserRequest} from '../../actions/user'
|
||||
import VideoVimeo from '../atoms/VideoVimeo'
|
||||
import Router from 'next/router'
|
||||
import Loader from '../templates/loader'
|
||||
import LoaderVideo from '../templates/loaderVideo'
|
||||
import Ar from "lodash/array"
|
||||
import Snackbar from '@material-ui/core/Snackbar';
|
||||
import { Alert, AlertTitle } from '@material-ui/lab';
|
||||
@@ -197,7 +197,7 @@ class Etape2 extends React.Component {
|
||||
<section className={classes.container}>
|
||||
<Fragment>
|
||||
{this.AfficherSuccess()}
|
||||
{ loading ? <Loader/> : <div></div> }
|
||||
{ loading ? <LoaderVideo/> : <div></div> }
|
||||
|
||||
<div className={classes.root}>
|
||||
<Hidden xsUp>
|
||||
@@ -210,9 +210,39 @@ class Etape2 extends React.Component {
|
||||
alignItems="center"
|
||||
spacing={2}>
|
||||
<Grid item xs={12} sm={12} md={12} lg={6} lg={6}>
|
||||
|
||||
|
||||
|
||||
{ /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ?
|
||||
(
|
||||
<Fragment>
|
||||
<input
|
||||
type="file" accept="video/*" capture="camcorder"
|
||||
className={classes.input}
|
||||
style={{ display: 'none' }}
|
||||
id="record-button-file"
|
||||
multiple
|
||||
onChange={this.inputCamRecorderChange}
|
||||
/>
|
||||
<label htmlFor="record-button-file">
|
||||
<Button component="span" className={classes.captureButton} classes={{ root: classes.rootButton }}>
|
||||
<img alt="talents-tube" src='/static/images/capture.svg' className={classes.iconButton} />
|
||||
<Typography align="left" className={classes.textButton}>
|
||||
Je <span className={classes.underlined}>réalise</span> ma vidéo de présentation
|
||||
</Typography>
|
||||
<KeyboardArrowRightIcon className={ classes.InputKeyboardArrowRightIcon }/>
|
||||
</Button>
|
||||
</label>
|
||||
</Fragment>
|
||||
):
|
||||
(
|
||||
|
||||
|
||||
<div className={classes.recorderContainer}>
|
||||
<Recorder uploader={this.props.uploadMediaPres} titreBouton="Remplacer ma vidéo"/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</Grid>
|
||||
<Grid item xs={12} sm={12} md={12} lg={6} xl={6}>
|
||||
<div>
|
||||
@@ -253,7 +283,7 @@ class Etape2 extends React.Component {
|
||||
src='/statique/images/Import.svg'
|
||||
className={classes.iconButton}/>
|
||||
<Typography align="left" className={classes.textButton}>
|
||||
J'<span className={classes.underlined}>importe</span> ma vidéo de réponse
|
||||
J'<span className={classes.underlined}>importe</span> ma vidéo de présentation
|
||||
|
||||
</Typography>
|
||||
<KeyboardArrowDownIcon className={classes.InputKeyboardArrowDownIcon}/>
|
||||
|
||||
@@ -8,7 +8,7 @@ import { makeStyles } from '@material-ui/styles';
|
||||
import { Button, Typography, Divider, Hidden } from '@material-ui/core';
|
||||
import KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';
|
||||
import KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';
|
||||
import Loader from '../../components/templates/loader'
|
||||
import LoaderVideo from '../../components/templates/loaderVideo'
|
||||
import Snack from '../../components/atoms/snack';
|
||||
import Snackbar from '@material-ui/core/Snackbar';
|
||||
import { Alert, AlertTitle } from '@material-ui/lab';
|
||||
@@ -47,7 +47,7 @@ const styles = theme => ({
|
||||
backgroundColor: theme.palette.secondary.main,
|
||||
padding: theme.spacing(3, 2),
|
||||
margin: theme.spacing(1),
|
||||
width: "400px",
|
||||
width: "370px",
|
||||
boxShadow: '0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1' +
|
||||
'px rgba(0, 0, 0, 0.14)',
|
||||
'&:hover': {
|
||||
@@ -134,22 +134,44 @@ class Etape3 extends React.Component {
|
||||
|
||||
AfficherLienCv() {
|
||||
console.log("afficher lien");
|
||||
if (this.props.user.cv !="") {
|
||||
if (this.state.cvLink !="") {
|
||||
|
||||
return (
|
||||
|
||||
<Fragment>
|
||||
<Hidden> </Hidden>
|
||||
<Hidden> </Hidden>
|
||||
<Divider style={{width:400+"px"}}/>
|
||||
|
||||
<Hidden> </Hidden>
|
||||
<Hidden> </Hidden>
|
||||
<Card variant="" style={{
|
||||
width:370+"px",
|
||||
boxShadow: '0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1' +
|
||||
'px rgba(0, 0, 0, 0.14)',
|
||||
marginLeft : '10px',
|
||||
marginTop:'10px'
|
||||
|
||||
}}>
|
||||
<Hidden> </Hidden>
|
||||
<Card variant="outlined" style={{width:400+"px"}}>
|
||||
<CardActions>
|
||||
<Button size="small">Mon CV numérique</Button>
|
||||
<Button size="small">MON CV</Button>
|
||||
</CardActions>
|
||||
<CardContent>
|
||||
<Typography>
|
||||
<a href={publicRuntimeConfig.frontServerUrl + publicRuntimeConfig.postedContentCv + this.state.cvLink} target="_blank">Lien vers le cv téléchargé</a><br />
|
||||
<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>
|
||||
</CardContent>
|
||||
@@ -169,7 +191,7 @@ class Etape3 extends React.Component {
|
||||
return (
|
||||
<Fragment>
|
||||
{ loading ?
|
||||
<Loader /> :
|
||||
<LoaderVideo /> :
|
||||
<Fragment>
|
||||
{this.AfficherSuccess()}
|
||||
|
||||
@@ -185,11 +207,13 @@ class Etape3 extends React.Component {
|
||||
<Button component="span" className={classes.importButton} classes={{ root: classes.rootButton }}>
|
||||
<img alt="talents-tube" src='/statique/images/Import-cv-candidat.svg' className={classes.iconButton} />
|
||||
<Typography className={classes.textButton}>
|
||||
J'<span className={classes.underlined}>importe</span> mon CV au format PDF
|
||||
J'<span className={classes.underlined}>importe</span> mon CV
|
||||
</Typography>
|
||||
<KeyboardArrowDownIcon className={ classes. InputKeyboardArrowDownIcon }/>
|
||||
</Button>
|
||||
|
||||
</label>
|
||||
<Hidden> </Hidden>
|
||||
{this.AfficherLienCv()}
|
||||
|
||||
</Fragment>
|
||||
@@ -208,7 +232,7 @@ Etape3.getInitialProps = function (context) {
|
||||
context.store.dispatch(fetchCurrentUserRequest())
|
||||
|
||||
if(!!adId)
|
||||
context.store.dispatch(fetchAdRequest(adId))
|
||||
context.store.dispatch(fetchJobRequest(adId))
|
||||
else if(!!companyId)
|
||||
context.store.dispatch(fetchCompanyRequest(companyId))
|
||||
|
||||
|
||||
@@ -1,28 +1,31 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import clsx from 'clsx';
|
||||
import AccountStep from "../../components/organisms/AccountStep";
|
||||
// import AccountStep from "../../components/organisms/AccountStep";
|
||||
import AccountEtape1 from '../organisms/AccountEtape1';
|
||||
import AccountEtape2 from '../organisms/AccountEtape2';
|
||||
import AccountEtape3 from '../organisms/AccountEtape3';
|
||||
import {withStyles} from '@material-ui/core/styles';
|
||||
import Switch from '@material-ui/core/Switch';
|
||||
// import Switch from '@material-ui/core/Switch';
|
||||
import PhoneIcon from '@material-ui/icons/Phone';
|
||||
import MailIcon from '@material-ui/icons/Mail';
|
||||
import PublicIcon from '@material-ui/icons/Public';
|
||||
import DuoIcon from '@material-ui/icons/Duo';
|
||||
import LinkedInIcon from '@material-ui/icons/LinkedIn';
|
||||
import FormGroup from '@material-ui/core/FormGroup';
|
||||
import FormControlLabel from '@material-ui/core/FormControlLabel';
|
||||
import FormControl from '@material-ui/core/FormControl';
|
||||
import Facebook from '@material-ui/icons/Facebook';
|
||||
// import FormGroup from '@material-ui/core/FormGroup'; import FormControlLabel
|
||||
// from '@material-ui/core/FormControlLabel'; import FormControl from
|
||||
// '@material-ui/core/FormControl';
|
||||
import {updateUserRequest, updateUserPictureRequest} from '../../actions/user'
|
||||
import {makeStyles} from '@material-ui/styles';
|
||||
import {connect} from 'react-redux'
|
||||
import getConfig from 'next/config'
|
||||
import BottomNavigation from '@material-ui/core/BottomNavigation';
|
||||
import BottomNavigationAction from '@material-ui/core/BottomNavigationAction';
|
||||
// import BottomNavigationAction from
|
||||
// '@material-ui/core/BottomNavigationAction';
|
||||
import RefreshIcon from '@material-ui/icons/Refresh';
|
||||
import FavoriteIcon from '@material-ui/icons/Favorite';
|
||||
import LocationOnIcon from '@material-ui/icons/LocationOn';
|
||||
// import FavoriteIcon from '@material-ui/icons/Favorite'; import LocationOnIcon
|
||||
// from '@material-ui/icons/LocationOn';
|
||||
|
||||
import Box from '@material-ui/core/Box';
|
||||
|
||||
@@ -78,6 +81,29 @@ const useStyles = makeStyles(theme => ({
|
||||
progress: {
|
||||
marginTop: theme.spacing(2)
|
||||
},
|
||||
information: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
[
|
||||
theme
|
||||
.breakpoints
|
||||
.up('md')
|
||||
]: {
|
||||
display: 'flex',
|
||||
flexDirection: 'row',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'space-around',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
padding: theme.spacing(7, 7)
|
||||
},
|
||||
'& a': {
|
||||
textDecoration: 'none'
|
||||
}
|
||||
},
|
||||
texteBlanc: {
|
||||
color: "#fff"
|
||||
},
|
||||
uploadButton: {
|
||||
marginRight: theme.spacing(2)
|
||||
},
|
||||
@@ -226,8 +252,10 @@ const AccountProfile = props => {
|
||||
function isStepComplete(step) {
|
||||
return completed.has(step);
|
||||
}
|
||||
function refresh (){
|
||||
document.location.reload(true);
|
||||
function refresh() {
|
||||
document
|
||||
.location
|
||||
.reload(true);
|
||||
console.log("refresh")
|
||||
}
|
||||
|
||||
@@ -241,45 +269,99 @@ const AccountProfile = props => {
|
||||
<Grid item lg={3} md={6} xl={4} xs={12}>
|
||||
<Card {...rest} className={clsx(classes.root, className)}>
|
||||
<CardContent>
|
||||
<div id="fb-root"></div>
|
||||
<script
|
||||
async
|
||||
defer
|
||||
crossorigin="anonymous"
|
||||
src="https://connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v8.0&appId=2332071840142634&autoLogAppEvents=1"
|
||||
nonce="O28M4TTm"></script>
|
||||
<div className={classes.details}>
|
||||
<div>
|
||||
<Typography gutterBottom variant="h5">
|
||||
{user.lastname}
|
||||
{user.firstname} <a href="#" onClick={refresh}><RefreshIcon className={classes.menuButton}/></a>
|
||||
{user.lastname}
|
||||
{user.firstname}
|
||||
<a href="#" onClick={refresh}><RefreshIcon className={classes.menuButton}/></a>
|
||||
</Typography>
|
||||
<Typography
|
||||
className={classes.locationText}
|
||||
color="textSecondary"
|
||||
variant="body1">
|
||||
<MailIcon className={classes.menuButton}/> : {user.email}<br/>
|
||||
<PhoneIcon className={classes.menuButton}/> : {user.phone}<br/>
|
||||
<LinkedInIcon className={classes.menuButton}/> : {(user.linkedin && user.linkedin !='' && user.linkedin != 'null') ? <a href={user.linkedin} target="_blank">Lien sur mon linkendIn</a> : 'Non renseigné'}<br/>
|
||||
<PublicIcon className={classes.menuButton}/> : {(user.website && user.website !='' && user.website != 'null') ? <a href={user.website} target="_blank">Lien sur mon site</a> : 'Non renseigné'}
|
||||
<MailIcon className={classes.menuButton}/>
|
||||
: {user.email}<br/>
|
||||
<PhoneIcon className={classes.menuButton}/>
|
||||
: {user.phone}<br/>
|
||||
<LinkedInIcon className={classes.menuButton}/>
|
||||
: {(user.linkedin && user.linkedin != '' && user.linkedin != 'null')
|
||||
? <a href={user.linkedin} target="_blank">Lien sur mon linkedIn</a>
|
||||
: 'Non renseigné'}<br/>
|
||||
<PublicIcon className={classes.menuButton}/>
|
||||
: {(user.website && user.website != '' && user.website != 'null')
|
||||
? <a href={user.website} target="_blank">Lien sur mon site</a>
|
||||
: 'Non renseigné'}<br/>
|
||||
|
||||
|
||||
|
||||
</Typography>
|
||||
<Typography className={classes.dateText} color="textSecondary" variant="body1"></Typography>
|
||||
|
||||
</div>
|
||||
<Avatar
|
||||
{/* <Avatar
|
||||
className={classes.avatar}
|
||||
src={publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.postedContentUrl + logoUrl}/>
|
||||
src={publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.postedContentUrl + logoUrl}/> */}
|
||||
</div>
|
||||
<div>
|
||||
<Box m={3}/>
|
||||
<Divider/>
|
||||
<Box m={3}/>
|
||||
<Typography
|
||||
className={classes.locationText}
|
||||
color="textSecondary"
|
||||
variant="body1">
|
||||
|
||||
<DuoIcon className={classes.menuButton}/>
|
||||
: {(user.alias && user.alias != '' && user.alias != 'null')
|
||||
? <a
|
||||
href={publicRuntimeConfig.cvThequeUrl + "/talent/" + user.alias}
|
||||
target="_blank">Voir mon profil TalentsTube
|
||||
</a>
|
||||
: 'Non renseigné'}<br/>
|
||||
<div
|
||||
class="fb-share-button"
|
||||
data-href={publicRuntimeConfig.cvThequeUrl + "/talent/" + user.alias}
|
||||
data-layout="button_count"
|
||||
data-size="small">
|
||||
|
||||
<Facebook className={classes.menuButton}/>
|
||||
:
|
||||
<a
|
||||
target="_blank"
|
||||
href={"https://www.facebook.com/sharer/sharer.php?u=" + publicRuntimeConfig.cvThequeUrl + "/talent/" + user.alias + "%2F&src=sdkpreparse"}
|
||||
class="fb-xfbml-parse-ignore"> Partager mon profil
|
||||
</a>
|
||||
</div>
|
||||
</Typography>
|
||||
</div>
|
||||
{/* <div className={classes.progress}>
|
||||
<Typography variant="body1">Etat du Profil: 70%</Typography>
|
||||
<LinearProgress value={70} variant="determinate"/>
|
||||
</div> */}
|
||||
|
||||
</CardContent>
|
||||
<Box m={2} />
|
||||
<Box m={2}/>
|
||||
<Divider/>
|
||||
<Box m={2} />
|
||||
<Box m={2}/>
|
||||
<div className={classes.information}>
|
||||
<Typography className={classes.texteBlanc} align="left"></Typography>
|
||||
</div>
|
||||
{/* <CardActions>
|
||||
<Button className={classes.uploadButton} color="primary" variant="text">
|
||||
Remplacer une photo de profil
|
||||
</Button>
|
||||
<Button variant="text">Supprimer photo de profil</Button>
|
||||
</CardActions> */}
|
||||
<Box m={1} />
|
||||
<Box m={1}/>
|
||||
<Divider/>
|
||||
<Box m={1} />
|
||||
{/* <CardContent>
|
||||
{/* <CardContent>
|
||||
<Typography variant="body1"></Typography>
|
||||
<FormControlLabel
|
||||
value="end"
|
||||
@@ -294,9 +376,9 @@ const AccountProfile = props => {
|
||||
labelPlacement="start"/>
|
||||
|
||||
</CardContent> */}
|
||||
|
||||
|
||||
<Box m={3} />
|
||||
<Divider/>
|
||||
|
||||
<CardActions>
|
||||
|
||||
<Stepper nonLinear activeStep={activeStep} orientation="vertical">
|
||||
@@ -356,29 +438,29 @@ const AccountProfile = props => {
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</Card>
|
||||
<Box m={2} />
|
||||
<Box m={2}/>
|
||||
<CardContent>
|
||||
<BottomNavigation className={classes.stickToBottom}>
|
||||
<Button
|
||||
disabled={activeStep === 0}
|
||||
onClick={handleBack}
|
||||
className={classes.button}>
|
||||
Etape précédente
|
||||
</Button>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="primary"
|
||||
onClick={handleNext}
|
||||
className={classes.button}>
|
||||
Etape suivante
|
||||
</Button>
|
||||
{/* <BottomNavigationAction label="Recents" icon={< RestoreIcon />}/>
|
||||
<BottomNavigation className={classes.stickToBottom}>
|
||||
<Button
|
||||
disabled={activeStep === 0}
|
||||
onClick={handleBack}
|
||||
className={classes.button}>
|
||||
Etape précédente
|
||||
</Button>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="primary"
|
||||
onClick={handleNext}
|
||||
className={classes.button}>
|
||||
Etape suivante
|
||||
</Button>
|
||||
{/* <BottomNavigationAction label="Recents" icon={< RestoreIcon />}/>
|
||||
<BottomNavigationAction label="Favorites" icon={< FavoriteIcon />}/>
|
||||
<BottomNavigationAction label="Nearby" icon={< LocationOnIcon />}/> */}
|
||||
</BottomNavigation>
|
||||
</BottomNavigation>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
</Grid>
|
||||
<Grid item lg={9} md={6} xl={8} xs={12}>
|
||||
{getStepContent(activeStep)}
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
import React, {Fragment} from 'react';
|
||||
import {Hidden} from '@material-ui/core';
|
||||
import PropTypes from 'prop-types';
|
||||
import clsx from 'clsx';
|
||||
// import AccountStep from "../../components/organisms/AccountStep";
|
||||
import AccountEtape1 from './AccountEtape1';
|
||||
import AccountEtape2 from './AccountEtape2';
|
||||
import AccountEtape3 from './AccountEtape3';
|
||||
import {withStyles} from '@material-ui/core/styles';
|
||||
// import Switch from '@material-ui/core/Switch';
|
||||
import PhoneIcon from '@material-ui/icons/Phone';
|
||||
import MailIcon from '@material-ui/icons/Mail';
|
||||
import PublicIcon from '@material-ui/icons/Public';
|
||||
import DuoIcon from '@material-ui/icons/Duo';
|
||||
import LinkedInIcon from '@material-ui/icons/LinkedIn';
|
||||
import Facebook from '@material-ui/icons/Facebook';
|
||||
// import FormGroup from '@material-ui/core/FormGroup'; import FormControlLabel
|
||||
// from '@material-ui/core/FormControlLabel'; import FormControl from
|
||||
// '@material-ui/core/FormControl';
|
||||
import {updateUserRequest, updateUserPictureRequest} from '../../actions/user'
|
||||
import {makeStyles} from '@material-ui/styles';
|
||||
import {connect} from 'react-redux'
|
||||
import getConfig from 'next/config'
|
||||
import Router from 'next/router'
|
||||
|
||||
import BottomNavigation from '@material-ui/core/BottomNavigation';
|
||||
// import BottomNavigationAction from
|
||||
// '@material-ui/core/BottomNavigationAction';
|
||||
import RefreshIcon from '@material-ui/icons/Refresh';
|
||||
// import FavoriteIcon from '@material-ui/icons/Favorite'; import LocationOnIcon
|
||||
// from '@material-ui/icons/LocationOn';
|
||||
|
||||
import Box from '@material-ui/core/Box';
|
||||
|
||||
import {
|
||||
Card,
|
||||
CardActions,
|
||||
CardContent,
|
||||
Avatar,
|
||||
Typography,
|
||||
Divider,
|
||||
Button,
|
||||
LinearProgress,
|
||||
Stepper,
|
||||
Step,
|
||||
StepLabel,
|
||||
StepContent,
|
||||
StepButton,
|
||||
Paper,
|
||||
Grid
|
||||
} from '@material-ui/core';
|
||||
|
||||
const styles = theme => ({
|
||||
container: {
|
||||
width: '100%'
|
||||
},
|
||||
button: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(8),
|
||||
marginRight: theme.spacing(8),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.important
|
||||
},
|
||||
stickToBottom: {
|
||||
width: '100%',
|
||||
position: 'fixed',
|
||||
bottom: 0
|
||||
}
|
||||
});
|
||||
|
||||
const useStyles = makeStyles(theme => ({
|
||||
root: {},
|
||||
details: {
|
||||
display: 'flex'
|
||||
},
|
||||
avatar: {
|
||||
marginLeft: 'auto',
|
||||
height: 110,
|
||||
width: 100,
|
||||
flexShrink: 0,
|
||||
flexGrow: 0
|
||||
},
|
||||
progress: {
|
||||
marginTop: theme.spacing(2)
|
||||
},
|
||||
information: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
[
|
||||
theme
|
||||
.breakpoints
|
||||
.up('md')
|
||||
]: {
|
||||
display: 'flex',
|
||||
flexDirection: 'row',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'space-around',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
padding: theme.spacing(7, 7)
|
||||
},
|
||||
'& a': {
|
||||
textDecoration: 'none'
|
||||
}
|
||||
},
|
||||
texteBlanc: {
|
||||
color: "#fff"
|
||||
},
|
||||
uploadButton: {
|
||||
marginRight: theme.spacing(2)
|
||||
},
|
||||
button: {
|
||||
marginTop: theme.spacing(1),
|
||||
marginRight: theme.spacing(1)
|
||||
},
|
||||
actionsContainer: {
|
||||
marginBottom: theme.spacing(2)
|
||||
},
|
||||
resetContainer: {
|
||||
padding: theme.spacing(3)
|
||||
}
|
||||
}));
|
||||
|
||||
const AccountProfile = props => {
|
||||
const {
|
||||
className,
|
||||
user,
|
||||
...rest
|
||||
} = props;
|
||||
const logoUrl = user.picture;
|
||||
const classes = useStyles();
|
||||
|
||||
// const user = { name: 'Laurent Laniau', city: 'Questembert', country:
|
||||
// 'France', timezone: '', avatar: '/images/avatars/avatar_11.png' };
|
||||
const {publicRuntimeConfig} = getConfig()
|
||||
|
||||
return (
|
||||
<Grid
|
||||
container
|
||||
spacing={4}
|
||||
direction="row"
|
||||
justify="space-between"
|
||||
alignItems="flex-start">
|
||||
|
||||
<Grid item lg={9} md={6} xl={8} xs={12}>
|
||||
<Fragment>
|
||||
<Hidden> </Hidden>
|
||||
<Hidden> </Hidden>
|
||||
|
||||
<Card
|
||||
variant="outlined"
|
||||
style={{
|
||||
width: 420 + "px",
|
||||
textAlign:"center"
|
||||
}}>
|
||||
<CardActions></CardActions>
|
||||
<CardContent>
|
||||
<Typography>
|
||||
Tu n'as pas tout dit dans ta vidéo?<br/>
|
||||
Pour mettre toutes les chances de ton côté,
|
||||
<b> dépose ton CV old school (format pdf, word)!</b>
|
||||
</Typography>
|
||||
</CardContent>
|
||||
|
||||
</Card>
|
||||
<Hidden> </Hidden>
|
||||
<Card
|
||||
variant="outlined"
|
||||
style={{
|
||||
width: 420 + "px",
|
||||
textAlign:"center"
|
||||
}}>
|
||||
<CardContent>
|
||||
<AccountEtape3></AccountEtape3>
|
||||
</CardContent>
|
||||
</Card>
|
||||
<Hidden> </Hidden>
|
||||
<Hidden> </Hidden>
|
||||
<Card
|
||||
variant="outlined"
|
||||
style={{
|
||||
width: 420 + "px",
|
||||
textAlign:"center"
|
||||
}}>
|
||||
<CardContent>
|
||||
|
||||
<Button
|
||||
variant="contained"
|
||||
color="primary"
|
||||
onClick={() => Router.push(`/Candidatures`)}
|
||||
className={classes.button}>
|
||||
Voir mes candidatures
|
||||
</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</Fragment>
|
||||
|
||||
</Grid>
|
||||
<Grid item lg={3} md={6} xl={4} xs={12}></Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
AccountProfile.propTypes = {
|
||||
className: PropTypes.string
|
||||
};
|
||||
function mapStateToProps(state, ownProps) {
|
||||
return {
|
||||
user: state.user,
|
||||
loading: !!state.user.loading,
|
||||
errors: state.user.errors || ownProps.errors
|
||||
};
|
||||
}
|
||||
|
||||
export default withStyles(styles)(connect(mapStateToProps, {updateUserRequest})(AccountProfile))
|
||||
@@ -160,7 +160,12 @@ class Answer extends Component {
|
||||
|
||||
//TODO:maybe add this two in a single transactionnal saga
|
||||
this.props.updateUserRequest(data)
|
||||
|
||||
//TODO: faire appel à une méthode qui va encoyer le mail a l'entreprise
|
||||
|
||||
// this.props.companyMails.map((user) =>
|
||||
// //TODO Envoyer un mail a chaque user
|
||||
// console.log(user.email)
|
||||
// )
|
||||
this.props.postAdAnswerRequest(
|
||||
{
|
||||
adId: this.props.adId,
|
||||
@@ -308,7 +313,7 @@ class Answer extends Component {
|
||||
/>
|
||||
</form>
|
||||
<div id="F" className={classes.foot}>
|
||||
<Button variant="contained" className={classes.button + ' cypButtonSendApplication'} onClick={this.onSubmit}>Postuler</Button>
|
||||
<Button variant="contained" className={classes.button + ' cypButtonSendApplication'} onClick={this.onSubmit}>Envoyer ma candidature</Button>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
@@ -151,7 +151,7 @@ class CompanyRowComponent extends React.Component {
|
||||
const nbOffre = (rowData.count_ads > 0) ? offre : 'Candidature spontanée';
|
||||
|
||||
return (
|
||||
<Link href={`/Entreprise/${rowData.id}-${_.kebabCase(rowData.brand_name)}-${_.kebabCase(rowData.addresses.billing.city)}`} >
|
||||
<Link href={`/Entreprise/${rowData.id}-${_.kebabCase(rowData.brand_name)}`} >
|
||||
<Card className={classes.card + ' cypCardCompany'}>
|
||||
<CardContent className={classes.content}>
|
||||
<CardMedia
|
||||
|
||||
@@ -257,9 +257,9 @@ function Footer(props) {
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
02.30.05.06.31
|
||||
</Typography>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
{/* <Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
contact@talentstube.com
|
||||
</Typography>
|
||||
</Typography> */}
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -452,7 +452,7 @@ class Header extends React.Component {
|
||||
<Divider light={true} />
|
||||
|
||||
<div className={classes.linkGroup}>
|
||||
<a href={publicRuntimeConfig.symphonyUrl + "/faire-offre-emploi-video"} className={classes.lightMenuItem}><ListItem classes={{ primary: classes.ListItemText }} classes={{ root: classes.rootListItemIcon }}>
|
||||
<a href={publicRuntimeConfig.symphonyUrl + "/"} className={classes.lightMenuItem}><ListItem classes={{ primary: classes.ListItemText }} classes={{ root: classes.rootListItemIcon }}>
|
||||
<WorkOutlineIcon className={classes.icon} />
|
||||
<ListItemText primary='Connexion recruteurs'>
|
||||
</ListItemText>
|
||||
@@ -605,7 +605,7 @@ class Header extends React.Component {
|
||||
</section>
|
||||
<section className={classes.appBarDesktopSection + ' ' + classes.appBarDesktopSection3}>
|
||||
|
||||
<a href={publicRuntimeConfig.symphonyUrl + "/faire-offre-emploi-video"} className={classes.desktopMenuItem}>
|
||||
<a href={publicRuntimeConfig.symphonyUrl + "/"} className={classes.desktopMenuItem}>
|
||||
<ListItemText primary='Espace recruteurs'>
|
||||
</ListItemText>
|
||||
<ArrowForward className={classes.icon} />
|
||||
|
||||
@@ -58,6 +58,9 @@ const styles = theme => ({
|
||||
offerInfoContainer: {
|
||||
display: 'flex',
|
||||
},
|
||||
buttonContainer: {
|
||||
alignItems: 'right',
|
||||
},
|
||||
infoContainer: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
@@ -157,7 +160,7 @@ const styles = theme => ({
|
||||
objectFit: 'contain',
|
||||
},
|
||||
title: {
|
||||
fontSize: '1em',
|
||||
fontSize: '1.3em',
|
||||
fontWeight: '500',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
paddingTop: theme.spacing(2),
|
||||
@@ -165,13 +168,22 @@ const styles = theme => ({
|
||||
},
|
||||
offreTitle: {
|
||||
[theme.breakpoints.up('md')]: {
|
||||
fontSize: '1.2em',
|
||||
fontSize: '1.3em',
|
||||
fontWeight: '600',
|
||||
},
|
||||
},
|
||||
discoverTitle: {
|
||||
padding: theme.spacing(3, 0),
|
||||
},
|
||||
voirEntreprise: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: '#BBBCBD',
|
||||
backgroundColor: '#F3F3F4',
|
||||
|
||||
},
|
||||
contentText: {
|
||||
fontSize: '1em',
|
||||
fontWeight: '300',
|
||||
@@ -192,7 +204,7 @@ const styles = theme => ({
|
||||
textAlign: 'center',
|
||||
},
|
||||
companyName: {
|
||||
fontSize: '0.9em',
|
||||
fontSize: '1.3em',
|
||||
fontWeight: '300',
|
||||
[theme.breakpoints.up('md')]: {
|
||||
fontSize: '1em',
|
||||
@@ -211,18 +223,18 @@ const styles = theme => ({
|
||||
},
|
||||
iconTextIcon: {
|
||||
color: theme.palette.offerlistitem.icon,
|
||||
fontSize: '1em',
|
||||
fontSize: '1.3em',
|
||||
},
|
||||
iconTextText: {
|
||||
fontWeight: 'lighter',
|
||||
color: theme.palette.offerlistitem.text,
|
||||
fontSize: '0.7em',
|
||||
fontSize: '1em',
|
||||
paddingLeft: theme.spacing(1),
|
||||
},
|
||||
iconTextTextDesktop: {
|
||||
fontWeight: 'lighter',
|
||||
color: theme.palette.offerlistitem.text,
|
||||
fontSize: '0.7em',
|
||||
fontSize: '1em',
|
||||
paddingLeft: theme.spacing(1),
|
||||
width: '100%',
|
||||
},
|
||||
@@ -247,12 +259,11 @@ const styles = theme => ({
|
||||
},
|
||||
button: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(8),
|
||||
marginRight: theme.spacing(8),
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.important,
|
||||
alignSelf: 'center',
|
||||
},
|
||||
chip: {
|
||||
color: theme.palette.secondary.main,
|
||||
@@ -299,16 +310,46 @@ function OffreDetail(props) {
|
||||
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 socialShareUrl = typeof window !== 'undefined' ? window.location : publicRuntimeConfig.frontServerUrl + `/Offre/${offre.id}-${_.kebabCase(offre.title)}-${_.kebabCase(offre.location.gmap_address.name)}`;
|
||||
const entrepriseLink = (offre.company && `/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}-${_.kebabCase(offre.location.gmap_address.name)}`);
|
||||
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 : ""
|
||||
titleSEO += " | Talents Tube "
|
||||
let jobVille=""
|
||||
let jobDpt=""
|
||||
let jobPays=""
|
||||
let jobContract =""
|
||||
let tempsType =""
|
||||
let tempsTypeFr =""
|
||||
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.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 =""
|
||||
if(tempsType=="PART_TIME"){
|
||||
tempsTypeFr="Temps partiel"
|
||||
}else if(tempsType=="FULL_TIME") {
|
||||
tempsTypeFr="Plein temps"
|
||||
}else if(tempsType=="MIX_TIME") {
|
||||
|
||||
}
|
||||
return (
|
||||
<Fragment>
|
||||
{/* {offre.public_tag.map((label, index) => {
|
||||
descriptionSEO += label+", "
|
||||
})} */}
|
||||
|
||||
<OgHead seo_title={offre.title}
|
||||
seo_description={offre.description}
|
||||
<OgHead seo_title={titleSEO}
|
||||
seo_description={descriptionSEO}
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrlDesktop}
|
||||
></OgHead>
|
||||
@@ -318,7 +359,14 @@ function OffreDetail(props) {
|
||||
job_brand_link= {entrepriseLink}
|
||||
job_title = {offre.title}
|
||||
job_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_date = {offre.published_at}
|
||||
job_date_fin = {offre.unpublished_at}
|
||||
job_temps_type= {tempsType}
|
||||
job_contract_type= {jobContract}
|
||||
></JobPosting>
|
||||
{offre.video && (
|
||||
<Fragment>
|
||||
@@ -337,10 +385,11 @@ function OffreDetail(props) {
|
||||
<div className={classes.infoContainer}>
|
||||
<Typography gutterBottom className={classes.offreTitle}>
|
||||
{offre.title} {/*- publié le <Moment format="DD/MM/YYYY" date={offre.published_at} /> */}
|
||||
|
||||
</Typography>
|
||||
<a href={entrepriseLink} >
|
||||
<Typography gutterBottom variant="subtitle1" className={classes.companyName}>
|
||||
{offre.beneficiaire ? offre.beneficiaire : offre.company.brand_name ? offre.company.brand_name : ""}
|
||||
{offre.company.brand_name ? offre.company.brand_name : ""}
|
||||
</Typography>
|
||||
</a>
|
||||
{offre.is_promoted && (
|
||||
@@ -349,14 +398,31 @@ function OffreDetail(props) {
|
||||
{/* ville */}
|
||||
</div>
|
||||
</div>
|
||||
<div className={classes.buttonContainer}>
|
||||
{!!!offre.is_promoted && (
|
||||
<Link href={`/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}`} >
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.voirEntreprise + ' cypButtonApply'}
|
||||
>Voir l'entreprise</Button>
|
||||
|
||||
</Link>
|
||||
|
||||
|
||||
)}
|
||||
{!!!offre.is_promoted && (
|
||||
<Link href={`/Reponse?adId=${offre.id}`}>
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button + ' cypButtonApply'}
|
||||
>Postuler</Button>
|
||||
|
||||
</Link>
|
||||
|
||||
|
||||
)}
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</Hidden>
|
||||
|
||||
@@ -400,7 +466,9 @@ function OffreDetail(props) {
|
||||
<Hidden smDown>
|
||||
<section className={classes.IconTextContainerDesktop}>
|
||||
<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="assignment" text={offre.extra.contract_type} />
|
||||
{tempsTypeFr ?<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="watch_later" text={tempsTypeFr } />:""}
|
||||
<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={offre.location.gmap_address.formatted_address} />
|
||||
{offre.beneficiaire && (<IconTextInline classes={{ icon: classes.iconTextIcon, text: classes.iconTextText }} variant="business" text={offre.beneficiaire} /> )}
|
||||
</section>
|
||||
</Hidden>
|
||||
<SimpleCollapse>
|
||||
@@ -442,13 +510,13 @@ function OffreDetail(props) {
|
||||
{offre.company.presentation_video && !offre.is_promoted && (
|
||||
<div className={classes.container + ' ' + classes.discoverContainerCompany}>
|
||||
<section>
|
||||
<Typography gutterBottom className={classes.title + ' ' + classes.discoverTitle} align="center">
|
||||
Découvrir l'entreprise <span className={classes.primary}>{offre.company.brand_name && offre.company.brand_name}</span>
|
||||
<Typography gutterBottom className={classes.title + ' ' + classes.voirEntreprise} align="center">
|
||||
Voir l'entreprise <span className={classes.primary}>{offre.company.brand_name && offre.company.brand_name}</span>
|
||||
</Typography>
|
||||
|
||||
<a href={entrepriseLink}>
|
||||
<div className={classes.discoverContainerImage}>
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktop : imgUrl} alt="company" />
|
||||
<img src={isWidthUp('sm', props.width) ? imgUrlDesktop : imgUrl} alt={offre.company.brand_name && offre.company.brand_name} />
|
||||
<KeyboardArrowleftIcon className={classes.iconPlay} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
@@ -17,7 +17,7 @@ const styles = theme => ({
|
||||
card: {
|
||||
display: 'flex',
|
||||
minHeight: '21vh',
|
||||
maxHeight: '32vh',
|
||||
// maxHeight: '32vh',
|
||||
borderRadius: '5px',
|
||||
width: '100%',
|
||||
cursor: 'pointer',
|
||||
@@ -38,7 +38,7 @@ const styles = theme => ({
|
||||
},
|
||||
[theme.breakpoints.up('md')]: {
|
||||
minHeight: '15vh',
|
||||
maxHeight: '20vh',
|
||||
// maxHeight: '20vh',
|
||||
},
|
||||
margin: '1vh 2vh 1vh 2vh',
|
||||
[theme.breakpoints.up('sm')]: {
|
||||
@@ -51,14 +51,15 @@ const styles = theme => ({
|
||||
alignItems: 'flex-start',
|
||||
padding: theme.spacing(2),
|
||||
width: '75%',
|
||||
// minHeight: '200px',
|
||||
},
|
||||
jobTitle: {
|
||||
fontSize: '1em',
|
||||
fontSize: '1.2em',
|
||||
fontWeight: 'bold',
|
||||
color: theme.palette.offerlistitem.title,
|
||||
},
|
||||
companyTitle: {
|
||||
fontSize: '0.8em',
|
||||
fontSize: '1.2em',
|
||||
fontWeight: '300',
|
||||
color: theme.palette.offerlistitem.title,
|
||||
},
|
||||
@@ -96,11 +97,11 @@ const styles = theme => ({
|
||||
},
|
||||
iconTextIcon: {
|
||||
color: theme.palette.offerlistitem.icon,
|
||||
fontSize: '0.8em',
|
||||
fontSize: '1.2em',
|
||||
},
|
||||
iconTextText: {
|
||||
color: theme.palette.offerlistitem.text,
|
||||
fontSize: '0.6em',
|
||||
fontSize: '1em',
|
||||
paddingLeft: theme.spacing(1),
|
||||
},
|
||||
chip: {
|
||||
@@ -126,7 +127,7 @@ class OffreRowComponent extends React.Component {
|
||||
const imgUrl = (rowData.video && rowData.video.thumbnails && rowData.video.thumbnails[0] && rowData.video.thumbnails[0].sizes[4]) ? rowData.video.thumbnails[0].sizes[4].link : publicRuntimeConfig.adListDefaultUrl
|
||||
|
||||
return (
|
||||
<Link href={`/Offre/${rowData.id}-${_.kebabCase(rowData.title)}-${_.kebabCase(rowData.location.gmap_address.name)}`} >
|
||||
<Link href={`/Offre/${rowData.id}-${_.kebabCase(rowData.title)}`} >
|
||||
<Card className={classes.card + ' cypCardOffre'} >
|
||||
<CardContent className={classes.content}>
|
||||
<CardMedia
|
||||
@@ -149,9 +150,9 @@ class OffreRowComponent extends React.Component {
|
||||
<Typography
|
||||
variant="headline"
|
||||
variant="h6"
|
||||
component="h4"
|
||||
component="h3"
|
||||
className={classes.companyTitle}>
|
||||
{rowData.beneficiaire ? "Pour le compte de "+rowData.beneficiaire : companyR.brand_name ? companyR.brand_name : "Non renseigné"}
|
||||
{companyR.brand_name ? companyR.brand_name : "Non renseigné"}
|
||||
</Typography>
|
||||
<div>
|
||||
{rowData.is_promoted && (
|
||||
@@ -160,8 +161,10 @@ class OffreRowComponent extends React.Component {
|
||||
|
||||
{!rowData.is_promoted && (
|
||||
<Fragment>
|
||||
<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={rowData.extra.contract_type} />
|
||||
<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="business_center" text={rowData.location.gmap_address.formatted_address} />
|
||||
<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="business_center" text={rowData.extra.contract_type} />
|
||||
<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={rowData.location.gmap_address.formatted_address} />
|
||||
{rowData.beneficiaire ? <IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="business" text={rowData.beneficiaire} /> : ""}
|
||||
|
||||
</Fragment>
|
||||
)}
|
||||
|
||||
|
||||
@@ -277,15 +277,15 @@ class Register extends React.Component {
|
||||
S'inscrire
|
||||
</Button>
|
||||
|
||||
<Typography
|
||||
{/* <Typography
|
||||
paragraph={true}
|
||||
align="center"
|
||||
className={classes.conditionalText}
|
||||
>Ou</Typography>
|
||||
>Ou</Typography> */}
|
||||
|
||||
</form>
|
||||
|
||||
<SocialButtonsAuth linkedInAuth={this.props.linkedInAuth} facebookAuth={this.props.facebookAuth} />
|
||||
{/* <SocialButtonsAuth linkedInAuth={this.props.linkedInAuth} facebookAuth={this.props.facebookAuth} /> */}
|
||||
|
||||
<div classes={classes.form}>
|
||||
<Typography
|
||||
|
||||
@@ -51,17 +51,17 @@ export default function SocialShare(props) {
|
||||
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
<a href={"https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(props.url)}>
|
||||
<a href={"https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(props.url)} target="_blank">
|
||||
<Icon className={clsx(classes.icon, classes.FacebookIcon, 'fab fa-facebook-f')} color="secondary" />
|
||||
</a>
|
||||
<a href={"http://twitter.com/share?url=" + encodeURIComponent(props.url)}>
|
||||
<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")}>
|
||||
<a href={"https://www.linkedin.com/shareArticle?mini=true&url=" + encodeURIComponent(props.url + "&title=Talent's 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} >
|
||||
<a href={"mailto:?subject=Offre d'emploi Talent's Tube&body=Regardez cette offre : " + props.url} target="_blank"s>
|
||||
<Icon className={clsx(classes.icon, classes.MailIcon, 'fas fa-envelope')} color="secondary" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -99,7 +99,7 @@ class Tile extends React.Component {
|
||||
const logoName = (rowData.company) ? rowData.company.logo : rowData.logo
|
||||
const logoUrl = publicRuntimeConfig.symphonyUrl + publicRuntimeConfig.cachedMediaUrl + logoName
|
||||
|
||||
const router = (rowData.company) ? `/Offre/${rowData.id}-${_.kebabCase(rowData.title)}-${_.kebabCase(rowData.location.gmap_address.name)}` : `/Entreprise/${rowData.id}-${_.kebabCase(rowData.brand_name)}-${_.kebabCase(rowData.addresses.billing.city)}`
|
||||
const router = (rowData.company) ? `/Offre/${rowData.id}-${_.kebabCase(rowData.title)}` : `/Entreprise/${rowData.id}-${_.kebabCase(rowData.brand_name)}}`
|
||||
|
||||
//rowData._embedded.company.brand_name
|
||||
return (
|
||||
@@ -113,7 +113,7 @@ class Tile extends React.Component {
|
||||
/>
|
||||
<KeyboardArrowleftIcon className={classes.iconPlay} />
|
||||
<div className={classes.logoContainer}>
|
||||
<Avatar className={classes.logo} src={logoUrl} alt="company"/>
|
||||
<Avatar className={classes.logo} src={logoUrl} alt={rowData.title}/>
|
||||
</div>
|
||||
{ children }
|
||||
</CardContent>
|
||||
|
||||
@@ -10,11 +10,11 @@ const styles = theme => ({
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'space-between',
|
||||
position: 'absolute',
|
||||
top: '51%',
|
||||
top: '44%',
|
||||
width: '100%',
|
||||
},
|
||||
companyTitle: {
|
||||
fontSize: '0.8em',
|
||||
fontSize: '1em',
|
||||
fontWeight: '100',
|
||||
padding: theme.spacing(0, 2),
|
||||
marginTop: '4vh',
|
||||
@@ -24,7 +24,7 @@ const styles = theme => ({
|
||||
},
|
||||
},
|
||||
jobTitle: {
|
||||
fontSize: '1em',
|
||||
fontSize: '1.2em',
|
||||
padding: theme.spacing(0, 2),
|
||||
minHeight: '8vh',
|
||||
[theme.breakpoints.up('lg')]: {
|
||||
@@ -59,7 +59,7 @@ class TileOffre extends React.Component {
|
||||
component="h4"
|
||||
align="center"
|
||||
className={classes.companyTitle}>
|
||||
{tile.company.brand_name && tile.company.brand_name} {tile.beneficiaire && " / "+tile.beneficiaire }
|
||||
{tile.company.brand_name && tile.company.brand_name}
|
||||
</Typography>
|
||||
<Typography
|
||||
gutterBottom
|
||||
@@ -82,6 +82,10 @@ class TileOffre extends React.Component {
|
||||
{tile.extra && tile.extra.contract_type &&
|
||||
<IconText classes={{ root: classes.rootIconText }} variant="assignment" text={tile.extra.contract_type} />
|
||||
}
|
||||
|
||||
{tile.beneficiaire &&
|
||||
<IconText classes={{ root: classes.rootIconText }} variant="business" text={tile.beneficiaire} />
|
||||
}
|
||||
</section>
|
||||
</Fragment>
|
||||
);
|
||||
|
||||
@@ -10,6 +10,7 @@ import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import Header from '../organisms/Header'
|
||||
import {AppBar,CssBaseline,Container,Toolbar,IconButton,Typography} from "@material-ui/core";
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import Link from 'next/link'
|
||||
|
||||
const styles = theme => ({
|
||||
RootContainer: {
|
||||
@@ -65,12 +66,21 @@ const styles = theme => ({
|
||||
},
|
||||
button: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(8),
|
||||
marginRight: theme.spacing(8),
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.important,
|
||||
},
|
||||
voirOffre: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: '#BBBCBD',
|
||||
backgroundColor: '#F3F3F4',
|
||||
|
||||
},
|
||||
})
|
||||
|
||||
function LayoutCompany(props) {
|
||||
@@ -105,6 +115,13 @@ function LayoutCompany(props) {
|
||||
|
||||
<Hidden mdUp>
|
||||
<div id="F" className={classes.foot}>
|
||||
<Link href="#discover" >
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.voirOffre + ' cypButtonApply'}
|
||||
>Voir les offres</Button>
|
||||
|
||||
</Link>
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button}
|
||||
|
||||
@@ -8,6 +8,7 @@ import ArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
|
||||
import Header from '../organisms/Header'
|
||||
import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import Link from 'next/link'
|
||||
|
||||
const styles = theme => ({
|
||||
foot: {
|
||||
@@ -62,11 +63,20 @@ const styles = theme => ({
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.important,
|
||||
},
|
||||
voirEntreprise: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: '#BBBCBD',
|
||||
backgroundColor: '#F3F3F4',
|
||||
|
||||
},
|
||||
})
|
||||
|
||||
function LayoutOffre(props) {
|
||||
|
||||
const { classes, offreId, isProvided } = props;
|
||||
const { classes, offreId, offre, isProvided } = props;
|
||||
const contentClass = (!isProvided) ? classes.contentDefault : classes.contentProvided
|
||||
|
||||
return (
|
||||
@@ -91,6 +101,14 @@ function LayoutOffre(props) {
|
||||
<div id="F" className={classes.foot}>
|
||||
{/* <div className={classes.inner}>
|
||||
<div className={classes.grow} /> */}
|
||||
<Link href={`/Entreprise/${offre.company.id}-${_.kebabCase(offre.company.brand_name)}`} >
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.voirEntreprise + ' cypButtonApply'}
|
||||
>Voir l'entreprise</Button>
|
||||
|
||||
</Link>
|
||||
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button + ' cypButtonApply'}
|
||||
|
||||
@@ -6,6 +6,7 @@ const styles = theme => ({
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
textAlign: 'center',
|
||||
justifyContent: 'center',
|
||||
fontFamily: 'Dosis',
|
||||
fontWeight: '500',
|
||||
@@ -19,7 +20,7 @@ class Loader extends React.Component {
|
||||
render() {
|
||||
const { classes } = this.props;
|
||||
return (
|
||||
<div className={classes.loader + ' ' + 'alert alert-info'}><CircularProgress color="primary" />Chargement...</div>
|
||||
<div className={classes.loader + ' ' + 'alert alert-info'}><CircularProgress color="primary" />Chargement... </div>
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import React, { Fragment } from 'react'
|
||||
import CircularProgress from '@material-ui/core/CircularProgress'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
const styles = theme => ({
|
||||
loader: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
textAlign: 'center',
|
||||
justifyContent: 'center',
|
||||
fontFamily: 'Dosis',
|
||||
fontWeight: '500',
|
||||
fontSize: '1em',
|
||||
padding: theme.spacing(6,0),
|
||||
color: theme.palette.primary.main,
|
||||
},
|
||||
})
|
||||
|
||||
class LoaderVideo extends React.Component {
|
||||
render() {
|
||||
const { classes } = this.props;
|
||||
return (
|
||||
<div className={classes.loader + ' ' + 'alert alert-info'}><CircularProgress color="primary" />Chargement... <br/>Le temps de chargement peut varier de quelques secondes à <b>plusieurs minutes</b> en fonction de la qualité de votre connexion internet.<br/></div>
|
||||
)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export default withStyles(styles)(LoaderVideo)
|
||||
+5
-5
@@ -67,17 +67,17 @@ export default {
|
||||
},
|
||||
},
|
||||
ads: {
|
||||
fetchAd: (id) => {
|
||||
return axios.get(`api/ads/${id}`).then(res => res.data)
|
||||
fetchJob: (id) => {
|
||||
return axios.get(`api/jobs/${id}`).then(res => res.data)
|
||||
},
|
||||
|
||||
//offset is the index position of the first element to start requesting at
|
||||
// use 0|1 for isPromoted
|
||||
fetchAds: ({ limit = null, order = "", keyword = "", offset = 1, status = 'PUBLISHED', isPromoted = false, isEmphasis = false }) => {
|
||||
fetchJobs: ({ limit = null, order = "", keyword = "", offset = 1, status = 'PUBLISHED', isPromoted = false, isEmphasis = false }) => {
|
||||
isPromoted = isPromoted !== null ? isPromoted * 1 : isPromoted;
|
||||
isEmphasis = isEmphasis !== null ? isEmphasis * 1 : isEmphasis;
|
||||
|
||||
return axios.get('api/ads', { params: { offset, limit, order, keyword, status, isPromoted, isEmphasis } })
|
||||
return axios.get('api/jobs', { params: { offset, limit, order, keyword, status, isPromoted, isEmphasis } })
|
||||
.then(res => res.data)
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ export default {
|
||||
postAnswer: (payload) => {
|
||||
return axios.post("/api/answers", { adId: payload.adId, mediaId: payload.mediaId, companyId: payload.companyId }).then(res => res)
|
||||
},
|
||||
fetchAdsAnswered: ({ limit = null, order = "", keyword = "", offset = 1 }) => {
|
||||
fetchJobsAnswered: ({ limit = null, order = "", keyword = "", offset = 1 }) => {
|
||||
return axios.get(`api/answers`, { params: { offset, limit, order, keyword } }).then(res => res.data)
|
||||
},
|
||||
fetchAnswer: (payload) => {
|
||||
|
||||
+13
-3
@@ -40,9 +40,18 @@ module.exports = withPlugins(
|
||||
}],
|
||||
[{
|
||||
publicRuntimeConfig: {
|
||||
symphonyUrl: 'https://www.talentstube.com',
|
||||
//symphonyUrl: 'http://localhost/app_dev.php',
|
||||
//blogUrl: 'https://blog.talentstube.com',
|
||||
//frontServerUrl: 'http://localhost:3000',
|
||||
//cvThequeUrl: 'https://recruteur.talentstube.com',
|
||||
//symphonyUrl: 'https://recruteur.talentstube.com',
|
||||
//blogUrl: 'https://blog.talentstube.com',
|
||||
//frontServerUrl: 'https://www.talentstube.com',
|
||||
//cvThequeUrl: 'https://recruteur.talentstube.com',
|
||||
symphonyUrl: 'https://pp.talentstube.com/',
|
||||
blogUrl: 'https://blog.talentstube.com',
|
||||
frontServerUrl: 'https://app.talentstube.com',
|
||||
frontServerUrl: 'https://pp.app.talentstube.com/',
|
||||
cvThequeUrl: 'https://recruteur.talentstube.com',
|
||||
adListDefaultUrl: '/statique/images/default/default_picture_company.svg',
|
||||
cachedMediaUrl: '/media/cache/profile_thumb/uploads/img/',
|
||||
postedContentUrl: '/uploads/img/',
|
||||
@@ -50,7 +59,8 @@ module.exports = withPlugins(
|
||||
ReCAPTCHA: {
|
||||
"siteKey": "6LdyqLwUAAAAADKI5uC7d5W9VqVgzd8VEmMU2Yi-"
|
||||
},
|
||||
applicationServerPublicKey: 'BC9XGBLNGm0RWczR4IjEPWQ9_P1BmlvT-oaVgr_GJTI2OZtT85olmi3xzQhgZF4-Bi0rPafpa8vqt5pudQ4Na6w'
|
||||
applicationServerPublicKey: 'BNFyiyPiLH97Dgc0m1vXluUNaCN6y3Hkgd4YcqS2lVkP8my3tq2D5gM5g7cY6R4VxC7GljSzkLRu+k+oO+2TtjU='
|
||||
//applicationServerPublicKey: 'BG2lV673DvB67dzEwX9GKfds3sXaEdtZo2oWO1cO2xUdTJAFZ_rV_UrP1nHQz-F8LJNO9HxG0kmQRIb54JL1ZCA'
|
||||
}
|
||||
}]
|
||||
],
|
||||
|
||||
@@ -147,6 +147,7 @@ class Candidature extends React.Component {
|
||||
<LayoutCandidature>
|
||||
<Head>
|
||||
<title key="title">Candidature</title>
|
||||
<meta name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
<Fragment>
|
||||
<div className={classes.container}>
|
||||
@@ -187,7 +188,7 @@ class Candidature extends React.Component {
|
||||
{this.props.user.firstname + " " + this.props.user.lastname}
|
||||
</Typography>
|
||||
<Typography gutterBottom className={classes.userTextDate}>
|
||||
Envoyée le {(new Date(this.props.answer.c_time)).toLocaleDateString("fr-FR")}
|
||||
Envoyé le {(new Date(this.props.answer.c_time)).toLocaleDateString("fr-FR")}
|
||||
</Typography>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
import React from 'react';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import Layout from "../components/templates/Layout";
|
||||
import AccountProfileCandidature from "../components/organisms/AccountProfileCandidature";
|
||||
import Head from 'next/head'
|
||||
// import AdBlockDetect from 'react-ad-block-detect';
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
width: '100%',
|
||||
},
|
||||
button: {
|
||||
marginRight: theme.spacing(1),
|
||||
},
|
||||
completed: {
|
||||
display: 'inline-block',
|
||||
},
|
||||
instructions: {
|
||||
marginTop: theme.spacing(1),
|
||||
marginBottom: theme.spacing(1),
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
|
||||
export default function HorizontalNonLinearStepper() {
|
||||
const classes = useStyles();
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<Head>
|
||||
<title key="title">Profil – Talents Tube</title>
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
<div >
|
||||
<AccountProfileCandidature />
|
||||
</div>
|
||||
|
||||
{/* <AdBlockDetect>
|
||||
<p>AdBlocks a été détecté. Pour que Talents Tube puisse fonctionner correctement, veuillez désactiver Ad Blocks</p>
|
||||
</AdBlockDetect> */}
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
@@ -8,9 +8,10 @@ import { Typography } from '@material-ui/core';
|
||||
import LayoutGrid from "../components/templates/LayoutGrid";
|
||||
import Grid from "../components/templates/Grid"
|
||||
import AnswerRow from "../components/organisms/AnswerRow"
|
||||
import { fetchAdsAnsweredRequest } from '../actions/answer'
|
||||
import { fetchJobsAnsweredRequest } from '../actions/answer'
|
||||
import { AnswersSelector } from '../reducers/answers'
|
||||
import Head from 'next/head'
|
||||
import Link from 'next/link';
|
||||
|
||||
const styles = theme => ({
|
||||
root: {
|
||||
@@ -24,6 +25,13 @@ const styles = theme => ({
|
||||
flexDirection: 'column',
|
||||
padding: theme.spacing(0,3),
|
||||
},
|
||||
profil: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
padding: theme.spacing(3,3),
|
||||
textAlign: 'center',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontSize: '1.5em',
|
||||
@@ -45,16 +53,18 @@ class Candidatures extends React.Component {
|
||||
<LayoutGrid backLink="/">
|
||||
<Head>
|
||||
<title key="title">Candidatures</title>
|
||||
<meta name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
|
||||
{/* TODO */}
|
||||
<Typography component="h1" align="center" className={classes.title} gutterBottom>
|
||||
Mes candidatures
|
||||
</Typography>
|
||||
|
||||
<div className={classes.container}>
|
||||
|
||||
<Grid CustomRowComponent={AnswerRow}
|
||||
dataFetcher={this.props.fetchAdsAnsweredRequest}
|
||||
dataFetcher={this.props.fetchJobsAnsweredRequest}
|
||||
data={this.props.answers}
|
||||
currentPage={this.props.currentPage}
|
||||
recordCount={this.props.recordCount}
|
||||
@@ -63,6 +73,16 @@ class Candidatures extends React.Component {
|
||||
searchable={false}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</LayoutGrid>
|
||||
);
|
||||
}
|
||||
@@ -83,4 +103,4 @@ function mapStateToProps(state) {
|
||||
};
|
||||
}
|
||||
|
||||
export default withStyles(styles)(connect(mapStateToProps, {fetchAdsAnsweredRequest })(Candidatures))
|
||||
export default withStyles(styles)(connect(mapStateToProps, {fetchJobsAnsweredRequest })(Candidatures))
|
||||
|
||||
@@ -57,7 +57,7 @@ class Confidentialite extends Component {
|
||||
</Head>
|
||||
<div className={classes.container}>
|
||||
<Typography className={classes.text} gutterBottom align="left">
|
||||
Nous vous invitons à lire avec attention le présent document. Pour toute question concernant ce document et, d’une manière générale, sur la collecte et le traitement de vos informations personnelles par la société talentstube.com, n’hésitez pas à nous contacter via le formulaire présent sur la page contact : <a href="https://blog.talentstube.com/contact.html" className={classes.link} target="_blank">https://blog.talentstube.com/contact.html</a>
|
||||
Nous vous invitons à lire avec attention le présent document. Pour toute question concernant ce document et, d’une manière générale, sur la collecte et le traitement de vos informations personnelles par la société talentstube.com, n’hésitez pas à nous contacter via le formulaire présent sur la page contact : <a href="https://blog.talentstube.com/contact" className={classes.link} target="_blank">https://blog.talentstube.com/contact</a>
|
||||
</Typography>
|
||||
|
||||
<Typography className={classes.title} component="h2" gutterBottom align="left">
|
||||
@@ -155,7 +155,7 @@ class Confidentialite extends Component {
|
||||
`
|
||||
Vous disposez d'un droit d'accès, de rectification, de suppression, d’opposition et de portabilité des données. Nous disposons d’un délai de 30 jours à compter de votre demande pour apporter une réponse.
|
||||
Vous pouvez demander une limitation du traitement des données collectées. L’exercice de ces droits peut exercer ce droit auprès de TALENTS TUBE en adressant une requête soit par voie postale à l'adresse suivante : 3 Rue Louis de Broglie, Village By CA 56000 Vannes, soit par courrier électronique via le formulaire présent sur la page Contact `
|
||||
}<a href="https://blog.talentstube.com/contact.html" className={classes.link} target="_blank">https://blog.talentstube.com/contact.html</a>{`. Cette requête devra être accompagnée d'une pièce d'identité revêtant la signature de l'Utilisateur et devra préciser l'adresse et le moyen par lesquelles une réponse pourra être envoyée..
|
||||
}<a href="https://blog.talentstube.com/contact" className={classes.link} target="_blank">https://blog.talentstube.com/contact</a>{`. Cette requête devra être accompagnée d'une pièce d'identité revêtant la signature de l'Utilisateur et devra préciser l'adresse et le moyen par lesquelles une réponse pourra être envoyée..
|
||||
`
|
||||
}
|
||||
</Typography>
|
||||
|
||||
@@ -31,7 +31,7 @@ class Conseils extends React.Component {
|
||||
<title>Quelques conseils !</title>
|
||||
<meta name="description" content="Quelques conseils !" />
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
<link rel="canonical" href="https://app.talentstube.com" />
|
||||
|
||||
</Head>
|
||||
<section className={classes.container}>
|
||||
<VideoVimeo videoId='356411947' autoplay='1' />
|
||||
|
||||
@@ -278,13 +278,25 @@ const styles = theme => ({
|
||||
},
|
||||
button: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(4),
|
||||
marginRight: theme.spacing(4),
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.important,
|
||||
alignSelf: 'center',
|
||||
},
|
||||
voirOffre: {
|
||||
textTransform: 'inherit',
|
||||
marginLeft: theme.spacing(1),
|
||||
marginRight: theme.spacing(1),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
color: '#BBBCBD',
|
||||
backgroundColor: '#F3F3F4',
|
||||
|
||||
},
|
||||
buttonContainer: {
|
||||
alignItems: 'right',
|
||||
},
|
||||
chip: {
|
||||
color: theme.palette.secondary.main,
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
@@ -384,11 +396,12 @@ class Entreprise extends React.Component {
|
||||
const { loading } = this.state;
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location
|
||||
: publicRuntimeConfig.frontServerUrl + `/Entreprise/${company.id}`;
|
||||
|
||||
const descriptionVille = company.addresses.billing.city ? company.addresses.billing.city : "";
|
||||
const descriptionCompany = company.brand_name ? company.brand_name : "";
|
||||
return (
|
||||
<LayoutCompany backLink="/Entreprises" companyId={company.id}>
|
||||
<OgHead seo_title={company.brand_name && company.brand_name}
|
||||
seo_description={company.description}
|
||||
<OgHead seo_title={company.brand_name && company.brand_name+" recrute des candidats en vidéo | Talents Tube"}
|
||||
seo_description={"Découvrez l'entreprise "+descriptionCompany +" et ses offres en vidéo - "+descriptionVille+ ". Envoyez votre candidature spontanée en vidéo."}
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrl}
|
||||
></OgHead>
|
||||
@@ -414,14 +427,24 @@ class Entreprise extends React.Component {
|
||||
:
|
||||
(<Chip label={nbOffre} className={classes.chip + ' ' + classes.chipHeader} />)
|
||||
}
|
||||
|
||||
{/* ville */}
|
||||
</div>
|
||||
</div>
|
||||
<div className={classes.buttonContainer}>
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button}
|
||||
onClick={() => Router.push(`/Reponse?companyId=${company.id}`)}
|
||||
>Candidature spontanée</Button>
|
||||
<Link href="#discover" >
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.voirOffre + ' cypButtonApply'}
|
||||
>Voir les offres</Button>
|
||||
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
</Hidden>
|
||||
{company.presentation_video && <VideoVimeo videoId={Ar.last(_.split(company.presentation_video.cdn_url, '/'))} autoplay='1' />}
|
||||
@@ -503,6 +526,7 @@ class Entreprise extends React.Component {
|
||||
className={classes.button}
|
||||
onClick={() => Router.push(`/Reponse?companyId=${company.id}`)}
|
||||
>Candidature spontanée</Button>
|
||||
|
||||
<Typography className={classes.contentCondition}>
|
||||
ou
|
||||
</Typography>
|
||||
|
||||
@@ -94,8 +94,8 @@ class Entreprises extends React.Component {
|
||||
content=""/>
|
||||
|
||||
</Head> */}
|
||||
<OgHead seo_title="Entreprises qui recrutent – Talents Tube"
|
||||
seo_description="Les entreprises en vidéo."
|
||||
<OgHead seo_title="Vidéos marque employeur d'entreprises qui recrutent | Talents Tube"
|
||||
seo_description="Vidéos marque employeur d'entreprises qui recrutent, découvrez leurs offres d'emploi en vidéo. Postulez simplement en vidéo à l'offre de votre choix."
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrl}
|
||||
seo_key="Recrutement, video"
|
||||
|
||||
@@ -102,6 +102,7 @@ function Help(props) {
|
||||
<Layout>
|
||||
<Head>
|
||||
<title key="title">Recrutement vidéo : fonctionnement – Talents Tube</title>
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
<section className={classes.root}>
|
||||
<Typography gutterBottom component="h1"
|
||||
@@ -155,7 +156,7 @@ function Help(props) {
|
||||
<Typography
|
||||
className={classes.text}
|
||||
gutterBottom>
|
||||
Suivez ce <a href="https://blog.talentstube.com/faire-cv-video" target="_blank" >lien</a>
|
||||
Suivez ce <a href="https://blog.talentstube.com/cv-video" target="_blank" >lien</a>
|
||||
</Typography>
|
||||
|
||||
|
||||
|
||||
@@ -316,15 +316,15 @@ class LoginPage extends React.Component {
|
||||
</Typography>
|
||||
|
||||
|
||||
<Typography
|
||||
{/* <Typography
|
||||
paragraph={true}
|
||||
align="center"
|
||||
className={classes.conditionalText}
|
||||
>Ou</Typography>
|
||||
>Ou</Typography> */}
|
||||
|
||||
|
||||
</form>
|
||||
<SocialButtonsAuth linkedInAuth={this.linkedInAuth} facebookAuth={this.facebookAuth} />
|
||||
{/* <SocialButtonsAuth linkedInAuth={this.linkedInAuth} facebookAuth={this.facebookAuth} /> */}
|
||||
|
||||
<div className={classes.form}>
|
||||
<Typography
|
||||
|
||||
@@ -6,7 +6,7 @@ import getConfig from 'next/config'
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import LayoutOffre from "../components/templates/LayoutOffre";
|
||||
import OffreDetail from "../components/organisms/OffreDetail";
|
||||
import { fetchAdRequest, clearAd, countAdViewRequest } from '../actions/ads'
|
||||
import { fetchJobRequest, clearAd, countAdViewRequest } from '../actions/ads'
|
||||
import _ from "lodash/string";
|
||||
|
||||
const styles = theme => ({
|
||||
@@ -31,7 +31,7 @@ class Offre extends React.Component {
|
||||
const { classes, offre } = this.props;
|
||||
|
||||
return (
|
||||
<LayoutOffre backLink="/Offres" offreId={offre.id} isProvided={offre.is_promoted}>
|
||||
<LayoutOffre backLink="/Offres" offreId={offre.id} offre={offre} isProvided={offre.is_promoted}>
|
||||
<OffreDetail offre={offre}/>
|
||||
</LayoutOffre>
|
||||
);
|
||||
@@ -42,7 +42,7 @@ class Offre extends React.Component {
|
||||
Offre.getInitialProps = function (context) {
|
||||
const { id } = context.query
|
||||
|
||||
context.store.dispatch(fetchAdRequest(id))
|
||||
context.store.dispatch(fetchJobRequest(id))
|
||||
|
||||
return id;
|
||||
}
|
||||
@@ -57,4 +57,4 @@ Offre.propTypes = {
|
||||
classes: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
export default withStyles(styles)(connect(mapStateToProps, { fetchAdRequest, clearAd, countAdViewRequest})(Offre));
|
||||
export default withStyles(styles)(connect(mapStateToProps, { fetchJobRequest, clearAd, countAdViewRequest})(Offre));
|
||||
|
||||
+17
-10
@@ -9,10 +9,12 @@ import LayoutGrid from "../components/templates/LayoutGrid";
|
||||
import Grid from "../components/templates/Grid"
|
||||
import OffreRow from "../components/organisms/OffreRow"
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import { fetchAdsRequest, togglePromotedFilterRequest} from '../actions/ads'
|
||||
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'
|
||||
|
||||
|
||||
const styles = theme => ({
|
||||
@@ -84,15 +86,20 @@ class Offres extends React.Component {
|
||||
const { classes } = this.props;
|
||||
const countColor = this.props.promotedFilter ? classes.provided : classes.primary;
|
||||
const btnClass = this.props.promotedFilter ? classes.buttonDefault : classes.buttonProvided;
|
||||
|
||||
const { publicRuntimeConfig } = getConfig();
|
||||
const socialShareUrl = typeof window !== 'undefined' ? window.location
|
||||
: publicRuntimeConfig.frontServerUrl + `/Offres`;
|
||||
const DefaultUrl = publicRuntimeConfig.symphonyUrl + "/img/default_picture_svg"
|
||||
const imgUrl = DefaultUrl ;
|
||||
return (
|
||||
<LayoutGrid backLink="/">
|
||||
<Head>
|
||||
<title key="title">Offres d’emploi en vidéo – Talents Tube</title>
|
||||
<meta name="description" content="Les offres d'emploi en vidéo." />
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
|
||||
</Head>
|
||||
<OgHead seo_title="Vidéos d'offres d'emploi, CDI, CDD, alternance et Stage | Talents Tube"
|
||||
seo_description="Vidéos d'offres d'emploi, CDI, CDD, alternance, stage et apprentissage d'entreprises qui recrutent sur Talents Tube."
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrl}
|
||||
seo_key="Recrutement, video"
|
||||
|
||||
></OgHead>
|
||||
|
||||
<Typography gutterBottom component="h1"
|
||||
className={classes.title}>
|
||||
@@ -100,7 +107,7 @@ class Offres extends React.Component {
|
||||
</Typography>
|
||||
<div className={classes.container}>
|
||||
<Grid CustomRowComponent={OffreRow}
|
||||
dataFetcher={this.props.fetchAdsRequest}
|
||||
dataFetcher={this.props.fetchJobsRequest}
|
||||
data={this.props.ads}
|
||||
currentPage={this.props.currentPage}
|
||||
recordCount={this.props.recordCount}
|
||||
@@ -141,4 +148,4 @@ function mapStateToProps(state) {
|
||||
};
|
||||
}
|
||||
|
||||
export default withStyles(styles)(connect(mapStateToProps, { fetchAdsRequest, togglePromotedFilterRequest })(Offres))
|
||||
export default withStyles(styles)(connect(mapStateToProps, { fetchJobsRequest, togglePromotedFilterRequest })(Offres))
|
||||
|
||||
@@ -5,11 +5,11 @@ import PropTypes from 'prop-types';
|
||||
import Stepper from '@material-ui/core/Stepper';
|
||||
import Step from '@material-ui/core/Step';
|
||||
import StepLabel from '@material-ui/core/StepLabel';
|
||||
import { fetchAdRequest } from '../actions/ads'
|
||||
import { fetchJobRequest } from '../actions/ads'
|
||||
import { fetchCompanyRequest } from '../actions/companies'
|
||||
import { fetchCurrentUserRequest } from '../actions/user'
|
||||
import { uploadMedia } from '../actions/media'
|
||||
import Loader from './../components/templates/loader'
|
||||
import LoaderVideo from './../components/templates/loaderVideo'
|
||||
import Answer from '../components/organisms/Answer'
|
||||
import LayoutBack from '../components/templates/LayoutBack'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
@@ -282,11 +282,11 @@ class Reponse extends React.Component {
|
||||
<title>Candidature vidéo</title>
|
||||
<meta name="description" content="Talent's tube, postulez en video." />
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
<link rel="canonical" href="https://app.talentstube.com" />
|
||||
|
||||
</Head>
|
||||
{/* https://codesandbox.io/s/ii0us */}
|
||||
{ loading ?
|
||||
<Loader /> :
|
||||
<LoaderVideo /> :
|
||||
<Fragment>
|
||||
|
||||
<section className={classes.headerContainer}>
|
||||
@@ -407,7 +407,8 @@ class Reponse extends React.Component {
|
||||
(
|
||||
<Answer mediaId={!!this.props.media && this.props.media.id}
|
||||
companyId={!!offre.company ? offre.company.id : !!company.brand_name ? company.id : null}
|
||||
adId={offre.id}>
|
||||
adId={offre.id}
|
||||
>
|
||||
</Answer>
|
||||
)}
|
||||
<Snack variant="error" message={!!!_.isEmpty(this.state.errors) && this.state.errors.message }
|
||||
@@ -429,7 +430,7 @@ Reponse.getInitialProps = function (context) {
|
||||
context.store.dispatch(fetchCurrentUserRequest())
|
||||
|
||||
if(!!adId)
|
||||
context.store.dispatch(fetchAdRequest(adId))
|
||||
context.store.dispatch(fetchJobRequest(adId))
|
||||
else if(!!companyId)
|
||||
context.store.dispatch(fetchCompanyRequest(companyId))
|
||||
|
||||
@@ -452,4 +453,4 @@ Reponse.propTypes = {
|
||||
classes: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
export default withStyles(styles)(connect(mapStateToProps, { fetchCurrentUserRequest, fetchAdRequest, fetchCompanyRequest, uploadMedia })(Reponse));
|
||||
export default withStyles(styles)(connect(mapStateToProps, { fetchCurrentUserRequest, fetchJobRequest, fetchCompanyRequest, uploadMedia })(Reponse));
|
||||
@@ -107,6 +107,7 @@ class ResetPassword extends Component {
|
||||
<Layout>
|
||||
<Head>
|
||||
<title key="title">Reset password</title>
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
<div className={classes.container}>
|
||||
<Typography
|
||||
|
||||
@@ -65,13 +65,16 @@ class VerifyEmail extends Component {
|
||||
<div className={classes.container}>
|
||||
<Typography gutterBottom align="center" className={classes.title}>
|
||||
Consultez vos e-mails
|
||||
</Typography>
|
||||
</Typography>
|
||||
<Typography gutterBottom align="left" className={classes.text}>
|
||||
Un e-mail a été envoyé à l'adresse <span className={classes.email}>{email}</span>
|
||||
</Typography>
|
||||
<Typography gutterBottom align="left" className={classes.text}>
|
||||
Cliquez sur le lien dans l'e-mail que nous vous avons envoyé pour activer votre compte.
|
||||
</Typography>
|
||||
</Typography>
|
||||
<Typography gutterBottom align="left" className={classes.text}>
|
||||
N'oubliez pas de consulter vos spams, si vous ne trouvez pas le lien d'activation dans votre boite de réception.
|
||||
</Typography>
|
||||
<section className={classes.bottomContainer}>
|
||||
<Typography gutterBottom align="center" className={classes.bottomText}>
|
||||
Cliquez sur suivant pour continuer votre candidature
|
||||
@@ -83,7 +86,7 @@ class VerifyEmail extends Component {
|
||||
onClick={() => Router.push('/Login')}
|
||||
>
|
||||
Suivant
|
||||
</Button>
|
||||
</Button>
|
||||
</section>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
@@ -1,357 +0,0 @@
|
||||
/* eslint-disable jsx-a11y/anchor-is-valid
|
||||
|
||||
*/
|
||||
|
||||
/* eslint-disable jsx-a11y/anchor-is-valid */
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import Button from '@material-ui/core/Button';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import Layout from "../components/templates/Layout"
|
||||
import Footer from '../components/organisms/Footer';
|
||||
import Head from 'next/head'
|
||||
import VideoVimeo from './../components/atoms/VideoVimeo'
|
||||
import Card from '@material-ui/core/Card';
|
||||
import CardActionArea from '@material-ui/core/CardActionArea';
|
||||
import CardActions from '@material-ui/core/CardActions';
|
||||
import CardContent from '@material-ui/core/CardContent';
|
||||
import CardMedia from '@material-ui/core/CardMedia';
|
||||
import Grid from '@material-ui/core/Grid';
|
||||
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
|
||||
|
||||
const styles = theme => ({
|
||||
root: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
padding: theme.spacing(2),
|
||||
[theme.breakpoints.up('sm')]: {
|
||||
margin: 'auto',
|
||||
padding: '0 20vw',
|
||||
paddingBottom: theme.spacing(5),
|
||||
},
|
||||
},
|
||||
title: {
|
||||
fontFamily: 'Dosis',
|
||||
fontSize: '1.5em',
|
||||
fontWeight: '600',
|
||||
padding: theme.spacing(3, 0),
|
||||
[theme.breakpoints.up('sm')]: {
|
||||
paddingTop: theme.spacing(6),
|
||||
},
|
||||
},
|
||||
subTitle: {
|
||||
fontSize: '1.1em',
|
||||
fontWeight: '500',
|
||||
padding: theme.spacing(2, 0),
|
||||
},
|
||||
text: {
|
||||
fontSize: '0.9em',
|
||||
fontWeight: '300',
|
||||
},
|
||||
teamworkingImg: {
|
||||
padding: theme.spacing(2, 0),
|
||||
width: '100%',
|
||||
[theme.breakpoints.up('sm')]: {
|
||||
width: 'inherit',
|
||||
},
|
||||
},
|
||||
captureImg: {
|
||||
padding: theme.spacing(2),
|
||||
width: '100%',
|
||||
objectFit: 'contain',
|
||||
},
|
||||
button: {
|
||||
textTransform: 'inherit',
|
||||
margin: theme.spacing(4,8),
|
||||
padding: theme.spacing(1.2, 2),
|
||||
borderRadius: '3px',
|
||||
},
|
||||
primary: {
|
||||
color: theme.palette.primary.main,
|
||||
},
|
||||
bold: {
|
||||
fontWeight: '500',
|
||||
},
|
||||
video: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
position: 'relative',
|
||||
paddingBottom: '55%', /* 16:9 58%*/
|
||||
'& iframe': {
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
left: 'calc(50% - 50vw)',
|
||||
width: '100vw',
|
||||
height: '100%',
|
||||
},
|
||||
[theme.breakpoints.up('md')]: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
position: 'relative',
|
||||
paddingBottom: '55%', /* 16:9 */
|
||||
'& iframe': {
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
left: 'calc(50% - 27vw)',
|
||||
width: '54vw',
|
||||
height: '100%',
|
||||
},
|
||||
},
|
||||
},
|
||||
containerReactApp: {
|
||||
width:'100%',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
height: '10vh',
|
||||
paddingTop: theme.spacing(4),
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
[theme.breakpoints.down('xs')]: {
|
||||
height: '4vh',
|
||||
},
|
||||
[theme.breakpoints.up('md')]: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-around',
|
||||
height: '4vh',
|
||||
padding: theme.spacing(6, 1),
|
||||
position: 'relative',
|
||||
},
|
||||
},
|
||||
titleReactApp: {
|
||||
fontFamily: 'Dosis',
|
||||
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',
|
||||
},
|
||||
},
|
||||
paper: {
|
||||
padding: '6px 16px',
|
||||
},
|
||||
secondaryTail: {
|
||||
backgroundColor: theme.palette.secondary.main,
|
||||
},
|
||||
|
||||
media: {
|
||||
width:350,
|
||||
height: 140,
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
function Help(props) {
|
||||
const { classes } = props;
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<Head>
|
||||
<title key="title">Recrutement vidéo : fonctionnement – Talents Tube</title>
|
||||
</Head>
|
||||
<section className={classes.root}>
|
||||
<Typography gutterBottom component="h1"
|
||||
className={classes.title}>
|
||||
Comment réussir votre CV vidéo <span className={classes.primary}>?</span>
|
||||
</Typography>
|
||||
|
||||
<Typography
|
||||
className={classes.text}
|
||||
gutterBottom>
|
||||
Le CV vidéo est <span className={classes.bold}>le meilleur moyen de mettre en image et d’illustrer votre expérience</span>, vos compétences et votre personnalité. S'il est de plus en plus prisé chez les recruteurs et les candidats, certains codes sont tout de même à respecter. Afin de réussir votre CV vidéo et mettre toutes les chances de votre côté, suivez les conseils de Talents Tube !
|
||||
</Typography>
|
||||
{/* <Typography gutterBottom component="h2"
|
||||
className={classes.subTitle}>
|
||||
Comment postuler à une offre d’emploi en vidéo
|
||||
</Typography> */}
|
||||
<VideoVimeo classesOverride={classes.videoVimeo} videoId="286344340" autoplay='0' />
|
||||
<Typography
|
||||
className={classes.text}
|
||||
gutterBottom>
|
||||
|
||||
</Typography>
|
||||
<div className={classes.containerReactApp}>
|
||||
|
||||
<Typography
|
||||
gutterBottom
|
||||
color="secondary"
|
||||
align="center"
|
||||
component="h3"
|
||||
className={classes.titleReactApp}
|
||||
>
|
||||
Écrivez un scénario
|
||||
</Typography>
|
||||
|
||||
|
||||
</div>
|
||||
<Grid container spacing={3}>
|
||||
<Card className={classes.root}>
|
||||
<CardActionArea>
|
||||
<CardMedia
|
||||
className={classes.media}
|
||||
image=""
|
||||
title="Contemplative Reptile"
|
||||
/>
|
||||
<CardContent>
|
||||
<Typography gutterBottom variant="h5" component="h2">
|
||||
Écrivez un scénario
|
||||
</Typography>
|
||||
<Typography variant="body2" color="textSecondary" component="p">
|
||||
Le scénario est le premier élément indispensable. Hiérarchisez toutes les informations que vous souhaitez aborder :
|
||||
<ul>
|
||||
<li> Présentation</li>
|
||||
<li>Formations </li>
|
||||
<li>Expériences </li>
|
||||
<li>Compétences </li>
|
||||
<li>Personnalité </li>
|
||||
<li>Loisirs / Passions </li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CardContent>
|
||||
</CardActionArea>
|
||||
<CardActions>
|
||||
<Button size="small" color="primary">
|
||||
Share
|
||||
</Button>
|
||||
<Button size="small" color="primary">
|
||||
Learn More
|
||||
</Button>
|
||||
</CardActions>
|
||||
</Card>
|
||||
</Grid>
|
||||
<Grid container spacing={3}>
|
||||
<Card className={classes.root}>
|
||||
<CardActionArea>
|
||||
<CardMedia
|
||||
className={classes.media}
|
||||
image=""
|
||||
title="Contemplative Reptile"
|
||||
/>
|
||||
<CardContent>
|
||||
<Typography gutterBottom variant="h5" component="h2">
|
||||
Passez à la réalisation
|
||||
</Typography>
|
||||
<Typography variant="body2" color="textSecondary" component="p">
|
||||
Le scénario est le premier élément indispensable. Hiérarchisez toutes les informations que vous souhaitez aborder :
|
||||
<ul>
|
||||
<li> Présentation</li>
|
||||
<li>Formations </li>
|
||||
<li>Expériences </li>
|
||||
<li>Compétences </li>
|
||||
<li>Personnalité </li>
|
||||
<li>Loisirs / Passions </li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CardContent>
|
||||
</CardActionArea>
|
||||
<CardActions>
|
||||
<Button size="small" color="primary">
|
||||
Share
|
||||
</Button>
|
||||
<Button size="small" color="primary">
|
||||
Learn More
|
||||
</Button>
|
||||
</CardActions>
|
||||
</Card>
|
||||
|
||||
<Card className={classes.root}>
|
||||
<CardActionArea>
|
||||
<CardMedia
|
||||
className={classes.media}
|
||||
image=""
|
||||
title="Contemplative Reptile"
|
||||
/>
|
||||
<CardContent>
|
||||
<Typography gutterBottom variant="h5" component="h2">
|
||||
Passez à la réalisation
|
||||
</Typography>
|
||||
<Typography variant="body2" color="textSecondary" component="p">
|
||||
Le scénario est le premier élément indispensable. Hiérarchisez toutes les informations que vous souhaitez aborder :
|
||||
<ul>
|
||||
<li> Présentation</li>
|
||||
<li>Formations </li>
|
||||
<li>Expériences </li>
|
||||
<li>Compétences </li>
|
||||
<li>Personnalité </li>
|
||||
<li>Loisirs / Passions </li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CardContent>
|
||||
</CardActionArea>
|
||||
<CardActions>
|
||||
<Button size="small" color="primary">
|
||||
Share
|
||||
</Button>
|
||||
<Button size="small" color="primary">
|
||||
Learn More
|
||||
</Button>
|
||||
</CardActions>
|
||||
</Card>
|
||||
|
||||
<Card className={classes.root}>
|
||||
<CardActionArea>
|
||||
<CardMedia
|
||||
className={classes.media}
|
||||
image=""
|
||||
title="Contemplative Reptile"
|
||||
/>
|
||||
<CardContent>
|
||||
<Typography gutterBottom variant="h5" component="h2">
|
||||
Passez à la réalisation
|
||||
</Typography>
|
||||
<Typography variant="body2" color="textSecondary" component="p">
|
||||
Le scénario est le premier élément indispensable. Hiérarchisez toutes les informations que vous souhaitez aborder :
|
||||
<ul>
|
||||
<li> Présentation</li>
|
||||
<li>Formations </li>
|
||||
<li>Expériences </li>
|
||||
<li>Compétences </li>
|
||||
<li>Personnalité </li>
|
||||
<li>Loisirs / Passions </li>
|
||||
</ul>
|
||||
</Typography>
|
||||
</CardContent>
|
||||
</CardActionArea>
|
||||
<CardActions>
|
||||
<Button size="small" color="primary">
|
||||
Share
|
||||
</Button>
|
||||
<Button size="small" color="primary">
|
||||
Learn More
|
||||
</Button>
|
||||
</CardActions>
|
||||
</Card>
|
||||
</Grid>
|
||||
|
||||
</section>
|
||||
<Footer />
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
|
||||
Help.propTypes = {
|
||||
classes: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
export default withStyles(styles)(Help);
|
||||
+15
-15
@@ -8,7 +8,7 @@ import { Typography } from '@material-ui/core';
|
||||
import Button from '@material-ui/core/Button';
|
||||
import Router from 'next/router'
|
||||
import { connect } from 'react-redux'
|
||||
import { fetchEmphasisAdsRequest } from "../actions/ads";
|
||||
import { fetchEmphasisJobsRequest } from "../actions/ads";
|
||||
import { fetchEmphasisCompaniesRequest } from "../actions/companies";
|
||||
import Loader from './../components/templates/loader'
|
||||
import { isEmpty } from "lodash"
|
||||
@@ -18,9 +18,9 @@ import dynamic from 'next/dynamic'
|
||||
import OgHead from '../components/atoms/OgHead';
|
||||
import getConfig from 'next/config'
|
||||
|
||||
const VideoSlider = dynamic(() => import('../components/organisms/ShortVideoHooker'), {
|
||||
ssr: false
|
||||
});
|
||||
// const VideoSlider = dynamic(() => import('../components/organisms/ShortVideoHooker'), {
|
||||
// ssr: false
|
||||
// });
|
||||
const HorizontalScroller = dynamic(() => import('../components/organisms/HorizontalScroller'), {
|
||||
ssr: false
|
||||
});
|
||||
@@ -140,17 +140,17 @@ const styles = theme => ({
|
||||
|
||||
class Index extends React.Component {
|
||||
state = {
|
||||
emphasisAds: [],
|
||||
emphasisJobs: [],
|
||||
emphasisCompanies: []
|
||||
}
|
||||
componentDidMount() {
|
||||
localStorage.setItem("loginRedirect", "/")
|
||||
this.props.fetchEmphasisAdsRequest({ isEmphasis: 1 })
|
||||
this.props.fetchEmphasisJobsRequest({ isEmphasis: 1 })
|
||||
this.props.fetchEmphasisCompaniesRequest({ isEmphasis: 1 })
|
||||
}
|
||||
UNSAFE_componentWillReceiveProps(nextProps) {
|
||||
this.setState({
|
||||
emphasisAds: nextProps.emphasisAds,
|
||||
emphasisJobs: nextProps.emphasisJobs,
|
||||
emphasisCompanies: nextProps.emphasisCompanies
|
||||
})
|
||||
}
|
||||
@@ -163,8 +163,8 @@ class Index extends React.Component {
|
||||
const imgUrl = DefaultUrl
|
||||
return (
|
||||
<Layout>
|
||||
<OgHead seo_title="Entreprises qui recrutent – Talents Tube"
|
||||
seo_description="Les entreprises en vidéo."
|
||||
<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"
|
||||
@@ -172,7 +172,7 @@ class Index extends React.Component {
|
||||
></OgHead>
|
||||
<div className={classes.container}>
|
||||
|
||||
<VideoSlider />
|
||||
{/* <VideoSlider /> */}
|
||||
|
||||
<section className={classes.scrollerSection + ' ' + classes.scrollerSectionOffer}>
|
||||
<div
|
||||
@@ -189,11 +189,11 @@ class Index extends React.Component {
|
||||
</Typography>
|
||||
</div>
|
||||
|
||||
{this.state.emphasisAds.loading ?
|
||||
{this.state.emphasisJobs.loading ?
|
||||
(<Loader />)
|
||||
: !isEmpty(this.state.emphasisAds.data) ? (
|
||||
: !isEmpty(this.state.emphasisJobs.data) ? (
|
||||
<HorizontalScroller
|
||||
data={this.state.emphasisAds.data}
|
||||
data={this.state.emphasisJobs.data}
|
||||
className={classes.HorizontalScroller}
|
||||
type="offre"
|
||||
>
|
||||
@@ -263,7 +263,7 @@ class Index extends React.Component {
|
||||
|
||||
function mapStateToProps(state) {
|
||||
return {
|
||||
emphasisAds: state.emphasisAds,
|
||||
emphasisJobs: state.emphasisJobs,
|
||||
emphasisCompanies: state.emphasisCompanies
|
||||
};
|
||||
}
|
||||
@@ -272,4 +272,4 @@ Index.propTypes = {
|
||||
classes: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
export default (connect(mapStateToProps, { fetchEmphasisAdsRequest, fetchEmphasisCompaniesRequest })(withStyles(styles)(Index)));
|
||||
export default (connect(mapStateToProps, { fetchEmphasisJobsRequest, fetchEmphasisCompaniesRequest })(withStyles(styles)(Index)));
|
||||
|
||||
+67
-31
@@ -1,43 +1,79 @@
|
||||
import React from 'react';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import {makeStyles} from '@material-ui/core/styles';
|
||||
import Layout from "../components/templates/Layout";
|
||||
import AccountProfile from "../components/organisms/AccountProfile";
|
||||
import { Typography } from '@material-ui/core';
|
||||
import Head from 'next/head'
|
||||
// import AdBlockDetect from 'react-ad-block-detect';
|
||||
import AdBlockDetect from 'react-ad-block-detect';
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
width: '100%',
|
||||
},
|
||||
button: {
|
||||
marginRight: theme.spacing(1),
|
||||
},
|
||||
completed: {
|
||||
display: 'inline-block',
|
||||
},
|
||||
instructions: {
|
||||
marginTop: theme.spacing(1),
|
||||
marginBottom: theme.spacing(1),
|
||||
root: {
|
||||
width: '100%'
|
||||
},
|
||||
button: {
|
||||
marginRight: theme.spacing(1)
|
||||
},
|
||||
completed: {
|
||||
display: 'inline-block'
|
||||
},
|
||||
instructions: {
|
||||
marginTop: theme.spacing(1),
|
||||
marginBottom: theme.spacing(1)
|
||||
},
|
||||
information: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
color: "#fff",
|
||||
fontWeight: '700',
|
||||
fontSize: '1.15em',
|
||||
fontFamily: 'Roboto',
|
||||
[
|
||||
theme
|
||||
.breakpoints
|
||||
.up('md')
|
||||
]: {
|
||||
display: 'flex',
|
||||
flexDirection: 'row',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'space-around',
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
padding: theme.spacing(2, 2)
|
||||
},
|
||||
'& a': {
|
||||
textDecoration: 'none'
|
||||
},
|
||||
texteBlanc: {
|
||||
color: "#fff",
|
||||
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
|
||||
export default function HorizontalNonLinearStepper() {
|
||||
const classes = useStyles();
|
||||
const classes = useStyles();
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<Head>
|
||||
<title key="title">Profile – Talents Tube</title>
|
||||
</Head>
|
||||
<div >
|
||||
<AccountProfile />
|
||||
</div>
|
||||
|
||||
{/* <AdBlockDetect>
|
||||
<p>AdBlocks a été détecté. Pour que Talents Tube puisse fonctionner correctement, veuillez désactiver Ad Blocks</p>
|
||||
</AdBlockDetect> */}
|
||||
</Layout>
|
||||
);
|
||||
return (
|
||||
<Layout>
|
||||
<Head>
|
||||
<title key="title">Profil – Talents Tube</title>
|
||||
<meta key="robots" name="robots" content="noindex, nofollow"></meta>
|
||||
</Head>
|
||||
<div >
|
||||
|
||||
<AdBlockDetect >
|
||||
<div className={classes.information}>
|
||||
|
||||
<p>AdBlocks a été détecté. Pour que Talents Tube puisse fonctionner
|
||||
correctement, veuillez désactiver Ad Blocks</p>
|
||||
|
||||
</div>
|
||||
</AdBlockDetect>
|
||||
</div>
|
||||
<div >
|
||||
<AccountProfile/>
|
||||
</div>
|
||||
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
import { createSelector } from "reselect";
|
||||
import {
|
||||
FETCH_AD_REQUEST,
|
||||
FETCH_AD_SUCCESS,
|
||||
FETCH_AD_FAILURE,
|
||||
FETCH_JOB_REQUEST,
|
||||
FETCH_JOB_SUCCESS,
|
||||
FETCH_JOB_FAILURE,
|
||||
CLEAR_AD
|
||||
} from "../types";
|
||||
|
||||
export function ad(state = {
|
||||
}, action = {}) {
|
||||
switch (action.type) {
|
||||
case FETCH_AD_REQUEST:
|
||||
case FETCH_JOB_REQUEST:
|
||||
return {
|
||||
...state,
|
||||
loading:true
|
||||
};
|
||||
case FETCH_AD_SUCCESS:
|
||||
case FETCH_JOB_SUCCESS:
|
||||
return {
|
||||
...state,
|
||||
...action.res,
|
||||
loading: false
|
||||
};
|
||||
case FETCH_AD_FAILURE:
|
||||
case FETCH_JOB_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
errors: action.error,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { createSelector } from "reselect";
|
||||
import {
|
||||
FETCH_ADS_SUCCESS,
|
||||
FETCH_ADS_FAILURE,
|
||||
FETCH_ADS_REQUEST,
|
||||
FETCH_JOBS_SUCCESS,
|
||||
FETCH_JOBS_FAILURE,
|
||||
FETCH_JOBS_REQUEST,
|
||||
TOGGLE_PROMOTED_FILTER_ADS,
|
||||
} from "../types";
|
||||
|
||||
@@ -10,18 +10,18 @@ export function ads(state = {
|
||||
}, action = {}) {
|
||||
|
||||
switch (action.type) {
|
||||
case FETCH_ADS_REQUEST:
|
||||
case FETCH_JOBS_REQUEST:
|
||||
return {
|
||||
...state,
|
||||
loading:true
|
||||
};
|
||||
case FETCH_ADS_SUCCESS:
|
||||
case FETCH_JOBS_SUCCESS:
|
||||
return {
|
||||
...state,
|
||||
...action.res,
|
||||
loading:false
|
||||
};
|
||||
case FETCH_ADS_FAILURE:
|
||||
case FETCH_JOBS_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
errors: action.error,
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
import { createSelector } from "reselect";
|
||||
import {
|
||||
FETCH_ADS_ANSWER_REQUEST,
|
||||
FETCH_ADS_ANSWER_SUCCESS,
|
||||
FETCH_ADS_ANSWER_FAILURE,
|
||||
FETCH_JOBS_ANSWER_REQUEST,
|
||||
FETCH_JOBS_ANSWER_SUCCESS,
|
||||
FETCH_JOBS_ANSWER_FAILURE,
|
||||
} from "../types";
|
||||
|
||||
export function answers(state = {
|
||||
}, action = {}) {
|
||||
switch (action.type) {
|
||||
case FETCH_ADS_ANSWER_REQUEST:
|
||||
case FETCH_JOBS_ANSWER_REQUEST:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
};
|
||||
case FETCH_ADS_ANSWER_SUCCESS:
|
||||
case FETCH_JOBS_ANSWER_SUCCESS:
|
||||
return {
|
||||
...state,
|
||||
...action.res,
|
||||
loading: false
|
||||
};
|
||||
case FETCH_ADS_ANSWER_FAILURE:
|
||||
case FETCH_JOBS_ANSWER_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
errors: action.error,
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
import { createSelector } from "reselect";
|
||||
import {
|
||||
FETCH_EMPHASIS_ADS_SUCCESS,
|
||||
FETCH_EMPHASIS_ADS_FAILURE,
|
||||
FETCH_EMPHASIS_ADS_REQUEST,
|
||||
FETCH_EMPHASIS_JOBS_SUCCESS,
|
||||
FETCH_EMPHASIS_JOBS_FAILURE,
|
||||
FETCH_EMPHASIS_JOBS_REQUEST,
|
||||
|
||||
} from "../types";
|
||||
|
||||
export function emphasisAds(state = {
|
||||
export function emphasisJobs(state = {
|
||||
}, action = {}) {
|
||||
|
||||
switch (action.type) {
|
||||
|
||||
case FETCH_EMPHASIS_ADS_REQUEST:
|
||||
case FETCH_EMPHASIS_JOBS_REQUEST:
|
||||
return {
|
||||
...state,
|
||||
loading:true
|
||||
};
|
||||
case FETCH_EMPHASIS_ADS_SUCCESS:
|
||||
case FETCH_EMPHASIS_JOBS_SUCCESS:
|
||||
return {
|
||||
...action.res,
|
||||
loading:false
|
||||
};
|
||||
case FETCH_EMPHASIS_ADS_FAILURE:
|
||||
case FETCH_EMPHASIS_JOBS_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
errors: action.error,
|
||||
@@ -34,8 +34,8 @@ export function emphasisAds(state = {
|
||||
}
|
||||
|
||||
|
||||
export const emphasisAdsHashSelector = state => state.emphasisAds.data;
|
||||
export const emphasisJobsHashSelector = state => state.emphasisJobs.data;
|
||||
|
||||
export const emphasisAdsSelector = createSelector(emphasisAdsHashSelector, hash =>
|
||||
export const emphasisJobsSelector = createSelector(emphasisJobsHashSelector, hash =>
|
||||
Object.values(hash)
|
||||
);
|
||||
@@ -3,7 +3,7 @@ import { combineReducers } from "redux";
|
||||
import { user } from "./reducers/user";
|
||||
import { ad } from "./reducers/ad";
|
||||
import { ads } from "./reducers/ads";
|
||||
import { emphasisAds } from "./reducers/emphasisAds";
|
||||
import { emphasisJobs } from "./reducers/emphasisJobs";
|
||||
import { company } from "./reducers/company";
|
||||
import { companies } from "./reducers/companies";
|
||||
import { emphasisCompanies } from "./reducers/emphasisCompanies";
|
||||
@@ -24,8 +24,8 @@ export const exampleInitialState = {
|
||||
ad: {
|
||||
|
||||
},
|
||||
emphasisAds: {
|
||||
|
||||
emphasisJobs: {
|
||||
|
||||
},
|
||||
companies: {
|
||||
data: {}
|
||||
@@ -50,7 +50,7 @@ export const exampleInitialState = {
|
||||
export default combineReducers({
|
||||
user,
|
||||
ads,
|
||||
emphasisAds,
|
||||
emphasisJobs,
|
||||
ad,
|
||||
companies,
|
||||
company,
|
||||
|
||||
+10
-10
@@ -9,18 +9,18 @@ import {
|
||||
requestRegisterSaga, requestLogoutSaga, requestNewsletterSubscribitionSaga,
|
||||
requestUpdateUserRequestSaga, requestUserSubscriptionToPushSaga
|
||||
} from './sagas/userSaga.js'
|
||||
import { requestAdsSaga, requestAdSaga, requestEmphasisAdsSaga, countAdViewRequestSaga } from './sagas/offreSaga.js'
|
||||
import { requestAdsSaga, requestAdSaga, requestEmphasisJobsSaga, countAdViewRequestSaga } from './sagas/offreSaga.js'
|
||||
import { requestCompaniesSaga, requestCompanySaga, requestEmphasisCompaniesSaga, countCompanyViewRequestSaga } from './sagas/companySaga.js'
|
||||
import { postAnswerMessageSaga, postAdAnswerRequestSaga, uploadMediaSaga, uploadMediaPresSaga, uploadMediaCvSaga, fetchAdsAnsweredRequestSaga, fetchAnswerRequestSaga, fetchAnswerMessagesRequestSaga } from './sagas/answerSaga.js'
|
||||
import { postAnswerMessageSaga, postAdAnswerRequestSaga, uploadMediaSaga, uploadMediaPresSaga, uploadMediaCvSaga, fetchJobsAnsweredRequestSaga, fetchAnswerRequestSaga, fetchAnswerMessagesRequestSaga } from './sagas/answerSaga.js'
|
||||
|
||||
import {
|
||||
REQUEST_LOGIN,
|
||||
REQUEST_LOGOUT,
|
||||
REQUEST_REGISTER,
|
||||
FETCH_CURRENT_USER_REQUEST,
|
||||
FETCH_ADS_REQUEST,
|
||||
FETCH_AD_REQUEST,
|
||||
FETCH_EMPHASIS_ADS_REQUEST,
|
||||
FETCH_JOBS_REQUEST,
|
||||
FETCH_JOB_REQUEST,
|
||||
FETCH_EMPHASIS_JOBS_REQUEST,
|
||||
FETCH_EMPHASIS_COMPANIES_REQUEST,
|
||||
FETCH_COMPANIES_REQUEST,
|
||||
FETCH_COMPANY_REQUEST,
|
||||
@@ -32,7 +32,7 @@ import {
|
||||
UPLOAD_MEDIA_PRES_REQUEST,
|
||||
UPLOAD_MEDIA_CV_REQUEST,
|
||||
UPDATE_USER_REQUEST,
|
||||
FETCH_ADS_ANSWER_REQUEST,
|
||||
FETCH_JOBS_ANSWER_REQUEST,
|
||||
FETCH_ANSWER_REQUEST,
|
||||
VERIFY_USER_REQUEST,
|
||||
RESET_PASSWORD_REQUEST,
|
||||
@@ -57,9 +57,9 @@ function* rootSaga() {
|
||||
takeLatest(FETCH_CURRENT_USER_REQUEST, requestUserSaga),
|
||||
takeLatest(UPDATE_USER_REQUEST, requestUpdateUserSaga),
|
||||
takeLatest(SUBSCRIBE_NEWSLETTER_REQUEST, requestNewsletterSubscribitionSaga),
|
||||
takeLatest(FETCH_ADS_REQUEST, requestAdsSaga),
|
||||
takeLatest(FETCH_AD_REQUEST, requestAdSaga),
|
||||
takeLatest(FETCH_EMPHASIS_ADS_REQUEST, requestEmphasisAdsSaga),
|
||||
takeLatest(FETCH_JOBS_REQUEST, requestAdsSaga),
|
||||
takeLatest(FETCH_JOB_REQUEST, requestAdSaga),
|
||||
takeLatest(FETCH_EMPHASIS_JOBS_REQUEST, requestEmphasisJobsSaga),
|
||||
takeLatest(FETCH_EMPHASIS_COMPANIES_REQUEST, requestEmphasisCompaniesSaga),
|
||||
takeLatest(FETCH_COMPANIES_REQUEST, requestCompaniesSaga),
|
||||
takeLatest(FETCH_COMPANY_REQUEST, requestCompanySaga),
|
||||
@@ -69,7 +69,7 @@ function* rootSaga() {
|
||||
takeLatest(UPLOAD_MEDIA_REQUEST, uploadMediaSaga),
|
||||
takeLatest(UPLOAD_MEDIA_PRES_REQUEST, uploadMediaPresSaga),
|
||||
takeLatest(UPLOAD_MEDIA_CV_REQUEST, uploadMediaCvSaga),
|
||||
takeLatest(FETCH_ADS_ANSWER_REQUEST, fetchAdsAnsweredRequestSaga),
|
||||
takeLatest(FETCH_JOBS_ANSWER_REQUEST, fetchJobsAnsweredRequestSaga),
|
||||
takeLatest(FETCH_ANSWER_REQUEST, fetchAnswerRequestSaga),
|
||||
takeLatest(VERIFY_USER_REQUEST, verifyUserSaga),
|
||||
takeLatest(RESET_PASSWORD_REQUEST, requestResetPasswordSaga),
|
||||
|
||||
@@ -8,8 +8,8 @@ import _ from "lodash";
|
||||
import {
|
||||
postAdAnswerRequestSuccess,
|
||||
postAdAnswerRequestFailure,
|
||||
fetchAdsAnsweredSuccess,
|
||||
fetchAdsAnsweredFailure,
|
||||
fetchJobsAnsweredSuccess,
|
||||
fetchJobsAnsweredFailure,
|
||||
fetchAnswerSuccess,
|
||||
fetchAnswerFailure,
|
||||
postMessageAnswerSuccess,
|
||||
@@ -38,7 +38,7 @@ export function* postAdAnswerRequestSaga(action) {
|
||||
|
||||
if (!!res.data) {
|
||||
yield put(postAdAnswerRequestSuccess(res));
|
||||
Router.push("/Candidatures");
|
||||
Router.push("/CandidatureValidation");
|
||||
}
|
||||
else
|
||||
yield put(postAdAnswerRequestFailure(res));
|
||||
@@ -114,14 +114,14 @@ export function* uploadMediaCvSaga(action) {
|
||||
}
|
||||
}
|
||||
|
||||
export function* fetchAdsAnsweredRequestSaga(action) {
|
||||
export function* fetchJobsAnsweredRequestSaga(action) {
|
||||
try {
|
||||
const res = yield call(api.answers.fetchAdsAnswered, action.payload);
|
||||
const res = yield call(api.answers.fetchJobsAnswered, action.payload);
|
||||
|
||||
if (!!res.data)
|
||||
yield put(fetchAdsAnsweredSuccess(res));
|
||||
yield put(fetchJobsAnsweredSuccess(res));
|
||||
else
|
||||
yield put(fetchAdsAnsweredFailure(res));
|
||||
yield put(fetchJobsAnsweredFailure(res));
|
||||
|
||||
} catch (err) {
|
||||
if (_.includes(err, "401") || err.response.status === 401) {
|
||||
@@ -129,7 +129,7 @@ export function* fetchAdsAnsweredRequestSaga(action) {
|
||||
Router.push("/Login");
|
||||
|
||||
}
|
||||
yield put(fetchAdsAnsweredFailure(err.response));
|
||||
yield put(fetchJobsAnsweredFailure(err.response));
|
||||
}
|
||||
}
|
||||
// {
|
||||
|
||||
+16
-16
@@ -1,8 +1,8 @@
|
||||
|
||||
import { call, put } from "redux-saga/effects";
|
||||
import { fetchAdsSuccess, fetchAdsFailure,
|
||||
fetchAdSuccess, fetchAdFailure,
|
||||
fetchEmphasisAdsSuccess,fetchEmphasisAdsFailure
|
||||
import { fetchJobsSuccess, fetchJobsFailure,
|
||||
fetchJobSuccess, fetchJobFailure,
|
||||
fetchEmphasisJobsSuccess,fetchEmphasisJobsFailure
|
||||
|
||||
} from "../actions/ads";
|
||||
|
||||
@@ -18,44 +18,44 @@ export function* countAdViewRequestSaga(action) {
|
||||
export function* requestAdsSaga(action) {
|
||||
try {
|
||||
|
||||
const res = yield call(api.ads.fetchAds, action.payload);
|
||||
const res = yield call(api.ads.fetchJobs, action.payload);
|
||||
|
||||
if (!!res.data)
|
||||
yield put(fetchAdsSuccess(res));
|
||||
yield put(fetchJobsSuccess(res));
|
||||
else
|
||||
yield put(fetchAdsFailure(res));
|
||||
yield put(fetchJobsFailure(res));
|
||||
|
||||
} catch (err) {
|
||||
yield put(fetchAdsFailure(err.response));
|
||||
yield put(fetchJobsFailure(err.response));
|
||||
}
|
||||
}
|
||||
|
||||
export function* requestAdSaga(action) {
|
||||
try {
|
||||
|
||||
const res = yield call(api.ads.fetchAd, action.payload);
|
||||
const res = yield call(api.ads.fetchJob, action.payload);
|
||||
|
||||
if (!!res)
|
||||
yield put(fetchAdSuccess(res));
|
||||
yield put(fetchJobSuccess(res));
|
||||
else
|
||||
yield put(fetchAdFailure(res));
|
||||
yield put(fetchJobFailure(res));
|
||||
|
||||
} catch (err) {
|
||||
yield put(fetchAdFailure(err.response));
|
||||
yield put(fetchJobFailure(err.response));
|
||||
}
|
||||
}
|
||||
|
||||
export function* requestEmphasisAdsSaga(action) {
|
||||
export function* requestEmphasisJobsSaga(action) {
|
||||
try {
|
||||
|
||||
const res = yield call(api.ads.fetchAds, action.payload);
|
||||
const res = yield call(api.ads.fetchJobs, action.payload);
|
||||
|
||||
if (!!res.data)
|
||||
yield put(fetchEmphasisAdsSuccess(res));
|
||||
yield put(fetchEmphasisJobsSuccess(res));
|
||||
else
|
||||
yield put(fetchEmphasisAdsFailure(res));
|
||||
yield put(fetchEmphasisJobsFailure(res));
|
||||
|
||||
} catch (err) {
|
||||
yield put(fetchEmphasisAdsFailure(err.response));
|
||||
yield put(fetchEmphasisJobsFailure(err.response));
|
||||
}
|
||||
}
|
||||
@@ -16,8 +16,8 @@ exports.sendConfirmationEmail = function (nom, prenom, tokenUrl, mail) {
|
||||
const tranport = setup();
|
||||
const email = {
|
||||
from: process.env.EMAIL_FROM,
|
||||
to: process.env.NODE_ENV === 'production'? mail : 'thomas.berrod@e-declic.com',
|
||||
subject: `Bienvenue ${mail} 🔑`,
|
||||
to: process.env.NODE_ENV === 'production'? mail : 'l.laniau@talentstube.com',
|
||||
subject: `Bienvenue ${mail} `,
|
||||
text: `
|
||||
Bonjour ${prenom} ${nom},
|
||||
|
||||
|
||||
@@ -4,14 +4,14 @@ const formatDate = require("./formatDate");
|
||||
|
||||
// ROBOTS.txt
|
||||
// const robotsTxt = `User-agent: *
|
||||
// Sitemap: https://app.talentstube.com/sitemap_local.xml
|
||||
// Sitemap: https://www.talentstube.com/sitemap_local.xml
|
||||
// Disallow:`;
|
||||
|
||||
const robotsTxt = `# crawl setup
|
||||
User-agent: *
|
||||
Disallow: /Login*
|
||||
# Sitemap
|
||||
Sitemap: https://app.talentstube.com/sitemap_local.xml`
|
||||
Sitemap: https://www.talentstube.com/sitemap_local.xml`
|
||||
|
||||
fs.writeFileSync("out/robots.txt", robotsTxt);
|
||||
console.log("robots.txt saved!");
|
||||
@@ -23,7 +23,7 @@ const sitemapXml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
${Object.keys(pathsObj).map(
|
||||
path => `<url>
|
||||
<loc>https://app.talentstube.com${path}</loc>
|
||||
<loc>https://www.talentstube.com${path}</loc>
|
||||
<lastmod>${
|
||||
pathsObj[path].lastModified
|
||||
? formatDate(new Date(pathsObj[path].lastModified))
|
||||
|
||||
+12
-12
@@ -58,9 +58,9 @@ export const POST_AD_ANSWER_REQUEST = "POST_AD_ANSWER_REQUEST";
|
||||
export const POST_AD_ANSWER_SUCCESS = "POST_AD_ANSWER_SUCCESS";
|
||||
export const POST_AD_ANSWER_FAILURE = "POST_AD_ANSWER_FAILURE";
|
||||
|
||||
export const FETCH_ADS_ANSWER_REQUEST = "FETCH_ADS_ANSWER_REQUEST";
|
||||
export const FETCH_ADS_ANSWER_SUCCESS = "FETCH_ADS_ANSWER_SUCCESS";
|
||||
export const FETCH_ADS_ANSWER_FAILURE = "FETCH_ADS_ANSWER_FAILURE";
|
||||
export const FETCH_JOBS_ANSWER_REQUEST = "FETCH_JOBS_ANSWER_REQUEST";
|
||||
export const FETCH_JOBS_ANSWER_SUCCESS = "FETCH_JOBS_ANSWER_SUCCESS";
|
||||
export const FETCH_JOBS_ANSWER_FAILURE = "FETCH_JOBS_ANSWER_FAILURE";
|
||||
|
||||
export const FETCH_ANSWER_REQUEST = "FETCH_ANSWER_REQUEST";
|
||||
export const FETCH_ANSWER_SUCCESS = "FETCH_ANSWER_SUCCESS";
|
||||
@@ -76,17 +76,17 @@ export const FETCH_ANSWER_MESAGES_FAILURE = "FETCH_ANSWER_MESAGES_FAILURE";
|
||||
export const FETCH_ANSWER_MESAGES_SUCCESS = "FETCH_ANSWER_MESAGES_SUCCESS";
|
||||
|
||||
//ADS
|
||||
export const FETCH_ADS_REQUEST = "FETCH_ADS_REQUEST";
|
||||
export const FETCH_ADS_SUCCESS = "FETCH_ADS_SUCCESS";
|
||||
export const FETCH_ADS_FAILURE = "FETCH_ADS_FAILURE";
|
||||
export const FETCH_JOBS_REQUEST = "FETCH_JOBS_REQUEST";
|
||||
export const FETCH_JOBS_SUCCESS = "FETCH_JOBS_SUCCESS";
|
||||
export const FETCH_JOBS_FAILURE = "FETCH_JOBS_FAILURE";
|
||||
|
||||
export const FETCH_AD_REQUEST = "FETCH_AD_REQUEST";
|
||||
export const FETCH_AD_SUCCESS = "FETCH_AD_SUCCESS";
|
||||
export const FETCH_AD_FAILURE = "FETCH_AD_FAILURE";
|
||||
export const FETCH_JOB_REQUEST = "FETCH_JOB_REQUEST";
|
||||
export const FETCH_JOB_SUCCESS = "FETCH_JOB_SUCCESS";
|
||||
export const FETCH_JOB_FAILURE = "FETCH_JOB_FAILURE";
|
||||
|
||||
export const FETCH_EMPHASIS_ADS_REQUEST = "FETCH_EMPHASIS_ADS_REQUEST";
|
||||
export const FETCH_EMPHASIS_ADS_SUCCESS = "FETCH_EMPHASIS_ADS_SUCCESS";
|
||||
export const FETCH_EMPHASIS_ADS_FAILURE = "FETCH_EMPHASIS_ADS_FAILURE";
|
||||
export const FETCH_EMPHASIS_JOBS_REQUEST = "FETCH_EMPHASIS_JOBS_REQUEST";
|
||||
export const FETCH_EMPHASIS_JOBS_SUCCESS = "FETCH_EMPHASIS_JOBS_SUCCESS";
|
||||
export const FETCH_EMPHASIS_JOBS_FAILURE = "FETCH_EMPHASIS_JOBS_FAILURE";
|
||||
|
||||
export const CLEAR_AD = "CLEAR_AD";
|
||||
export const COUNT_AD_VIEW = "COUNT_AD_VIEW";
|
||||
|
||||
@@ -16,7 +16,7 @@ function setup() {
|
||||
const tranport = setup();
|
||||
const email = {
|
||||
from: process.env.EMAIL_FROM,
|
||||
to: "thomas.berrod@e-declic.com",
|
||||
to: "l.laniau@talentstube.com",
|
||||
subject: "PWA feedback 💌⚡️",
|
||||
text: `
|
||||
Hello Team,
|
||||
|
||||
Reference in New Issue
Block a user