@solid-bricks/barcode
Version:
A solid-js component that renders barcodes
35 lines (34 loc) • 1.29 kB
JSX
import JsBarcode from 'jsbarcode';
import { createMemo, mergeProps, createEffect, on } from 'solid-js';
import { Dynamic } from 'solid-js/web';
const defaultProps = {
as: 'svg',
onError: console.error,
};
export function Barcode(props) {
const local = mergeProps(defaultProps, props);
let elemRef;
createEffect(on(() => [local.value, local.options, local.as], () => {
try {
JsBarcode(elemRef, local.value, Object.assign({}, local.options));
}
catch (err) {
local.onError?.(err);
}
}));
const memoClassList = createMemo(() => {
let elemPropsClassList, elemPropsClass, localClass;
if (local.elemProps) {
elemPropsClassList = local.elemProps.classList;
elemPropsClass =
local.elemProps.class != null
? { [local.elemProps.class]: !!local.elemProps.class }
: null;
}
if (local.class != null) {
localClass = { [local.class + '']: !!local.class };
}
return Object.assign({}, elemPropsClassList, elemPropsClass, local.classList, localClass);
});
return (<Dynamic {...local.elemProps} class={undefined} component={local.as} ref={elemRef} classList={memoClassList()}/>);
}