reactuals
Version:
A useful package providing a collection of 50+ React hooks and utilities to simplify React development.
38 lines (37 loc) • 1.27 kB
JavaScript
import { useCallback, useState } from "react";
export function useEyeDropper() {
const [error, setError] = useState(undefined);
const [pickedColor, setPickedColor] = useState(null);
const isSupported = useCallback(() => {
return typeof window !== "undefined" && !!window.EyeDropper;
}, []);
const pickColor = useCallback(async () => {
if (!isSupported()) {
const error = new Error("EyeDropper API is not supported in this browser.");
setError(error);
setPickedColor(null);
return { result: null, error };
}
try {
const eyeDropper = new window.EyeDropper();
const result = await eyeDropper.open();
setPickedColor(result.sRGBHex);
setError(undefined);
return { result };
}
catch (error) {
const err = error instanceof Error ? error : new Error(String(error));
setError(err);
setPickedColor(null);
return { result: null, error: err };
}
}, [isSupported]);
const clearError = useCallback(() => setError(undefined), []);
return {
pickColor,
isSupported,
error,
clearError,
pickedColor,
};
}