Skip to content

Instantly share code, notes, and snippets.

View Pyrolistical's full-sized avatar

Pyrolistical

View GitHub Profile
// BAD
const LocaleContext = React.createContext();
const OverrideLocaleContext = React.createContext()
const App = () => {
const [locale, setLocale] = useState('english');
return <LocaleContext.Provider value={locale}>
<Navigation />
</LocaleContext.Provider>;
};
// React.memo caches the functional component if all the props are triple equals ===
const Increment = React.memo(({ caller, onClick }) => {
console.log(`${caller} button rendered`);
return <button onClick={onClick}>Increment</button>;
});
const BadComponent = () => {
const [count, setCount] = useState(0);
// declared functions never triple equals ===, even if its the same code
// ie. (() => {}) === (() => {}) is false,
import {createContext, useContext} from 'react';
const LocaleContext = createContext();
export const ProvideLocale = Locale.Provider;
export const useLocale = () => {
const locale = useContext(LocaleContext);
return locale;
};
@Pyrolistical
Pyrolistical / service.js
Last active October 9, 2021 20:56
separate business layer from infrastructure layer before service.js
export default (db) => {
return {
async checkIn(teamID) {
const disqualifiedPlayers = await db.collection('playerDisqualifications').find({
teamID
})
.toArray();
if (disqualifiedPlayers.length > 0) {
throw new Error('cannot check-in with disqualified players');
}
@Pyrolistical
Pyrolistical / repository.js
Last active October 9, 2021 22:17
separate business layer from infrastructure layer after
export default (db) => {
return {
async findDisqualifiedPlayers(teamID) {
return db.collection('playerDisqualifications').find({
teamID
})
.toArray();
},
async checkInTeam(teamID) {
return db.collection('checkIns').insert({
@Pyrolistical
Pyrolistical / service.spec.js
Created October 9, 2021 21:17
separate business layer from infrastructure layer before service.spec.js
import Service from './service';
test('teams with disqualified players cannot check-in', async () => {
const db = {
collection(collection) {
switch (collection) {
case 'playerDisqualifications': {
return {
find({teamID}) {
expect(teamID).toBe('some team id');
@Pyrolistical
Pyrolistical / service.spec.js
Created October 9, 2021 21:36
separate business layer from infrastructure layer before service.spec.js with jest mocks
import {jest} from '@jest/globals'
import Service from './service';
test('teams with disqualified players cannot check-in', async () => {
const playerDisqualificationsFindToArray = jest.fn()
.mockResolvedValueOnce([
{
teamID: 'some team id',
reason: 'was a big meanie'
@Pyrolistical
Pyrolistical / service.spec.js
Last active October 9, 2021 22:25
separate business layer from infrastructure layer after test
import {jest} from '@jest/globals'
import Service from './service';
test('teams with disqualified players cannot check-in', async () => {
const repository = {
findDisqualifiedPlayers: jest.fn()
.mockResolvedValueOnce([
{
teamID: 'some team id',
@Pyrolistical
Pyrolistical / repository.js
Created October 10, 2021 05:59
separate business layer from infrastructure layer after alternative checkInTeam
async checkInTeam(teamID) {
return db.collection('teams').updateOne({
_id: teamID
}, {
$set: {
checkedInAt: new Date()
}
});
}
@Pyrolistical
Pyrolistical / service.js
Created October 22, 2021 07:42
ecommerce-escalation v1
import _ from 'lodash';
export class InsufficientStock extends Error {
constructor(message) {
super(message);
this.name = 'InsufficientStock';
}
}
export default (repository) => {