Skip to content

Instantly share code, notes, and snippets.

View marekpiechut's full-sized avatar
💭
👨‍💻Programming or playing 🎸

Marek Piechut marekpiechut

💭
👨‍💻Programming or playing 🎸
View GitHub Profile
@marekpiechut
marekpiechut / sublime-medium.tsx
Last active July 3, 2020 11:56
Get lazy loading cheap with intersectionobserver i ccc4a072ab24457ea3de05cd8ed8f5ed
const useLazyMediaLoad = media => {
const [url, setUrl] = useState<?string>(null)
const targetRef = useRef<?HTMLElement>(null)
useEffect(() => {
if (!IntersectionObserver) {
thumbLoader(media).then(setUrl)
} else if (targetRef.current) {
let observer = new IntersectionObserver(
entries =>
@marekpiechut
marekpiechut / sublime-medium.tsx
Last active July 3, 2020 11:57
Get lazy loading cheap with intersectionobserver i ccc4a072ab24457ea3de05cd8ed8f5ed
const ExerciseItem = ({ exercise, thumbLoader }: Props) => {
const [url, setUrl] = useState<?string>(null)
const thisRef = useRef<?HTMLDivElement>(null)
const media = exercise.media.id
useEffect(() => {
if (IntersectionObserver) {
let observer = new IntersectionObserver(
entries =>
@marekpiechut
marekpiechut / sublime-medium.tsx
Last active July 3, 2020 11:57
Get lazy loading cheap with intersectionobserver i ccc4a072ab24457ea3de05cd8ed8f5ed
{
rootMargin: '0px 0px 200px 0px'
}
@marekpiechut
marekpiechut / sublime-medium.tsx
Last active July 3, 2020 11:58
Get lazy loading cheap with intersectionobserver i ccc4a072ab24457ea3de05cd8ed8f5ed
const ExerciseItem = ({ exercise }: Props) => {
const [url, setUrl] = useState<?string>(null)
const thisRef = useRef<?HTMLDivElement>(null)
useEffect(() => {
let observer = new IntersectionObserver(
entries => entries.forEach(entry => {
if (entry.isIntersecting) {
thumbLoader(media).then(setUrl)
observer = observer.disconnect()
@marekpiechut
marekpiechut / sublime-medium.tsx
Last active July 3, 2020 11:58
Get lazy loading cheap with intersectionobserver i ccc4a072ab24457ea3de05cd8ed8f5ed
const ExerciseItem = ({ exercise }: Props) => {
const [url, setUrl] = useState<?string>(null)
useEffect(() => {
thumbLoader(media).then(setUrl)
}, [media, thumbLoader])
return <div css={styles.thumb} style={{ backgroundImage: `url(${url})` }} />
}
@marekpiechut
marekpiechut / sublime-medium.tsx
Last active July 3, 2020 11:57
Get lazy loading cheap with intersectionobserver i ccc4a072ab24457ea3de05cd8ed8f5ed
const ExerciseItem = ({ exercise }: Props) => {
const [url, setUrl] = useState<?string>(null)
return <div css={styles.thumb} style={{ backgroundImage: `url(${url})` }} />
}
@marekpiechut
marekpiechut / sublime-medium.js
Last active January 21, 2019 12:56
Authentication and Authorization in NodeJS GraphQL API
const resolvers = membersOnly({
Query: {
templates: (parent, args, { user }) => {
return service.fetchForUser(user.uuid)
},
tasks: (parent, args, { user }) => {
return service.fetchTasks(user.uuid)
},
},
})
@marekpiechut
marekpiechut / sublime-medium.js
Last active January 21, 2019 12:56
Authentication and Authorization in NodeJS GraphQL API
const requiresRole = role => resolver => {
if (isFunction(resolver)) {
return (parent, args, context, info) => {
if (context.user && (!role || context.user.role === role)) {
return resolver(parent, args, context, info)
} else {
throw new AuthenticationError('Unauthorized')
}
}
} else if (isObject(resolver)) {
@marekpiechut
marekpiechut / sublime-medium.js
Last active January 21, 2019 12:56
Authentication and Authorization in NodeJS GraphQL API
Query: {
templates: membersOnly((parent, args, { user }) => {
return service.fetchForUser(user.uuid)
}),
adminTasks: adminsOnly((parent, args, { user }) => {
return service.fetchAdminTasks(user.uuid)
}),
}
@marekpiechut
marekpiechut / sublime-medium.js
Last active January 21, 2019 12:56
Authentication and Authorization in NodeJS GraphQL API
const requiresRole = role => resolver => {
return (parent, args, context, info) => {
if (context.user && (!role || context.user.role === role)) {
return resolver(parent, args, context, info)
} else {
throw new AuthenticationError('Unauthorized')
}
}
}
const membersOnly = requiresRole('MEMBER')