• Как установить Puppeteer?

    @fayster
    В статье же есть пункт предварительная подготовка и там сказано, что нужно прописать команду
    npm install --save puppeteer
    Используй npm или yarn и будет тебе счастье. Поищи статьи по теме "npm для новичков" и тд., если не знаком с пакетными менеджерами
    Ответ написан
    Комментировать
  • Как в зависимости от результата асинхронного AJAX запроса вернуть true или false?

    @fayster
    export function checkEitherLoggedInOrNot(){ 
        let options = {
            method:'GET',
            credentials:'include',
            mode: 'cors'
        };
        return ajaxRequest('https://repo.asda.ru/app_dev/Auth',options)
            .then(data => {
                //Тут возвращай что нужно
                return data;
            })
            .catch(error => console.log(error));
    }
    
    checkEitherLoggedInOrNot().then(result => { 
        // где result тот результат, который ты вернул
     })
    Ответ написан
    Комментировать
  • Как очистить форму после выполнения?

    @fayster
    Сохраняйте изменение элементов формы в состоянии дочернего компонента, а потом просто отправляйте состояние и после очищайте его:
    function getDefaultState() {
    	return {
    		title: '',
    		year: '',
    		format: '',
    		actors: ''
    	};
    }
    
    export default React.createClass({
    	handleFilmAdd() {
        this.props.onFilmAdd({
    			id: 'some_id',
    			...this.state
    		});
    
    		this.setState(getDefaultState());
      },
    
    	handleChange(field, value) {
    		this.setState({
    			[field]: value
    		});
    	}
    
      render() {
        return (
        	<div>
           <input
            value={this.state.title}
    				onChange={this.handleChange.bind(this, 'title')}
            placeholder='Title'
            ref='addTitle'
          />
          	<input
            value={this.state.year}
    				onChange={this.handleChange.bind(this, 'year')}
            placeholder='Release Year'
            ref='addYear'
          />
            <input
            value={this.state.format}
    				onChange={this.handleChange.bind(this, 'format')}
            placeholder='Format'
            ref='addFormat'
          />
          <textarea
    	      value={this.state.actors}
    				onChange={this.handleChange.bind(this, 'actors')}
    	      placeholder='Actors'
    	      ref='addActors'>
          </textarea>
          <button onClick={this.handleFilmAdd}>Add</button>
          </div>
        );
      }
    });
    Ответ написан
    5 комментариев
  • Как досрочно, по условию завершить task, не прибив при этом watch?

    @fayster
    Как вариант можно сделать так:
    const through2 = require('through2').obj;
    
    gulp.task('jade', function (callback) {
      return gulp.src(config.src.jade)
      .pipe(plumber())
      .pipe(jade({
        pretty: true // Комментарии и отформатированный код.
      }))
      .pipe(gulp.dest(config.dev.html))
      .pipe(gulpif(!isDevelopment, htmlmin({
        collapseWhitespace: true,
        removeComments: true
      })
      .pipe(through2((file, enc, cb) => {
        if (isDevelopment) { // задаем условие
    	   callback(); // выходим из таска
        } else {
    	   cb(null, file); // передаем файлы дальше в поток
        }
      }))
      .pipe(gulp.dest(config.prod.html)) 
    })
    Ответ написан
  • Как сначала отправлять событие из view в store там с ним работать и затем тригерить?

    @fayster
    Когда число приходит в стор, то записываем сумму в переменную и делаем emit, в то время другая view получит уже новое значение, например:
    class Store extends EventEmitter {
        constructor() {
            super();
    
            this._dispatchToken = dispatcher.register(this._registerToActions.bind(this));
          
            this._id = 1;
        }
    
        _registerToActions(action) {
            switch(action.actionType) {
                case GENERATE_NEW_ID:
                    this._id += action.id;
                    this.emit(GENERATE_NEW_ID);
                    break;
                default:
                    break;
            }
            return true;
        }
    
        get id() {
            return this._id;
        }
    }
    
    class Listener extends React.Component {
        constructor() {
            super();
    
            this.go = this.go.bind(this);
    
            Store.on(GENERATE_NEW_ID, this.go);
    
            this.state = {
                id: Store.id
            };
        }
    
        go() {
            this.setState({
                id: Store.id
            })
        }
    }
    Ответ написан
    Комментировать
  • Как с помощью Gulp запустить несколько одинаковых тасков с разными параметрами?

    @fayster
    Можно попробовать использовать промисы. Суть: есть таск build, который работает по сути также как и раньше у вас работал, но при этом еще добавился таск build:themes, который принимает массив тем (тут либо задать вручную либо парсить папку с темами и получить список путей) и после сборки всех тем, можно уже вывести отладочную информацию.
    function build(theme) {
        return new Promise(function(resolve) {
            gulp.src([theme])
            ...
            resolve();
        });
    }
    
    var themeList = []; // Список стилей
    gulp.task('build:themes', function() {
        return Promise.all(themeList.map(function(theme) {
            return build(theme);
        })).then(function() {
            // Отработает после того, как завершится сборка всех стилей
        });
    });
    
    gulp.task('build', function() {
        var theme =  'src/styles/' + (util.env.theme ? util.env.theme : 'main') + '.scss';
        build(theme);
    });
    Ответ написан
    Комментировать