Skip to content

Instantly share code, notes, and snippets.

View xnimorz's full-sized avatar

Nik xnimorz

View GitHub Profile
@xnimorz
xnimorz / batchedMiddleware.js
Last active November 1, 2019 14:07
Batched actions and reducer concept
export const BATCH = 'BATCHING_ACTIONS';
// actions — массив экшенов, вида [
// {type: "actionType1", payload: {}, ...},
// {type: "actionType2", payload: {}, ...},
// ...
//]
// Функция формирует из custom action классический redux экшен, иначе, когда экшен дойдет до стора redux выдаст ошибку
export const batchActionCreator = (actions) => ({
type: BATCH,
  1. Убрали 100vw (потому что не на xs он ведет себя неправильно):
  2. Вынесли базовую реализацию DropBase и отдельные специфичные Menu, Info, Down в jsx
  3. Удалили lastMetrics
  4. Menu, Info и Down внутри себя работают через общий Base компонент, отличия в поведении описаны или в существующих параметрах, либо в behavior. behavior — это набор пресетов, таких как "размер стрелочки", "выравнивание", "оффсет для компонента" — т.е. мелкие стилевые и поведенческие отличия компонентов друг от друга
  5. Позиционирование между Menu, Down, Info стало более похожим, отличается только по behavior
  6. Избавились от customDistance — теперь за него также отвечает behavior
  7. Сделали правильное выравнивание для Menu и Down
  8. Починили анимашку у варинильных выпадающих элементов
  9. Ресетим позицию при ресайзе на ванильных реализациях
@xnimorz
xnimorz / AboutMe.js
Created February 21, 2019 08:20
HighlighterProposal
function ResumeAboutMe(props) {
const [aboutMe] = useHighligted(props.aboutMe);
return (
<div>
<HiglightedText>{aboutMe}</HiglightedText>
</div>
);
}
@xnimorz
xnimorz / def.js
Created September 12, 2018 15:39
deffered render
class DeferredRender extends Component {
static defaultProps = {
countByStep: 100,
};
state = { rendered: 0 };
componentDidMount() {
this.nextStep();
}
@xnimorz
xnimorz / WithCallbacks.jsx
Last active September 1, 2018 22:28
WhyObjectRefsAreGood.jsx
// With callbacs:
class List extends Component {
constructor(props) {
super(props);
props.items.map(item =>
this.refsCallbacks[item.id] = (el) => this.refs.items[item.id] = el;
);
// also you can store refCallbacks in state.
}
componentWillReceiveProps(nextProps) {
// Наш модуль сможет работать как в node.js, так и в браузере
(function (global) {
if (global.setImmediate) {
return;
}
// оборачиваем присваивание в анонимную функцию, чтобы один раз найти нужный способ асинхронного вызова для платформы и использовать его.
global.setImmediate = (function() {
var list = [];
var addFunction = function(fn) {
return list.push(fn) - 1;
@xnimorz
xnimorz / select-button.css
Last active November 4, 2015 12:42
select-button result
.select-button {
position: relative;
display: inline-block;
box-sizing: border-box;
display: inline-block;
}
/* Случай, при растяжении кнопки на всю ширину */
.select-button_stretched {
width: 100%;
.select-button:hover .select-button__button {
color: #fff;
border-color: #348de8;
background-color: #348de8;
}
<div class='select-button'>
<button class='button'>
Добавить город
</button>
<select class='select-button__select'>
<option>Выберите вариант</option>
<option value='1'>Москва</option>
<option value='2'>Санкт-Петербург</option>
<option value='3'>Малые Холуницы</option>
</select>
.select-button {
position: relative;
display: inline-block;
box-sizing: border-box;
display: inline-block;
}
.select-button_stretched {
width: 100%;
}