June 16, 2022Throwaway Code
Throwaway Code
June 16, 2022
Writing code isn't all that different from traditional construction. They both require, time, resources, and planning. Both are executed in discrete phases, similar to sprints. And throughout the entire process, we bring tools in/out as required.
So next time you feel inclined to add a bunch of "console.log" statements, or you're looking to debug things, build something... I frequently create a "debugger component" and hide it behind something simple, like a cookie. Below is a simple example using React and TailwindCSS, hope it helps!
~/components/AppDebugger.tsx
import * as React from 'react';
import { useBetaFlag } from '@src/hooks/useBetaFlag';
export const AppDebugger = () => {
// Hooks
const [open, setOpen] = React.useState(false);
const isBeta = useBetaFlag();
// Markup
const renderContent = () => (
<div className="rounded-lg border border-solid border-stormy bg-white p-2">
<p>
Now we can just build some tooling directly into the application. If you
have more advanced authentication available you can use that as well.
</p>
</div>
);
// 🔌 Short Circuit
if (!isBeta) return null;
return (
<div className="fixed right-4 bottom-4 flex flex-col justify-end">
<button
className="mb-2 rounded-lg border border-solid border-stormy bg-white p-2"
onClick={() => setOpen(!open)}
type="button"
>
{open ? '🐛' : '✖️'}
</button>
{open && renderContent()}
</div>
);
};
~/hooks/useBetaFlag.ts
import { useCookies } from 'react-cookie';
import { COOKIE_BETA } from '~/config/constants';
export const useBetaFlag = (): boolean => {
const [cookies] = useCookies();
const isBeta = cookies[COOKIE_BETA];
return isBeta;
};
~/config/constants.ts
export const COOKIE_BETA = "custom_cookie_name"