1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-04 11:17:02 +02:00
unleash.unleash/frontend/src/component/context/ContextFieldUsage/ContextFieldUsage.tsx
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome
to the frontend as well.


![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65)

Added a few `biome-ignore` to speed up the process but we may want to
check and fix them in the future.
2023-10-02 13:25:46 +01:00

101 lines
3.5 KiB
TypeScript

import { Alert, styled } from '@mui/material';
import { formatEditStrategyPath } from 'component/feature/FeatureStrategy/FeatureStrategyEdit/FeatureStrategyEdit';
import { IFeatureStrategy } from 'interfaces/strategy';
import { Link } from 'react-router-dom';
import { formatStrategyName } from 'utils/strategyNames';
import { useStrategiesByContext } from 'hooks/api/getters/useStrategiesByContext/useStrategiesByContext';
import useProjects from 'hooks/api/getters/useProjects/useProjects';
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
const StyledUl = styled('ul')(({ theme }) => ({
listStyle: 'none',
paddingLeft: 0,
}));
const StyledAlert = styled(Alert)(({ theme }) => ({
marginTop: theme.spacing(1),
}));
interface IContextFieldUsageProps {
contextName: string;
}
export const ContextFieldUsage = ({ contextName }: IContextFieldUsageProps) => {
const { strategies } = useStrategiesByContext(contextName);
const { projects } = useProjects();
const { trackEvent } = usePlausibleTracker();
const trackClick = () => {
trackEvent('context-usage', {
props: {
eventType: 'context usage viewed',
},
});
};
const projectsUsed = Array.from(
new Set<string>(
strategies.map(({ projectId }) => projectId!).filter(Boolean),
),
);
const projectList = (
<StyledUl>
{projectsUsed.map((projectId) => (
// biome-ignore lint/a11y/useKeyWithClickEvents: <explanation>
<li key={projectId} onClick={trackClick}>
<Link
to={`/projects/${projectId}`}
target='_blank'
rel='noreferrer'
>
{projects.find(({ id }) => id === projectId)?.name ??
projectId}
</Link>
<ul>
{strategies
?.filter(
(strategy) => strategy.projectId === projectId,
)
.map((strategy) => (
<li key={strategy.id}>
<Link
to={formatEditStrategyPath(
strategy.projectId!,
strategy.featureName!,
strategy.environment!,
strategy.id,
)}
target='_blank'
rel='noreferrer'
>
{strategy.featureName!}{' '}
{formatStrategyNameParens(strategy)}
</Link>
</li>
))}
</ul>
</li>
))}
</StyledUl>
);
if (projectsUsed.length > 0) {
return (
<StyledAlert severity='info'>
Usage of this context field:
{projectList}
</StyledAlert>
);
}
return null;
};
const formatStrategyNameParens = (strategy: IFeatureStrategy): string => {
if (!strategy.strategyName) {
return '';
}
return `(${formatStrategyName(strategy.strategyName)})`;
};