Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 459ff88e9d | |||
| dcdbfed2a3 | |||
| d235b08fe3 | |||
| e5b9f2b75d | |||
| 563107e649 | |||
| 5545dbfad0 | |||
| 353128fa8e | |||
| 2e9fa7e9d0 | |||
| c0e5ec6e90 |
@@ -94,7 +94,7 @@ const useStyles = makeStyles(theme => ({
|
||||
|
||||
export default function SimpleCollapse(props) {
|
||||
const classes = useStyles();
|
||||
const [expanded, setExpanded] = React.useState(false);
|
||||
const [expanded, setExpanded] = React.useState(true);
|
||||
|
||||
function handleExpandClick() {
|
||||
setExpanded(!expanded);
|
||||
|
||||
@@ -243,6 +243,13 @@ function Footer(props) {
|
||||
</Typography>
|
||||
</a>
|
||||
</Link>
|
||||
<Link href="" >
|
||||
<a href="https://blog.talentstube.com/contact" target="_blank">
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
Contact
|
||||
</Typography>
|
||||
</a>
|
||||
</Link>
|
||||
</section>
|
||||
<section className={classes.container}>
|
||||
<Typography color="secondary" component="p" className={classes.titleContainer}>
|
||||
@@ -255,7 +262,7 @@ function Footer(props) {
|
||||
56 000 Vannes
|
||||
</Typography>
|
||||
<Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
02.30.05.06.31
|
||||
<a href="tel:+33230050631" >02.30.05.06.31</a>
|
||||
</Typography>
|
||||
{/* <Typography gutterBottom color="secondary" component="p" className={classes.textContainer}>
|
||||
contact@talentstube.com
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, { Fragment } from 'react'
|
||||
import React, { Fragment,lazy, Suspense } from 'react'
|
||||
import Router from 'next/router'
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import getConfig from 'next/config'
|
||||
@@ -16,11 +16,12 @@ import Ar from "lodash/array";
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import Link from 'next/link'
|
||||
import withWidth, { isWidthUp } from '@material-ui/core/withWidth'
|
||||
import VideoVimeo from '../atoms/VideoVimeo'
|
||||
const VideoVimeo = lazy(() => import('../atoms/VideoVimeo'));
|
||||
//import VideoVimeo from '../atoms/VideoVimeo'
|
||||
import OgHead from '../atoms/OgHead'
|
||||
import JobPosting from '../atoms/JobPosting'
|
||||
import Moment from 'react-moment';
|
||||
|
||||
const renderLoader = () => <p>Chargement</p>;
|
||||
const styles = theme => ({
|
||||
primary: {
|
||||
color: theme.palette.primary.main,
|
||||
@@ -428,9 +429,9 @@ function OffreDetail(props) {
|
||||
|
||||
</section>
|
||||
</Hidden>
|
||||
|
||||
<VideoVimeo {...isCandidature == 'true' ? 'classes={{ video: classes.videoOffre }}' : ''} videoId={Ar.last(_.split(offre.video.cdn_url, '/'))} autoplay='1' />
|
||||
|
||||
<Suspense fallback={renderLoader()}>
|
||||
<VideoVimeo {...isCandidature == 'true' ? 'classes={{ video: classes.videoOffre }}' : ''} videoId={Ar.last(_.split(offre.video.cdn_url, '/'))} autoplay='1' />
|
||||
</Suspense>
|
||||
<div className={classes.container}>
|
||||
<Hidden mdUp>
|
||||
<section className={classes.headerContainer}>
|
||||
@@ -457,8 +458,8 @@ function OffreDetail(props) {
|
||||
<section className={classes.IconTextContainer}>
|
||||
{offre.is_promoted && (<Chip label="Pourvue" className={classes.chip} />)}
|
||||
{offre.extra && (<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="assignment" text={offre.extra.contract_type} />)}
|
||||
{offre.location && offre.location.gmap_address && (<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={offre.location.gmap_address.formatted_address} />)}
|
||||
{tempsTypeFr && (<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="watch_later" text={tempsTypeFr} />)}
|
||||
{offre.location && offre.location.gmap_address && (<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="location_on" text={offre.location.gmap_address.formatted_address} />)}
|
||||
{offre.beneficiaire && (<IconText classes={{ root: classes.iconText, icon: classes.iconTextIcon, text: classes.iconTextText }} variant="business" text={offre.beneficiaire} />)}
|
||||
</section>
|
||||
</Hidden>
|
||||
@@ -535,7 +536,9 @@ function OffreDetail(props) {
|
||||
Découvrir le <span className={classes.primary}>territoire</span>
|
||||
</Typography>
|
||||
<section className={classes.discoverTerritoryContentContainer}>
|
||||
<VideoVimeo classesOverride={classes.videoTerritory} videoId={territoryVideoId} autoplay='0' />
|
||||
<Suspense fallback={renderLoader()}>
|
||||
<VideoVimeo classesOverride={classes.videoTerritory} videoId={territoryVideoId} autoplay='0' />
|
||||
</Suspense>
|
||||
<Typography className={classes.territoryTitle}>
|
||||
{(!!!offre.territories) ? offre.territories[0].territory.brand_name : ''}
|
||||
</Typography>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import videojs from 'video.js'
|
||||
import React, { lazy } from 'react';
|
||||
const videojs = lazy(() => import('video.js'));
|
||||
//import videojs from 'video.js'
|
||||
|
||||
export default class VideoPlayer extends React.Component {
|
||||
componentDidMount() {
|
||||
|
||||
@@ -85,10 +85,16 @@ class Grid extends Component {
|
||||
async componentDidMount() {
|
||||
|
||||
this.setState({pageSize:this.props.limit})
|
||||
|
||||
let data = sessionStorage.getItem(this.props.type+'_currentPage');
|
||||
let current;
|
||||
if(data){
|
||||
current=data;
|
||||
}else{
|
||||
current=this.state.currentPage;
|
||||
}
|
||||
this.props.dataFetcher(
|
||||
{
|
||||
offset: this.state.currentPage,
|
||||
offset: ((current-1)*this.props.limit)+1,
|
||||
limit: this.props.limit
|
||||
}
|
||||
);
|
||||
@@ -106,10 +112,17 @@ class Grid extends Component {
|
||||
const { currentPage, pageSize, filterText, promoted } = this.state;
|
||||
|
||||
if (nextProps.promoted != this.state.promoted) {
|
||||
let data = sessionStorage.getItem(this.props.type+'_currentPage');
|
||||
let current;
|
||||
if(data){
|
||||
current=data;
|
||||
}else{
|
||||
current=this.state.currentPage;
|
||||
}
|
||||
this.setState({ promoted: nextProps.promoted });
|
||||
this.props.dataFetcher(
|
||||
{
|
||||
offset: this.state.currentPage,
|
||||
offset: ((current-1)*(this.state.pageSize+1))+1,
|
||||
limit: this.state.pageSize,
|
||||
keyword: filterText,
|
||||
isPromoted: nextProps.promoted
|
||||
@@ -123,19 +136,25 @@ class Grid extends Component {
|
||||
_onNext = () => {
|
||||
const { currentPage, pageSize, filterText, promoted } = this.state;
|
||||
this.props.dataFetcher({ offset: currentPage * pageSize, limit: pageSize, keyword: filterText, isPromoted: promoted })
|
||||
sessionStorage.setItem(this.props.type+'_currentPage', currentPage+1);
|
||||
|
||||
};
|
||||
|
||||
_onPrevious = () => {
|
||||
const { currentPage, pageSize, filterText, promoted } = this.state;
|
||||
this.props.dataFetcher({ offset: (currentPage - 2) * pageSize + 1, limit: pageSize, keyword: filterText, isPromoted: promoted });
|
||||
sessionStorage.setItem(this.props.type+'_currentPage', currentPage-1);
|
||||
|
||||
};
|
||||
|
||||
_onGetPage = pageNumber => {
|
||||
const { pageSize, filterText, promoted } = this.state;
|
||||
this.props.dataFetcher({ offset: (pageNumber - 1) * pageSize + 1, limit: pageSize, keyword: filterText, isPromoted: promoted });
|
||||
|
||||
};
|
||||
|
||||
_onFilter = filterText => {
|
||||
sessionStorage.setItem(this.props.type+'_currentPage', 1);
|
||||
this.setState({ currentPage: 1 });
|
||||
const { currentPage, pageSize, promoted } = this.state;
|
||||
this.setState({ filterText });
|
||||
@@ -148,7 +167,7 @@ class Grid extends Component {
|
||||
|
||||
searchSubmit = () => {
|
||||
const { currentPage, pageSize, promoted, filterText } = this.state;
|
||||
|
||||
sessionStorage.setItem(this.props.type+'_currentPage', 1);
|
||||
this.props.dataFetcher({ offset: 1, limit: pageSize, keyword: filterText, isPromoted: promoted });
|
||||
}
|
||||
|
||||
|
||||
+11
-8
@@ -40,14 +40,17 @@ module.exports = withPlugins(
|
||||
}],
|
||||
[{
|
||||
publicRuntimeConfig: {
|
||||
//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',
|
||||
// DEV
|
||||
// symphonyUrl: 'http://localhost/app_dev.php/',
|
||||
// blogUrl: 'https://blog.talentstube.com',
|
||||
// frontServerUrl: 'http://localhost:3000',
|
||||
// cvThequeUrl: 'https://recruteur.talentstube.com',
|
||||
// PROD
|
||||
// symphonyUrl: 'https://recruteur.talentstube.com/',
|
||||
// blogUrl: 'https://blog.talentstube.com',
|
||||
// frontServerUrl: 'https://www.talentstube.com/',
|
||||
// cvThequeUrl: 'https://recruteur.talentstube.com',
|
||||
// PRE PROD
|
||||
symphonyUrl: 'https://pp.talentstube.com/',
|
||||
blogUrl: 'https://blog.talentstube.com',
|
||||
frontServerUrl: 'https://pp.app.talentstube.com/',
|
||||
|
||||
@@ -84,10 +84,20 @@ class ConfirmAccount extends Component {
|
||||
e-mail validé
|
||||
</Typography>
|
||||
<Typography gutterBottom align="left" className={classes.text}>
|
||||
Votre email a bien été validé.
|
||||
Votre email a bien été validé.
|
||||
|
||||
</Typography>
|
||||
<Typography gutterBottom align="left" className={classes.text}>
|
||||
Vous pouvez maintenant vous connecter.
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button}
|
||||
classes={{ root: classes.rootButton }}
|
||||
onClick={() => Router.push('/Login')}
|
||||
>
|
||||
Connexion
|
||||
</Button>
|
||||
|
||||
</Typography>
|
||||
<section className={classes.bottomContainer}>
|
||||
<Button
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
import React, { Fragment } from 'react'
|
||||
import React, { Fragment,lazy, Suspense } from 'react'
|
||||
import Router from 'next/router'
|
||||
import { connect } from "react-redux"
|
||||
import PropTypes from 'prop-types'
|
||||
@@ -16,7 +16,8 @@ import { fetchCompanyRequest, clearCompany, countCompanyViewRequest } from '../a
|
||||
import IconText from '../components/atoms/IconText'
|
||||
import IconTextInline from '../components/atoms/IconTextInline'
|
||||
import SimpleCollapse from '../components/atoms/SimpleCollapse'
|
||||
import VideoVimeo from '../components/atoms/VideoVimeo'
|
||||
const VideoVimeo = lazy(() => import('../components/atoms/VideoVimeo'));
|
||||
//import VideoVimeo from '../components/atoms/VideoVimeo'
|
||||
import SocialShare from '../components/organisms/SocialShare'
|
||||
import Loader from '../components/templates/loader'
|
||||
import _ from "lodash"
|
||||
@@ -25,7 +26,7 @@ import withWidth from '@material-ui/core/withWidth'
|
||||
import Hidden from '@material-ui/core/Hidden';
|
||||
import NoResult from '../components/atoms/NoResult';
|
||||
import OgHead from '../components/atoms/OgHead';
|
||||
|
||||
const renderLoader = () => <p>Chargement</p>;
|
||||
const styles = theme => ({
|
||||
companyContainer: {
|
||||
[theme.breakpoints.up('md')]: {
|
||||
@@ -432,11 +433,7 @@ class Entreprise extends React.Component {
|
||||
</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"
|
||||
@@ -444,10 +441,15 @@ class Entreprise extends React.Component {
|
||||
>Voir les offres</Button>
|
||||
|
||||
</Link>
|
||||
<Button
|
||||
variant="contained"
|
||||
className={classes.button}
|
||||
onClick={() => Router.push(`/Reponse?companyId=${company.id}`)}
|
||||
>Candidature spontanée</Button>
|
||||
</div>
|
||||
</section>
|
||||
</Hidden>
|
||||
{company.presentation_video && <VideoVimeo videoId={Ar.last(_.split(company.presentation_video.cdn_url, '/'))} autoplay='1' />}
|
||||
{company.presentation_video && <Suspense fallback={renderLoader()}><VideoVimeo videoId={Ar.last(_.split(company.presentation_video.cdn_url, '/'))} autoplay='1' /></Suspense>}
|
||||
<div className={classes.container}>
|
||||
<Hidden mdUp>
|
||||
<section className={classes.headerContainer}>
|
||||
|
||||
@@ -112,6 +112,7 @@ class Entreprises extends React.Component {
|
||||
currentPage={this.props.currentPage}
|
||||
recordCount={this.props.recordCount}
|
||||
loading={this.props.loading}
|
||||
type="entreprises"
|
||||
limit={12}
|
||||
placeholder={"Rechercher une entreprise"}
|
||||
/>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
|
||||
import React from 'react';
|
||||
import React, { Fragment,lazy, Suspense } from 'react'
|
||||
import { connect } from "react-redux";
|
||||
import PropTypes from 'prop-types';
|
||||
import getConfig from 'next/config'
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import LayoutOffre from "../components/templates/LayoutOffre";
|
||||
import OffreDetail from "../components/organisms/OffreDetail";
|
||||
const OffreDetail = lazy(() => import('../components/organisms/OffreDetail'));
|
||||
//import OffreDetail from "../components/organisms/OffreDetail";
|
||||
import { fetchJobRequest, clearAd, countAdViewRequest } from '../actions/ads'
|
||||
import _ from "lodash/string";
|
||||
|
||||
const renderLoader = () => <p>Chargement</p>;
|
||||
const styles = theme => ({
|
||||
|
||||
});
|
||||
@@ -32,7 +33,7 @@ class Offre extends React.Component {
|
||||
|
||||
return (
|
||||
<LayoutOffre backLink="/Offres" offreId={offre.id} offre={offre} isProvided={offre.is_promoted}>
|
||||
<OffreDetail offre={offre}/>
|
||||
<Suspense fallback={renderLoader()}><OffreDetail offre={offre}/></Suspense>
|
||||
</LayoutOffre>
|
||||
);
|
||||
}
|
||||
|
||||
+15
-1
@@ -80,9 +80,21 @@ class Offres extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
}
|
||||
voirOffre(){
|
||||
this.props.togglePromotedFilterRequest()
|
||||
sessionStorage.setItem('offres_currentPage',1);
|
||||
}
|
||||
|
||||
static getInitialProps({ query }) {
|
||||
const { init } = query
|
||||
//this.props.promotedFilter =init
|
||||
return { init };
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
const { classes } = this.props;
|
||||
const countColor = this.props.promotedFilter ? classes.provided : classes.primary;
|
||||
const btnClass = this.props.promotedFilter ? classes.buttonDefault : classes.buttonProvided;
|
||||
@@ -113,12 +125,14 @@ class Offres extends React.Component {
|
||||
recordCount={this.props.recordCount}
|
||||
promoted={this.props.promotedFilter}
|
||||
loading={this.props.loading}
|
||||
type="offres"
|
||||
placeholder={"Rechercher un job"}
|
||||
/>
|
||||
<Button
|
||||
name="Rechercher un job"
|
||||
variant="outlined"
|
||||
onClick={() => this.props.togglePromotedFilterRequest()}
|
||||
onClick={() => this.voirOffre()
|
||||
}
|
||||
className={classes.button + ' ' + btnClass}>
|
||||
{this.props.promotedFilter? 'Voir les offres en cours' : 'Voir les offres pourvues'}
|
||||
</Button>
|
||||
|
||||
@@ -76,7 +76,7 @@ class VerifyEmail extends Component {
|
||||
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}>
|
||||
{/* <Typography gutterBottom align="center" className={classes.bottomText}>
|
||||
Cliquez sur suivant pour continuer votre candidature
|
||||
</Typography>
|
||||
<Button
|
||||
@@ -86,7 +86,7 @@ class VerifyEmail extends Component {
|
||||
onClick={() => Router.push('/Login')}
|
||||
>
|
||||
Suivant
|
||||
</Button>
|
||||
</Button> */}
|
||||
</section>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable jsx-a11y/anchor-is-valid */
|
||||
|
||||
import React, {Fragment} from 'react';
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { withStyles } from '@material-ui/core/styles';
|
||||
import Layout from "../components/templates/Layout"
|
||||
@@ -8,7 +8,9 @@ import { Typography } from '@material-ui/core';
|
||||
import Button from '@material-ui/core/Button';
|
||||
import Router from 'next/router'
|
||||
import { connect } from 'react-redux'
|
||||
//const fetchEmphasisJobsRequest = lazy(() => import('../actions/ads'));
|
||||
import { fetchEmphasisJobsRequest } from "../actions/ads";
|
||||
//const fetchEmphasisCompaniesRequest = lazy(() => import('../actions/companies'));
|
||||
import { fetchEmphasisCompaniesRequest } from "../actions/companies";
|
||||
import Loader from './../components/templates/loader'
|
||||
import { isEmpty } from "lodash"
|
||||
@@ -163,7 +165,7 @@ class Index extends React.Component {
|
||||
const imgUrl = DefaultUrl
|
||||
return (
|
||||
<Layout>
|
||||
<OgHead seo_title="Talents Tube - Plateforme de recrutement en vidéo"
|
||||
<OgHead seo_title="Espace candidat - Plateforme de recrutement en vidéo | Talents Tube"
|
||||
seo_description="Talents Tube est la première plateforme réservée aux offres d'emploi vidéo, vidéo marque employeur et aux CV vidéos. Découvrez une nouvelle méthode de recrutement."
|
||||
seo_url={socialShareUrl}
|
||||
image={imgUrl}
|
||||
|
||||
@@ -217,7 +217,7 @@ class Index extends React.Component {
|
||||
// Filter logic
|
||||
getSuggestionsMetier = async (valueMetier) => {
|
||||
const inputValue = valueMetier.trim().toLowerCase();
|
||||
let response = await fetch(publicRuntimeConfig.symphonyUrl+"/api/getAppelationsLibelle?q=" + inputValue );
|
||||
let response = await fetch(publicRuntimeConfig.symphonyUrl+"api/getAppelationsLibelle?q=" + inputValue );
|
||||
// let response = await fetch("http://www.omdbapi.com/?s=" + inputValue + "&apikey=a591bb53");
|
||||
let data = await response.json()
|
||||
return data;
|
||||
|
||||
Reference in New Issue
Block a user