• Есть ли темы или цветовые схемы в VS и возможноли ли их поставить?

    @evg_96 Автор вопроса
    Андрей К.
    Также видел какое то дополнение с парой других тем

    Вот я про это и говорил. Это не совсем то что хотелось бы. Даже пусть не тему меняющую весь интерфейс, но лучше даже было бы получить готовые цветовые схемы для редактора кода. Настраивать каждый цвет самому это такое себе дело.
  • Почему не выводится кириллица из Си в консоль windows?

    @evg_96 Автор вопроса
    res2001 Я читал подобные статьи, но в итоге все равно не могу понять как все таки вывести русские символы. В консоли code page стоит 437. Windows на английском.
  • Какая есть среда разработки на С?

    @evg_96 Автор вопроса
    GavriKos, потому что тега С нет. А пользователи интересующиеся плюсами, хоть что то знают и о С
  • Какая есть среда разработки на С?

    @evg_96 Автор вопроса
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻ ҉ как вариант, но не лучшее решение если нет навыка работы с VIM чтобы быстро стартануть в написание кода на C
  • Как сделать модальные окна для карточек товаров?

    @evg_96 Автор вопроса
    Максим Честно мало что понял.
    Получается нужно рендерить модальное окно в самом каталоге. Это вроде ясно.
    На счет флага, он должен находиться в редакс сторе или храниться локально в компоненте каталога как в примере который я указывал?
    Получается нужно при клике на кнопку подробнее вызывать что то подобное:?
    export function openModal(product) {
      return dispatch => {
        dispatch({
          type: OPEN_PRODUCT_MODAL,
          product
        });
      };
    }

    // ...
    case OPEN_PRODUCT_MODAL: {
      return state.setIn(["catalog", "isProductModalOpen"], true);
      // И тут же в стор ложить открытый продукт, который потом в connect будет запрашиваться из стора и передаваться в модальное окно?
    }
    // ...


    И тоже самое сделать для закрытия модального окна как я понял.
    Правильно? или что то не так я понял и нужно как то по другому сделать
  • Где можно скачать material design ui kit?

    @evg_96 Автор вопроса
    Pavel Shvedov Так в том то и дело что вариантов много, везде стили оформления разные, и наборы разные, а нужно конкретно набор в стиле библиотек компонентов, либо пак в стиле гугл для веба...
  • Как организовать оформление товара?

    @evg_96 Автор вопроса
    ThemeZV Спасибо за ответ.
    1. Товары из корзины лежат в сторе.
    2. Мне не понятно что должно быть в адресной строке после перехода к оформлению заказа. И как правильно это организовать.
    3. После отправки формы заказа, заказ где то должен храниться. Скорее всего нужно сделать в БД (использую firebase), коллекцию текущих заявок и коллекцию всех подтвержденных заказов.
    В первой будут храниться поступающие заявки для обработки, а во второй будут храниться все обработанные заказы.
    И можно ли сделать так чтобы если я вручную перехожу по ссылки оформления заказа, то чтобы ничего не рендерилось а редиректилось обратно в корзину, а если человек нажал все таки на кнопку оформить заказ, то его перекидывало на оформление? И все таки не понятно как генерировать эту ссылку на оформление заказа...
    На счет redux-saga и redux-thunk...Сейчас в приложении намешано и то и то. Но потом как буду все переписывать по уму, то останется скорее всего thunk. Хотя роли не играет что выбирать.
  • Как удалить пользователя из firebase по uid?

    @evg_96 Автор вопроса
    Евгений Калибров Сделал вроде как указано в документации, но вылетают ошибки:
    5a98da881e742085272776.png

    Подскажите что не так сделал или что еще нужно сделать?
    import * as admin from "firebase-admin";
    
    const serviceAccount = require("./serviceAccountKey.json");
    
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: `https://${appName}.firebaseio.com`
    });

    import * as admin from "firebase-admin";
    
    export function deleteUser(userUid) {
      return dispatch => {
        dispatch({
          type: DELETE_USER_REQUEST
        });
    
        admin.auth().deleteUser(userUid).then(() => {
          dispatch({
            type: DELETE_USER_SUCCESS,
            payload: {
              userUid
            }
          });
        });
      };
    }
  • Почему после добавления саги перестала работать авторизация и приходится каждый раз заходить занаво?

    @evg_96 Автор вопроса
    Антон Спирин, Скажите пожалуйста, о каком селекторе идет речь?
    И от fork ничего не изменилось...

    PS. Походу ошибка здесь:
    export const fetchAllProductsToCartSaga = function * () {
      const userUid = yield select(state => state["auth"].user.uid); // !!!
    
      const productsRef = firebase.database().ref("users/" + userUid + "/products");
    
      const products = yield call([productsRef, productsRef.once], "value");
    
      yield put({
        type: FETCH_ALL_PRODUCTS_TO_CART_SUCCESS,
        payload: products.val()
      });
    };


    Попробовал убрать селектор и вбить userUid вручную. Все стало работать нормально вроде.
    Но я теперь не знаю как получить uid пользователя без селектора
  • Почему после добавления саги перестала работать авторизация и приходится каждый раз заходить занаво?

    @evg_96 Автор вопроса
    Антон Спирин,
    import { saga as authSaga } from "../ducks/auth";
    import { saga as catalogSaga } from "../ducks/catalog";
    import { saga as usersSaga } from "../ducks/users";
    import { saga as cartSaga } from "../ducks/cart";
    import { all } from "redux-saga/effects";
    
    export default function * rootSaga() {
      yield all([
        authSaga(),
        usersSaga(),
        catalogSaga(),
        cartSaga()
      ]);
    }


    const sagaMiddleware = createSagaMiddleware();
    const enhancer = applyMiddleware(sagaMiddleware, routerMiddleware(history));
    
    const store = createStore(reducer, window.__REDUX_DEVTOOLS_EXTENSION__(), enhancer);
    
    sagaMiddleware.run(rootSaga);
    
    export default store;


    PS. Заметил что пользователь слетает только если перезагрузить страницу на роуте каталога товаров. На других "страницах" при перезагрузки все вроде как норм, пользователь остается в системе
  • Почему после добавления саги перестала работать авторизация и приходится каждый раз заходить занаво?

    @evg_96 Автор вопроса
    ThemeZV Утки для товаров, для пользователей и для корзины отдельные.
    Я бы показал код, но я не знаю в чем конкретно проблема, и какой именно код предоставить...

    У меня получается что в firebase есть каталог товаров, и есть база пользователей. У пользователей есть поля с его информацией и есть поле products с товарами которые он добавил в корзину. Мне нужно было из этого поля подгружать товары в состояние. Вроде как получилось, но теперь ломается авторизация...

    5a96fa5064603539725329.pngВот саги из утки авторизации:
    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
            }
          });
    
          firebase.database().ref("users/" + user.uid).set({
            email: user.email
          });
    
          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()
      ]);
    };


    Вот саги из утки корзины:
    export const fetchAllProductsToCartSaga = function * () {
      const userUid = yield select(state => state["auth"].user.uid);
    
      const productsRef = firebase.database().ref("users/" + userUid + "/products");
    
      const products = yield call([productsRef, productsRef.once], "value");
    
      yield put({
        type: FETCH_ALL_PRODUCTS_TO_CART_SUCCESS,
        payload: products.val()
      });
    };
    
    export const addProductToCartSaga = function * (action) {
      const { productUid, userUid } = action.payload;
    
      const productRef = firebase.database().ref(`catalog/${productUid}`);
      const product = yield call([productRef, productRef.once], "value");
    
      yield put({
        type: ADD_PRODUCT_TO_CART_SUCCESS,
        payload: {
          productUid,
          product: product.val()
        }
      });
    
      pushProductToUser(productUid, userUid);
    };
    
    export const saga = function * () {
      yield all([
        takeEvery(FETCH_ALL_PRODUCTS_TO_CART_REQUEST, fetchAllProductsToCartSaga),
        takeEvery(ADD_PRODUCT_TO_CART_REQUEST, addProductToCartSaga)
      ]);
    }
  • Как изменить данные из одной "утки" в другой?

    @evg_96 Автор вопроса
    Антон Спирин, Ну для неавторизованных пользователей да, нужно в LS хранить данные, но у меня оформить заказ можно только после регистрации, и к тому же все равно нужно хранить данные о товарах в корзине в БД для зарегистрированных пользователей. Оно как бы и сделано так, чтобы он мог например набросать в корзину товары, а оформить заказ уже например с другого компьютера.

    Для меня вот и составляет сложность добавить товар пользователю в массив products в firebase.

    PS. Да список совершенных заказов тоже потом надо будет как то делать.
  • Как изменить данные из одной "утки" в другой?

    @evg_96 Автор вопроса
    Антон Спирин, Спасибо большое. Но вот только у меня теперь другая проблема. Корзина то заполняется, но заполняется локально, отображается только в состоянии в cart. После перезагрузки все пропадает. Не подскажите как теперь продукты добавлять не только в состоянии в корзину, но и в firebase пользователю в свойство products: []?
    В метод добавления в корзину добавил в аргументы id пользователя. но вот как добавить ему поле products и добавить туда продукт не знаю... (пользователи хранятся в коллекции users)
  • Как изменить данные из одной "утки" в другой?

    @evg_96 Автор вопроса
    Антон Спирин Спасибо за ответ, но честно не совсем понял его.
    Попытался интегрировать ваш код в свой, но не пойму суть
    productIdSelector = (_, props) => props.product.id;

    Что это вообще за функция?
    Все что выше этой функции вроде как понятно. Все что ниже не совсем понял...

    PS. Вау. Все заработало как надо. Теперь бы разобраться в этом.(
  • Как добавить поле в Record в immutable.js?

    @evg_96 Автор вопроса
    Максим Спасибо. Уже сам догадался как сделать. Вообще туплю и элементарные вещи понять не могу.
    А на счет action то, count не будет передаваться. Изначально в каталоге можно будет только добавить товар, а вот уже в самой корзине указать сколько конкретно нужно товаров этого вида.
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович,
    В доках представлен такой пример кода. Не подскажите как переписать на redux-saga тоже самое. При использовании on, нужно передавать callback, и что то не понятно как в таком случае действовать...
    ref.on('value', function(dataSnapshot) {
      ...
    });
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович,
    componentDidMount() {
      this.props.fetchAllUsers();
    }

    export const fetchAllUsersSaga = function * () {
      const ref = firebase.database().ref("users");
    
      try {
        const data = yield call([ref, ref.once], "value");
    
        yield put({
          type: FETCH_ALL_SUCCESS,
          payload: data.val()
        });
      } catch (error) {
        // NOP
      }
    };


    Я сделал сейчас так что просто каждые 2 секунды делается запрос на всех пользователей. Не знаю на сколько это правильно...
    export const backgroundSyncSaga = function * () {
      try {
        while (true) {
          yield call(fetchAllUsersSaga);
          yield delay(2000);
        }
      } catch (error) {
        // NOP
      }
    };
    
    export const saga = function * () {
      yield fork(backgroundSyncSaga);
    
      yield all([
        takeEvery(FETCH_ALL_REQUEST, fetchAllUsersSaga),
      ]);
    };
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович, Все вроде бы написал, но теперь не могу понять, как сделать так чтобы после очередной регистрации, пользователь сразу же добавлялся в state-->users? Сейчас список пользователей обновляется после перезагрузки страницы, так как загрузка всех пользователей указана на componentDidMount.
  • Как добавить пользователей в firebase?

    @evg_96 Автор вопроса
    Роман Александрович, получается все равно как то нужно связывать их. Например я изменю в firebase email пользователю, или удалю его вовсе, но изменения не будут отражены в моей коллекции в БД.
    Или в дальнейшем просто не трогать пользователей внутри firebase и работать только со своей коллекцией