View fetch-with-timeout.js
function fetchWithTimeout( url, timeout ) { | |
return new Promise( (resolve, reject) => { | |
// Set timeout timer | |
let timer = setTimeout( | |
() => reject( new Error('Request timed out') ), | |
timeout | |
); | |
fetch( url ).then( | |
response => resolve( response ), |
View abort-fetch.js
const controller = new AbortController() | |
const signal = controller.signal | |
setTimeout(() => { | |
controller.abort() | |
}, 1000) | |
fetch(url, { signal }) |
View .js
gainResult(fn) { | |
return Promise.race([ | |
new Promise(resolve => { | |
try { | |
const ret = fn((err, result) => { | |
if (err) { | |
resolve({ | |
type: "async", | |
error: err.message | |
}); |
View gist:429f27ca22185161ca540dbc8c5289fa
#!/bin/bash | |
cd dist | |
shopt -s nullglob | |
for f in *.map | |
do | |
echo "uploading $f to New Relic" | |
publish-sourcemap $f $SCHUMACHER_CLIENT_ROOT --applicationId=238312787 --nrAdminKey=$NEW_RELIC_ADMIN_KEY | |
done | |
cd - |
View now.json
{ | |
"version": 2, | |
"name": "phmt.me", | |
"builds": [ | |
{ "src": "package.json", "use": "@now/static-build", "config": { "distDir": "build" } } | |
], | |
"routes": [ | |
{ "src": "/static/(.*)", "headers": { "cache-control": "s-maxage=31536000,immutable" }, "dest": "/static/$1" }, | |
{ "src": "/favicon.ico", "dest": "/favicon.ico" }, | |
{ "src": "/asset-manifest.json", "dest": "/asset-manifest.json" }, |
View gist:738ba56765a08208fa3a416a9eb403a7
diff --git c/src/ui/form/InputField.css i/src/ui/form/InputField.css | |
index 088fbc98..7946478e 100644 | |
--- c/src/ui/form/InputField.css | |
+++ i/src/ui/form/InputField.css | |
@@ -4,13 +4,24 @@ | |
width: 100%; | |
} | |
-.inputField-input[type="text"] { | |
+.inputField-input[type="text"], |
View serialization.js
import transform from 'transform-keys' | |
// https://github.com/bjoerge/transform-keys#custom-key-transformers | |
export function camelify(obj) { | |
return transform(obj, (key) => { | |
return key.replace(/_([a-z])/ig, (_, $1) => { | |
return $1.toUpperCase() | |
}) | |
}) | |
} |
View gist:b3455c22dfb215759fb2a5d77a7edb28
ARNING in ./stories/ButtonGroup_story.js | |
Module build failed: SyntaxError: Unexpected token (9:19) | |
at Parser.pp$4.raise (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:2748:13) | |
at Parser.pp.unexpected (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:644:8) | |
at Parser.pp.expect (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:638:26) | |
at Parser.pp$3.parseMethod (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:2521:8) | |
at Parser.pp$1.parseClassMethod (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:1308:23) | |
at Parser.parseClassMethod (/Users/dmarr/code/schumacher/node_modules/acorn-class-fields/inject.js:104:23) | |
at Parser.pp$1.parseClassMember (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysou |
View gist:ce6b5ffdf54335eedc806cf9bccf4376
const path = require('path'); | |
const OpenBrowserPlugin = require('open-browser-webpack-plugin'); | |
/* | |
* Storybook Webpack FULL CONTROL MODE | |
* | |
* extend carefully, please read the docs! | |
* https://storybook.js.org/configurations/custom-webpack-config/#full-control-mode | |
* | |
* @param {object} config - the default Storybook webpack config object |
View .js
export const getTaxAmount = (rate, total) => { | |
const totalCents = parseInt(total * 100, 10); | |
const tax = Math.round(totalCents / (1 + rate) * rate); | |
return { | |
subtotal: (totalCents - tax) / 100, | |
tax: tax / 100, | |
total, | |
}; | |
}; |
NewerOlder