Skip to content

Instantly share code, notes, and snippets.

⚛️

Bruno Lemos brunolemos

⚛️
View GitHub Profile
@brunolemos
brunolemos / Xcode Build Phases
Created Nov 22, 2017
React Native with Source Maps
View Xcode Build Phases
# Xcode > Build Phases > Bundle React Native code and images
export NODE_BINARY=node
./react-native-xcode.sh
@brunolemos
brunolemos / linkedin-unfollow-everyone.js
Last active Jul 13, 2020
Unfollow everyone on Linkedin
View linkedin-unfollow-everyone.js
(() => {
let count = 0;
function getAllButtons() {
return document.querySelectorAll('button.is-following') || [];
}
async function unfollowAll() {
const buttons = getAllButtons();
@brunolemos
brunolemos / debounce.js
Created Dec 20, 2016
React Debounce Render
View debounce.js
// usage:
// export default debounce(100)(MyComponent);
import React from 'react';
import debounce from 'lodash/debounce';
export default (interval, ...debounceArgs) => {
if (typeof interval !== 'number' && interval > 0) {
throw new Error('[debounce] Interval (ms) parameter not received.');
}
View darkify_slack.sh
#!/bin/sh
# Darkify Slack on Mac OS:
SLACK_INTEROP_JS="/Applications/Slack.app/Contents/Resources/app.asar.unpacked/src/static/ssb-interop.js"
# Thanks to: https://gist.github.com/DrewML/0acd2e389492e7d9d6be63386d75dd99#gistcomment-2358430
if [ -z "`grep tt__customCss ${SLACK_INTEROP_JS}`" ]; then
# Backup original CSS for reverts:
cp ${SLACK_INTEROP_JS} ${SLACK_INTEROP_JS}.bak
echo 'document.addEventListener("DOMContentLoaded",function(){let tt__customCss=`body{background:#222;color:#e6e6e6}a{color:#949494}a:link,a:visited{color:#949494}a:active,a:focus,a:hover{color:#c7c7c7}hr{border-bottom:1px solid #424242;border-top:1px solid #222}h1,h2,h3,h4{color:#e6e6e6}h1 a{color:#e6e6e6}h1 a:active,h1 a:hover,h1 a:link,h1 a:visited{color:#e6e6e6}.bordered{border:1px solid #363636}.top_border{border-top:1px solid #363636}.bottom_border{border-bottom:1px solid #363636}.left_border{border-left:1px solid #363636}.right_border{border-right:1px solid #363636}.bullet{color:#949494}.alert,.c-alert,.c-alert--bo
@brunolemos
brunolemos / v1.tsx
Created Dec 17, 2019
useWhyDidYouUpdate
View v1.tsx
import { useEffect, useRef } from 'react'
export function useWhyDidYouUpdate(name: string, props: Record<string, any>) {
const latestProps = useRef(props)
useEffect(() => {
const allKeys = Object.keys({ ...latestProps.current, ...props })
const changesObj: Record<string, { from: any; to: any }> = {}
allKeys.forEach(key => {
@brunolemos
brunolemos / ExampleComponent.tsx
Last active May 27, 2020
Redux + TypeScript - Strongly Typed
View ExampleComponent.tsx
import React from 'react'
import { Button, Text, View } from 'react-native'
import { useDispatch } from 'react-redux'
import { useReduxState } from '../hooks/use-redux-state'
import * as actions from '../redux/actions'
import * as selectors from '../redux/selectors'
export function LoginScreen() {
const dispatch = useDispatch()
@brunolemos
brunolemos / App.tsx
Last active Apr 7, 2020
react-native-safe-area-context
View App.tsx
import React from 'react'
import { StatusBar, Text, View } from 'react-native'
import { useSafeArea } from 'react-native-safe-area-context'
export function App() {
const safeAreaInsets = useSafeArea()
return (
<View
style={{
@brunolemos
brunolemos / PlatformTouchable.tsx
Last active Sep 28, 2019
TypeScript version of react-native-platform-touchable
View PlatformTouchable.tsx
// Source: https://github.com/react-community/react-native-platform-touchable
import React, { PureComponent, ReactNode } from 'react'
import {
BackgroundPropType,
Platform,
StyleProp,
TouchableNativeFeedback,
TouchableNativeFeedbackProperties,
TouchableNativeFeedbackStatic,
TouchableOpacity,
@brunolemos
brunolemos / TouchableScale.tsx
Created Sep 21, 2018
Touchable component with Scale effect, common on iOS 12 (works on mobile and web)
View TouchableScale.tsx
// Demo: https://snack.expo.io/@brunolemos/touch-button-scale-effect
import React from 'react'
import { Animated, StyleProp, TouchableWithoutFeedback, TouchableWithoutFeedbackProps, ViewStyle } from 'react-native'
import { styleMerge } from 'shared/src/utils'
export interface TouchableScaleProps extends TouchableWithoutFeedbackProps {
containerStyle?: StyleProp<ViewStyle>
}
@brunolemos
brunolemos / Example.jsx
Last active Jan 12, 2018
[react-native] Cross-platform TabView component with unified API for SegmentedControl (iOS default) and scrollable tabs (Android default)
View Example.jsx
// Live demo: https://snack.expo.io/@brunolemos/tabview
import React, { Component } from 'react';
import { Platform, StyleSheet, View } from 'react-native';
import { Constants } from 'expo';
import TabView from './components/TabView';
const routes = [{ index: 0, title: 'Tab 0' }, { index: 1, title: 'Tab 1' }];
You can’t perform that action at this time.