@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
55 lines (44 loc) • 1.31 kB
text/typescript
import { useState, useEffect } from "react";
/** A 'plain' object version of the permission status. */
export type PlainPermissionStatus = {
readonly name: string;
readonly state: PermissionState;
};
export default function useQueryPermission(
name: PermissionName,
): PlainPermissionStatus | null {
const [status, setStatus] = useState<PermissionStatus | null>(null);
const [plainStatus, setPlainStatus] = useState<PlainPermissionStatus | null>(
null,
);
function updatePlainStatus(newStatus: PermissionStatus) {
setPlainStatus({
name: newStatus.name,
state: newStatus.state,
});
}
// Query the permission status when the name changes.
useEffect(() => {
setStatus(null);
setPlainStatus(null);
navigator.permissions.query({ name }).then((newStatus) => {
setStatus(newStatus);
updatePlainStatus(newStatus);
});
}, [name]);
// Update the 'plain' status when the permission status changes.
useEffect(() => {
if (!status) {
return;
}
function onStatusChange() {
if (!status) {
return;
}
updatePlainStatus(status);
}
status.addEventListener("change", onStatusChange);
return () => status.removeEventListener("change", onStatusChange);
}, [status]);
return plainStatus;
}