Skip to content

Instantly share code, notes, and snippets.

View ghengeveld's full-sized avatar

Gert Hengeveld ghengeveld

View GitHub Profile
@ghengeveld
ghengeveld / storage.js
Created April 2, 2020 08:41
Safe localStorage & sessionStorage with JSON support
const storage = type => ({
/**
* Asserts that sessionStorage or localStorage is available.
*
* Returns true even on quota exceeded error, so we won't silently ignore when we're using too much
* space, unless we haven't stored anything yet which will happen when the browser has set a very
* strict size limit (i.e. Safari Private Browsing sets quota to 0).
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API
*/
@ghengeveld
ghengeveld / shallowEqual.js
Created November 13, 2020 15:13
shallowEqual with logging
function shallowEqual(objA, objB): boolean {
if (Object.is(objA, objB)) {
return true;
}
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
console.log('not object');
return false;
}
@ghengeveld
ghengeveld / example.stories.jsx
Created December 14, 2020 20:46
Storybook lazy loading
export default {
title: 'Basics/Button',
loaders: [() => import('./Button')],
};
const Template = (args, { loaded }) => {
const { default: Button } = loaded;
return <Button {...args} />;
};
@ghengeveld
ghengeveld / storybook-embed.js
Created July 7, 2021 09:28
Storybook embed util
window.addEventListener("message", (message) => {
try {
const data = JSON.parse(message.data)
if (!data || data.context !== "iframe.resize") return
const url = new URL(data.src)
for (const key of [...url.searchParams.keys()]) {
if (!["path", "id", "args"].includes(key)) url.searchParams.delete(key)
}
for (const el of document.querySelectorAll(`iframe[src^="${url.href}"]`)) {
el.style.height = `${data.height}px`
@ghengeveld
ghengeveld / storybook-embed.html
Last active July 7, 2021 09:41
Storybook embed example
<!DOCTYPE html>
<html>
<head>
<title>Storybook embed example</title>
<script>
window.addEventListener("message", (message) => {
try {
const data = JSON.parse(message.data)
if (!data || data.context !== "iframe.resize") return
const url = new URL(data.src)