import * as React from 'react';
import { useState } from 'react';
import { SecurityRequirementModel } from '../../services/models/SecurityRequirement';
import {
AuthHeader,
AuthHeaderColumn,
SecuritiesColumn,
SecurityDetailsStyle,
Wrap,
} from './styled.elements';
import { useStore } from '../StoreBuilder';
import { SecurityHeader } from './SecurityHeader';
import { RequiredScopesRow } from './RequiredScopesRow';
import { AUTH_TYPES } from '../SecuritySchemes/SecuritySchemes';
import { Markdown } from '../Markdown/Markdown';
import { SecurityDetails } from './SecurityDetails';
import { ShelfIcon } from '../../common-elements';
export interface SecurityRequirementsProps {
securities: SecurityRequirementModel[];
}
export function SecurityRequirements(props: SecurityRequirementsProps) {
const store = useStore();
const showSecuritySchemeType = store?.options.showSecuritySchemeType;
const [expanded, setExpanded] = useState(false);
const { securities } = props;
if (!securities?.length || store?.options.hideSecuritySection) {
return null;
}
const operationSecuritySchemes = store?.spec.securitySchemes.schemes.filter(({ id }) => {
return securities.find(security => security.schemes.find(scheme => scheme.id === id));
});
return (
<>
setExpanded(!expanded)}>
Authorizations:
{securities.map((security, idx) => (
))}
{expanded &&
!!operationSecuritySchemes?.length &&
operationSecuritySchemes.map((scheme, idx) => (
{AUTH_TYPES[scheme.type] || scheme.type}: {scheme.id}
}
/>
))}
>
);
}
const LockIcon = () => (
);
function getRequiredScopeSets(id: string, securities: SecurityRequirementModel[]): string[][] {
const allScopes: string[][] = [];
let securitiesLength = securities.length;
while (securitiesLength--) {
const security = securities[securitiesLength];
let schemesLength = security.schemes.length;
while (schemesLength--) {
const scheme = security.schemes[schemesLength];
if (scheme.id === id && Array.isArray(scheme.scopes) && scheme.scopes.length) {
allScopes.unshift(scheme.scopes);
}
}
}
return Array.from(new Set(allScopes));
}