FORMAT:
<type>[optional scope]: <description>
[optional body]
[optional footer]
{ | |
"Africa/Abidjan": [8, -5], | |
"Africa/Accra": [8, -2], | |
"Africa/Addis_Ababa": [8, 38], | |
"Africa/Algiers": [28, 3], | |
"Africa/Asmara": [15, 39], | |
"Africa/Bamako": [17, -4], | |
"Africa/Bangui": [7, 21], | |
"Africa/Banjul": [13.46666666, -16.56666666], | |
"Africa/Bissau": [12, -15], |
// Available variables: | |
// - Machine | |
// - interpret | |
// - assign | |
// - send | |
// - sendParent | |
// - spawn | |
// - raise | |
// - actions |
function waitFor(ms: number): Promise<void> { | |
return new Promise(resolve => setTimeout(resolve, ms)); | |
} | |
export default async function fetchRetry(promise: Promise<unknown>, n: number, waitNseconds = 1000): Promise<unknown> { | |
try { | |
return await promise; | |
} catch (error) { | |
if (n === 1) throw error; |
import { useEffect, useRef } from 'react'; | |
import { useDispatch } from 'react-redux'; | |
function useReduxPolling(action: any, interval = 2000): void { | |
const dispatch = useDispatch(); | |
const callback = useRef(action); | |
useEffect(() => { | |
callback.current = action; |
<type>[optional scope]: <description>
[optional body]
[optional footer]
Technical Story: [description | ticket/issue URL]
import parse from "html-react-parser"; | |
import DOMPurify from "dompurify"; | |
export default function parseHtml(response) { | |
if (response) { | |
const dirty = response; | |
const clean = DOMPurify.sanitize(dirty); | |
return parse(clean); | |
} | |
} |
{ | |
"currency":"EUR", | |
"deals":[ | |
{ | |
"transport":"train", | |
"departure":"London", | |
"arrival":"Amsterdam", | |
"duration":{ | |
"h":"05", | |
"m":"00" |
let curry = function (tocurry) { | |
const params = Array.prototype.slice.call(arguments, 1); | |
return function () { | |
return tocurry.apply(this, params.concat( | |
Array.prototype.slice.call(arguments, 0) | |
)); | |
}; | |
}; |