Files
papercrate/frontend/src/app/SettingsRoute.jsx
T
2025-11-10 13:34:12 +01:00

124 lines
3.5 KiB
React

import React, { useEffect, useCallback } from 'react';
import SettingsModal from '../settings/SettingsModal';
import { useAppShell } from '../appShellContext';
import useApiTokens from '../settings/useApiTokens';
import useCapabilitySets from '../settings/useCapabilitySets';
import useCapabilities from '../settings/useCapabilities';
import { api } from './appState';
const SettingsRoute = ({ open = true, onClose }) => {
const {
token,
notifyApiError,
setStatusMessage,
passkeys,
passkeysSupported,
passkeysLoading,
registeringPasskey,
revokingPasskeyId,
refreshPasskeys,
registerPasskey,
revokePasskey,
} = useAppShell();
const {
tokens,
loading: tokensLoading,
creating: creatingToken,
deletingId,
regeneratingId,
createdSecret,
refresh: refreshTokens,
create: createToken,
revoke: revokeToken,
regenerate: regenerateToken,
dismissSecret,
} = useApiTokens({ api, token, notifyApiError, setStatusMessage });
const {
capabilitySets,
capabilitySetsLoading,
creatingCapabilitySet,
savingCapabilitySetId,
deletingCapabilitySetId,
supportsCapabilitySetLabels,
refreshCapabilitySets,
createCapabilitySet,
updateCapabilitySet,
deleteCapabilitySet,
} = useCapabilitySets({ api, token, notifyApiError, setStatusMessage });
const {
capabilities,
capabilitiesLoading,
refreshCapabilities,
} = useCapabilities({ api, notifyApiError, token });
useEffect(() => {
refreshTokens();
refreshCapabilitySets();
refreshCapabilities();
refreshPasskeys();
}, [refreshTokens, refreshCapabilitySets, refreshCapabilities, refreshPasskeys]);
const handleRefresh = useCallback(() => {
refreshTokens();
refreshCapabilitySets();
refreshCapabilities();
}, [refreshTokens, refreshCapabilitySets, refreshCapabilities]);
const handleClose = useCallback(() => {
dismissSecret();
onClose?.();
}, [dismissSecret, onClose]);
useEffect(() => () => {
dismissSecret();
}, [dismissSecret]);
if (!open) {
return null;
}
return (
<SettingsModal
open={open}
onClose={handleClose}
tokens={tokens}
loading={tokensLoading}
creating={creatingToken}
deletingId={deletingId}
regeneratingId={regeneratingId}
onRefresh={handleRefresh}
onCreate={createToken}
onDelete={revokeToken}
onRegenerate={regenerateToken}
createdToken={createdSecret}
onDismissCreatedToken={dismissSecret}
capabilitySets={capabilitySets}
capabilitySetsLoading={capabilitySetsLoading}
creatingCapabilitySet={creatingCapabilitySet}
savingCapabilitySetId={savingCapabilitySetId}
deletingCapabilitySetId={deletingCapabilitySetId}
supportsCapabilitySetLabels={supportsCapabilitySetLabels}
onRefreshCapabilitySets={refreshCapabilitySets}
capabilities={capabilities}
capabilitiesLoading={capabilitiesLoading}
onRefreshCapabilities={refreshCapabilities}
onCreateCapabilitySet={createCapabilitySet}
onUpdateCapabilitySet={updateCapabilitySet}
onDeleteCapabilitySet={deleteCapabilitySet}
passkeys={passkeys}
passkeysSupported={passkeysSupported}
passkeysLoading={passkeysLoading}
registeringPasskey={registeringPasskey}
revokingPasskeyId={revokingPasskeyId}
onRefreshPasskeys={refreshPasskeys}
onRegisterPasskey={registerPasskey}
onRevokePasskey={revokePasskey}
/>
);
};
export default SettingsRoute;