• Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович,
    После регистрации теперь пользователь добавляется в БД, но теперь не ясно, как сделать так чтобы как бы связать пользователей в firebase с моей коллекцией в БД firebase. У меня сейчас получается что в БД попадают только новые пользователи, а старые как были в тени так и остались. Где и как это можно реализовать?
    5a93fa929954f271648376.png
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Максим, Вот уже что то ближе к решению. Надеюсь там можно своих поля добавлять.
    И остается вопрос в том как конкретно это все реализовать? Сейчас регистрация, авторизация находятся в утке "auth". Как то неправильно будет там же писать и работу с пользователями, но и из другого места не знаю как получить доступ к другому модулю состояния, чтобы работать с пользователем, так как он находится в "auth".
    Что то вообще я уже запутался...
    Вот хорошо было бы, если бы пользователи изначально в БД сохранялись, никаких проблем не было бы.
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович,
    Вот вся "утка" связанная с пользователем.

    import { appName } from "../config";
    import firebase from "firebase";
    import { Record } from "immutable";
    import { all, take, apply, takeEvery, put, call } from "redux-saga/effects";
    import { replace } from "react-router-redux";
    import { eventChannel } from "redux-saga";
    
    const ReducerRecord = Record({
      user: null,
      error: null,
      loading: false
    });
    
    
    export const moduleName = "auth";
    
    export const SIGN_UP_REQUEST = `${appName}/${moduleName}/SIGN_UP_REQUEST`;
    export const SIGN_UP_SUCCESS = `${appName}/${moduleName}/SIGN_UP_SUCCESS`;
    export const SIGN_UP_ERROR = `${appName}/${moduleName}/SIGN_UP_ERROR`;
    
    export const SIGN_IN_REQUEST = `${appName}/${moduleName}/SIGN_IN_REQUEST`;
    export const SIGN_IN_SUCCESS = `${appName}/${moduleName}/SIGN_IN_SUCCESS`;
    export const SIGN_IN_ERROR = `${appName}/${moduleName}/SIGN_IN_ERROR`;
    
    export const SIGN_OUT_REQUEST = `${appName}/${moduleName}/SIGN_OUT_REQUEST`;
    export const SIGN_OUT_SUCCESS = `${appName}/${moduleName}/SIGN_OUT_SUCCESS`;
    
    export default function authReducer(state = ReducerRecord(), action) {
      const { type } = action;
    
      switch (type) {
        case SIGN_UP_REQUEST: {
          return state.set("loading", true);
        }
    
        case SIGN_IN_SUCCESS: {
          return state
            .set("loading", false)
            .set("user", action.payload.user)
            .set("error", null);
        }
    
        case SIGN_OUT_SUCCESS: {
          return new ReducerRecord();
        }
    
        default: {
          return state;
        }
      }
    }
    
    export function signIn(email, password) {
      return {
        type: SIGN_IN_REQUEST,
        payload: {
          email,
          password
        }
      };
    }
    
    export function signUp(email, password) {
      return {
        type: SIGN_UP_REQUEST,
        payload: {
          email,
          password
        }
      };
    }
    
    export function signOut() {
      return {
        type: SIGN_OUT_REQUEST
      }
    }
    
    export const signInSaga = function * () {
      const auth = firebase.auth();
    
      const action = yield take(SIGN_IN_REQUEST);
      const user = yield call([auth, auth.signInWithEmailAndPassword], action.payload.email, action.payload.password);
    
      yield put({
        type: SIGN_IN_SUCCESS,
        payload: user
      });
    
      yield put(replace("/"));
    };
    
    export const signOutSaga = function * () {
      const auth = firebase.auth();
    
      yield apply(auth, auth.signOut);
    }
    
    export const signUpSaga = function * () {
      const auth = firebase.auth();
    
      while (true) {
        const action = yield take(SIGN_UP_REQUEST);
    
        try {
          const user = yield call([auth, auth.createUserWithEmailAndPassword], action.payload.email, action.payload.password);
    
          yield put({
            type: SIGN_UP_SUCCESS,
            payload: {
              user
            }
          });
    
          yield put(replace("/"));
        } catch (error) {
          yield put({
            type: SIGN_UP_ERROR,
            error
          });
        }
      }
    };
    
    
    const createAuthChannel = () => eventChannel(emit => firebase.auth().onAuthStateChanged(user => emit({ user })))
    
    export const watchStatusChangeSaga = function * () {
        const chan = yield call(createAuthChannel);
    
        while (true) {
            const { user } = yield take(chan);
    
            if (user) {
                yield put({
                    type: SIGN_IN_SUCCESS,
                    payload: { user }
                });
            } else {
                yield put({
                    type: SIGN_OUT_SUCCESS,
                    payload: { user }
                });
    
                yield put(replace('/'));
            }
        }
    }
    
    
    export const saga = function * () {
      yield all([
        takeEvery(SIGN_IN_REQUEST, signInSaga),
        takeEvery(SIGN_OUT_REQUEST, signOutSaga),
        signUpSaga(),
        watchStatusChangeSaga()
      ]);
    };


    В итоге получается состояние выглядит как на приложенном в вопросе скриншоте.
    Но хотелось бы еще иметь там отдельный модуль users, где будет находиться коллекция всех пользователей. Так же чтобы эта коллекция была и в БД firebase. Сейчас там только коллекция catalog, которая хранит товары
    5a93f5a7e02f6855799246.png
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович, Так мне нужен список всех пользователей. Я не понимаю как можно изменить пользоватлю данные, если он не находится в БД. Они хранятся где то в другом месте, а не в основной БД.
    5a93f46c34447500196658.png
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Максим Найти нужный метод если он есть, я думаю смогу. Меня интересует как создать коллекцию пользователей из тех которые зарегистрировались. По умолчанию пользователи хранятся где то в firebase, но явно не на прямую в БД как я понял. По крайней мере они отображаются в отдельном списке, в другой вкладке, нежели БД.
    Вот я получил пользователей. Затолкал их в стор. Получилось что то типа этого:
    users: {
      "email1@mail.com": { ... },
      "email2@mail.com": { ... },
      "email3@mail.com": { ... },
      "email4@mail.com": { ... },
    }


    В итоге пользователи есть в состоянии, можно как манипулировать ими, добавлять им какие то данные, новые поля, но как их потом обратно в БД записать?? нужно же как то хранить их там в отдельной коллекции в БД. Вот в этом и проблема
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович Ну это авторизация, это у меня сделано. Также сделана регистрация. Пользователи добавляются в firebase. Там у них получается из полезного только email. Мне же нужно как то хранить этих пользователей в БД firebase, например в коллекции users. Чтобы можно было добавлять им новые поля, такие как имя, телефон и т.д, после того как пользователь заполнит свой профиль на сайте например.
    Проблемы бы не было, если бы пользователи после регистрации сохранялись сразу в БД, а не куда то там еще .
  • Как сделать проверку на совпадение содержимого ячеек судоку?

    @evg_96 Автор вопроса
    0xD34F, А не подскажите как реализовать добавление и удаление класса ячейкам которые совпадают в блоке, строке или столбце? Хочу чтобы при вводе неподходящего числа, было выделение например красным, ячеек которые совпали с этим числом. Непонятно в каком месте добавлять классы. Или может быть вообще нужно это сделать в рендере...

    Codepen
  • Как сделать проверку на совпадение содержимого ячеек судоку?

    @evg_96 Автор вопроса
    0xD34F Спасибо, но подскажите что значит данная запись row / 3 | 0, что я туплю сегодня сильно, не могу ничего понять
  • Как сделать фильтрацию, сортировку и поиск в БД (c++ builder)?

    @evg_96 Автор вопроса
    devalone, во всем виновата наша система образования. В учебных заведениях и не такое проходят...
  • Как обнаружить в чем ошибка загрузки данных с сервера (React/Redux/thunk)?

    @evg_96 Автор вопроса
    Антон Спирин,
    import React from "react";
    import { connect } from "react-redux";
    
    import { loadArticleComments } from "../AC";
    
    import "./CommentList.css";
    
    import Comment from "./Comment";
    import CommentForm from "./CommentForm";
    
    import toggleOpen from "../decorators/toggleOpen";
    
    class CommentList extends React.Component {
      componentWillReceiveProps({ isOpen, article, loadArticleComments }) {
          if (!this.props.isOpen && isOpen && !article.commentsLoading && !article.commentsLoaded) {
              loadArticleComments(article.id)
          }
      }
    
      getCommentsBody = () => {
        const { article: { comments = [], id } } = this.props;
    
        if (!comments) {
          return (
            <div>
              <div>empty</div>
              <CommentForm articleId = { id } />
            </div>
          );
        }
    
        return (
          <div className="comment-list">
            <ul className="list-group">
              {
                comments.map(id => (
                  <li className="list-group-item" key = { id }>
                    <Comment id = { id } /> // Рендер комментария
                  </li>
                ))
              }
            </ul>
            <CommentForm articleId = { id } />
          </div>
        );
      }
    
      render() {
        return (
          <div>
            <button className="btn btn-dark" onClick = { this.props.handleToggle }>{ this.props.isOpen ? "close comments" : "open comments" }</button>
            { this.props.isOpen && this.getCommentsBody() }
          </div>
        );
      }
    }
    
    export default connect(null, {
      loadArticleComments
    })(toggleOpen(CommentList));
  • Как обнаружить в чем ошибка загрузки данных с сервера (React/Redux/thunk)?

    @evg_96 Автор вопроса
    Надеюсь что то прояснится, а то уже не знаю что и делать. Не могу дальше двигаться по курсу без этих комментариев...

    Компонент Comment:
    import React from "react";
    import { connect } from "react-redux";
    
    import { commentSelectorFactory } from "../selectors";
    
    const Comment = ({ comment }) => (
      <div>
        <h5>{ comment.user }</h5>
        { comment.text }
      </div>
    );
    
    export default connect(
      () => {
        const commentSelector = commentSelectorFactory();
    
        return (state, ownProps) => {
          return {
            comment: commentSelector(state, ownProps) // Запрос комментария из селектора
          };
        };
      }
    )(Comment);


    Код селектора:
    export const commentSelectorFactory = () => createSelector(commentsGetter, idGetter, (comments, id) => {
      return comments.getIn(["entities", id]); // Получить комментарий по id
    });


    Код reducer:
    import { arrToMap } from "../helpers";
    import { OrderedMap, Record } from "immutable";
    
    const CommentRecord = Record({
      id: null,
      text: "",
      user: ""
    });
    
    const ReducerState = Record({
      entities: new OrderedMap({})
    });
    
    const defaultState = new ReducerState();
    
    export default (commentsState = defaultState, action) => {
      switch (action.type) {
        case "ADD_COMMENT": {
          return commentsState.setIn(["entities", action.randomId], new CommentRecord({ ...action.payload.comment, id: action.ramdomId }));
        }
    
        case "LOAD_ARTICLE_COMMENTS_SUCCESS": { // В middleware добавляется _SUCCESS
          return commentsState.mergeIn(['entities'], arrToMap(action.response, CommentRecord));
        }
    
        default: {
          return commentsState;
        }
      }
    };


    Код arrToMap():
    import { OrderedMap } from "immutable";
    
    export function arrToMap(arr, RecordModel) {
        return arr.reduce((acc, el) => acc.set(el.id, RecordModel ? new RecordModel(el) : el), new OrderedMap({}))
    }


    Код Action Creator:
    export function loadArticleComments(articleId) {
        console.log("Action creator loadArticleComments: ");
    
        return {
            type: "LOAD_ARTICLE_COMMENTS",
            payload: { articleId },
            callAPI: `/api/comment?article=${articleId}`
        }
    }


    Код middleware для загрузки данных с сервера:
    export default store => next => action => {
      const { callAPI, type, ...rest } = action;
    
      if (!callAPI) {
        return next(action);
      }
    
      next({
        ...rest,
        type: type + "_START"
      });
    
      fetch(callAPI)
        .then(res => res.json())
        .then(response => next({
          ...rest,
          type: type + "_SUCCESS",
          response
        })
      );
    };
  • Как обнаружить в чем ошибка загрузки данных с сервера (React/Redux/thunk)?

    @evg_96 Автор вопроса
    Антон Спирин, По сути комментарии для статьи загружаются, но почему то, если я не ошибаюсь, у меня получается что комментарий берется до того как произойдет загрузка комментариев в state.
    Вывод логов в консоль такой что сначала выводится action, потом получается комментарий из состояния и потом только почему то вызывается console.log из reducer.
    В чем может быть дело не подскажите? Не знаю даже в какую сторону копать.

    5a6208e0d54a6743232793.png5a620a31c7d06925477067.png
  • Как написать приложение перестановки набора карточек?

    @evg_96 Автор вопроса
    0xD34F Подскажите пожалуйста некоторые моменты в решении. Конкретно про условие цикла. Непонятно почему именно for (let i = 1; i <= 2; i += 1)
    Скорее всего логика заложения именно в условие данного цикла, но скажите пожалуйста, где именно обрабатывается то что можно перескочить через один элемент на пустое место?
  • Что почитать по архитектуре ЭВМ начинающему?

    @evg_96 Автор вопроса
    Илья лук, а может для того чтобы его собрать нужно понимание?
  • Что такое микрокод процессора?

    @evg_96 Автор вопроса
    Stalker_RED, да, но я бы не задавал вопрос если понял информацию с того источника. Там написано что микрокод это программа реализующая набор инструкций. Что инструкции разбираваются на микроинструкции. И далее написано что микрокод это и есть эти микроинструкции.
    В такой интерпритации посянения что такое микрокод до меня так и не дошло точное определение и понимание.
  • Что такое микрокод процессора?

    @evg_96 Автор вопроса
    pfg21 Уточните пожалуйста. Эмулируетя risc процессор в процессоре на архитектуре cisc? Или что именно эмулируется?
    И как понять аппаратному risc? Может есть как бы сопроцессор на этой архитектуре? или я все не правильно понял?
    И вот еще вопрос, что именно отвечает за разбивку инструкции? какое именно устррйство или как это происходит?
  • Есть ли нормальный терминал для Sublime Text 3?

    @evg_96 Автор вопроса
    Игорь Воротнёв, так то vs code тоже на js написан