import { createSignal, For } from "solid-js"; import { buildScopeString, GRANULAR_SCOPES, scopeIdsToString } from "./scope-utils"; interface ScopeSelectorProps { onConfirm: (scopeString: string, scopeIds: string) => void; onCancel: () => void; initialScopes?: Set; } export const ScopeSelector = (props: ScopeSelectorProps) => { const [selectedScopes, setSelectedScopes] = createSignal>( props.initialScopes || new Set(["create", "update", "delete", "blob"]), ); const isBlobDisabled = () => { const scopes = selectedScopes(); return !scopes.has("create") && !scopes.has("update"); }; const toggleScope = (scopeId: string) => { setSelectedScopes((prev) => { const newSet = new Set(prev); if (newSet.has(scopeId)) { newSet.delete(scopeId); if ( (scopeId === "create" || scopeId === "update") && !newSet.has("create") && !newSet.has("update") ) { newSet.delete("blob"); } } else { newSet.add(scopeId); } return newSet; }); }; const handleConfirm = () => { const scopes = selectedScopes(); const scopeString = buildScopeString(scopes); const scopeIds = scopeIdsToString(scopes); props.onConfirm(scopeString, scopeIds); }; return (
Select permissions
{(scope) => (
toggleScope(scope.id)} />
)}
); };