1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-28 17:55:15 +02:00
unleash.unleash/frontend/src/component/strategies/CreateStrategy/CreateStrategy.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

103 lines
4.0 KiB
TypeScript

import { useNavigate } from 'react-router-dom';
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
import useToast from 'hooks/useToast';
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
import { useStrategyForm } from '../hooks/useStrategyForm';
import { StrategyForm } from '../StrategyForm/StrategyForm';
import { CREATE_STRATEGY } from 'component/providers/AccessProvider/permissions';
import useStrategiesApi from 'hooks/api/actions/useStrategiesApi/useStrategiesApi';
import { useStrategies } from 'hooks/api/getters/useStrategies/useStrategies';
import { formatUnknownError } from 'utils/formatUnknownError';
import { CreateButton } from 'component/common/CreateButton/CreateButton';
import { GO_BACK } from 'constants/navigate';
import { CustomStrategyInfo } from '../CustomStrategyInfo/CustomStrategyInfo';
export const CreateStrategy = () => {
const { setToastData, setToastApiError } = useToast();
const { uiConfig } = useUiConfig();
const navigate = useNavigate();
const {
strategyName,
strategyDesc,
params,
setParams,
setStrategyName,
setStrategyDesc,
getStrategyPayload,
validateStrategyName,
validateParams,
clearErrors,
setErrors,
errors,
} = useStrategyForm();
const { createStrategy, loading } = useStrategiesApi();
const { refetchStrategies } = useStrategies();
const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
clearErrors();
e.preventDefault();
const validName = validateStrategyName();
if (validName && validateParams()) {
const payload = getStrategyPayload();
try {
await createStrategy(payload);
refetchStrategies();
navigate(`/strategies/${strategyName}`);
setToastData({
title: 'Strategy created',
text: 'Successfully created strategy',
confetti: true,
type: 'success',
});
} catch (e: unknown) {
setToastApiError(formatUnknownError(e));
}
}
};
const formatApiCode = () => {
return `curl --location --request POST '${uiConfig.unleashUrl}/api/admin/strategies' \\
--header 'Authorization: INSERT_API_KEY' \\
--header 'Content-Type: application/json' \\
--data-raw '${JSON.stringify(getStrategyPayload(), undefined, 2)}'`;
};
const handleCancel = () => {
navigate(GO_BACK);
};
return (
<FormTemplate
loading={loading}
title='Create strategy type'
description="The strategy type and the parameters will be selectable when adding an activation strategy to a toggle in the environments.
The parameter defines the type of activation strategy. E.g. you can create a type 'Teams' and add a parameter 'List'. Then it's easy to add team names to the activation strategy"
documentationLink='https://docs.getunleash.io/reference/custom-activation-strategies'
documentationLinkLabel='Custom strategies documentation'
formatApiCode={formatApiCode}
>
<CustomStrategyInfo alert />
<StrategyForm
errors={errors}
handleSubmit={handleSubmit}
handleCancel={handleCancel}
strategyName={strategyName}
setStrategyName={setStrategyName}
validateStrategyName={validateStrategyName}
strategyDesc={strategyDesc}
setStrategyDesc={setStrategyDesc}
params={params}
setParams={setParams}
mode='Create'
setErrors={setErrors}
clearErrors={clearErrors}
>
<CreateButton name='strategy' permission={CREATE_STRATEGY}>
Create strategy
</CreateButton>
</StrategyForm>
</FormTemplate>
);
};