Административный веб интерфейс для Личного Кабинета Машиниста
Главный стек: React, Redux (Saga), styled-components
const passportDefaultPermissions: PassportPermissions = { | |
passport: { | |
base_title: { read: true, write: false, delete: false }, | |
base_unit: { read: true, write: false, delete: false }, | |
nomenclature_amount: { read: true, write: false, delete: false }, | |
nomenclature_price_unit: { read: true, write: false, delete: false }, | |
nomenclature_price_sum: { read: true, write: false, delete: false }, | |
agreement_date: { read: true, write: false, delete: false }, |
export type Passport = { | |
title: string; | |
children: PassportCategory[]; | |
}; | |
export type PassportCategory = { | |
id: number | null; | |
base_title: string; | |
base_unit?: string; | |
children: PassportCategory[] | PassportNomenclature[] | null; |
export type Passport = { | |
id: number; | |
title: string; | |
children: PassportCategory[] | PassportNomenclature[] | null; | |
}; | |
export type PassportCategory = { | |
id: number | null; | |
children: PassportCategory[] | PassportNomenclature[] | null; |
// -------------------- before get passport, but after patch request | |
{ | |
"title": "Тверь 6902", | |
"children": [ | |
{ | |
"id": 22, | |
"base_title": "Земляные работы", | |
"children": [ | |
{ | |
"id": 23, |
export type Passport = { | |
id: number; | |
title: string; | |
children: PassportCategory[] | PassportNomenclature[] | null; | |
}; | |
// Если что amount - это количество/объем | |
// в контексте нашего проекта amount - это объем товара | |
// а count - это счетчик чего-то конкретного | |
// amount - объем |
// Функции для проверки матриц | |
const devBy2 = (a) => a % 2 === 0; | |
const devBy5 = (a) => a % 5 === 0; | |
const ost5By2 = (a) => (a / 5) % 2 === 0; | |
const mult3By4 = (a) => (a * 3) % 4 === 0; | |
// Собрал все условия в массив для удобства работы с ними далее | |
// Можно изначально вынести их в отдельных объект, если | |
// в задаче предполагается, что условий может быть бесконечное множество | |
const conditions = [devBy2, devBy5, ost5By2, mult3By4]; |
import React from 'react' | |
import { withRouter } from 'react-router-dom' | |
import { connect } from 'react-redux' | |
import Comment from 'components/UI/Comment' | |
import Api from 'api/library' | |
import { showFlash } from 'store/flash/actions' | |
import * as S from './styles' |
{ | |
"editor.snippetSuggestions": "top", | |
"window.zoomLevel": 0, | |
"editor.lineHeight": 24, | |
"editor.fontSize": 13, | |
"editor.fontFamily": "fira code medium", | |
"editor.tabSize": 2, | |
"emmet.triggerExpansionOnTab": true, | |
"emmet.syntaxProfiles": { | |
"javascript": "html" |
Роль: front-end разработчик
Описание проекта: Оптовый каталог строительных материалов с полноценной фильтрацией и поиском по базе.
Команда: 1-3 чел.
С чем работал: JS ES6+, React, Redux, Styled-Components, Figma, Trello
Что делал: Занимался реализацией всего функционала с нуля и оказывал дальнейшую поддержку: