Skip to content

Instantly share code, notes, and snippets.

View andrewborisov's full-sized avatar

Andrei Borisov andrewborisov

View GitHub Profile
const UNGROUPED_KEY = 'ungrouped';
const transformCollection = (collection, keyField) => collection.reduce((acc, curValue) => {
const DESIRED_KEY = curValue[keyField];
if (acc[`${DESIRED_KEY}`.toLowerCase()]) {
acc[`${DESIRED_KEY}`.toLowerCase()] = [...acc[`${DESIRED_KEY}`.toLowerCase()], curValue];
} else {
if (DESIRED_KEY) {
acc[`${DESIRED_KEY}`.toLowerCase()] = [curValue];
} else {
@andrewborisov
andrewborisov / bridge.js
Created August 18, 2020 19:07
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class Gestures {
constructor(output) {
this.name = 'Gestures';
this.output = output;
}
tap() {
return this.output.click(this.name);
}
@andrewborisov
andrewborisov / flyweight.js
Created August 18, 2020 06:35
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class Flyweight {
constructor(state) {
this.state = state;
}
}
class FlyWeightFactory {
constructor(flyweightsList) {
this.flyweights = {};
flyweightsList.forEach((item) => {
@andrewborisov
andrewborisov / proxy.js
Created August 18, 2020 05:06
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class ServiceInteraction {
constructor(url) {
this.url = url;
}
sendRequest(path, method) {
return fetch(`https://${this.url}/${path}`, {
method,
})
.then((res) => res.json())
@andrewborisov
andrewborisov / facade.js
Last active August 18, 2020 00:07
Гист для статьи: "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class WebsocketInteraction {
constructor(url, port) {
this.url = url;
this.port = port;
}
connect() {
return new Promise((resolve) => {
this.connection = new WebSocket(`wss://${this.url}:${this.port}`);
this.connection.onopen = (e) => {
@andrewborisov
andrewborisov / decorator.js
Last active August 17, 2020 23:55
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class ServiceInteraction {
constructor(url, port) {
this.url = url;
this.port = port;
}
connect() {
return new Promise((resolve) => {
this.connection = new WebSocket(`wss://${this.url}:${this.port}`);
this.connection.onopen = (e) => {
@andrewborisov
andrewborisov / composite.js
Created August 5, 2020 04:31
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class Composite {
constructor(compositeName) {
this.children = [];
this.compositeName = compositeName;
}
add(child) {
this.children.push(child);
}
@andrewborisov
andrewborisov / adapter.js
Created August 5, 2020 01:33
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6 (часть 2)"
class OldDateConverter {
convertToUSAFormat(dateObject) {
const [y, m, d] = dateObject.toISOString().substr(0, 10).split('-');
return [m, d, y].join('-');
}
convertToRussianFormat(dateObject) {
const [y, m, d] = dateObject.toISOString().substr(0, 10).split('-');
return [d, m, y].join('-');
}
@andrewborisov
andrewborisov / singleton.js
Created July 24, 2020 04:58
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6"
class Singleton {
constructor(data) {
if (Singleton.instance) {
return Singleton.instance;
}
Singleton.instance = this;
this.data = data;
return this;
@andrewborisov
andrewborisov / prototype-pattern.js
Created July 24, 2020 04:57
Гист для статьи "Еще раз о паттернах проектирования в Javascript es6"
class Prototype {
setOption(key, val) {
this[key] = val;
}
clone() {
const clone = new Prototype();
const keys = Object.keys(this);
keys.forEach((k) => clone.setOption(k, this[k]));