diff --git a/frontend/src/lib/fn/date.ts b/frontend/src/lib/fn/date.ts index 66423b3cb..ab0a884d0 100644 --- a/frontend/src/lib/fn/date.ts +++ b/frontend/src/lib/fn/date.ts @@ -44,3 +44,25 @@ export const timeAgo = (inputDate: Date, currentDate: Date): string => { elapsedMilliseconds >= 0 ? "ago" : "from now" }`; }; + +export enum TimeUnit { + DAY = "days", + WEEK = "weeks", + MONTH = "months", + YEAR = "years" +} + +export const convertTimeUnitValueToDays = (unit: TimeUnit, value: number) => { + switch (unit) { + case TimeUnit.DAY: + return value; + case TimeUnit.WEEK: + return value * 7; + case TimeUnit.MONTH: + return value * 30; + case TimeUnit.YEAR: + return value * 365; + default: + throw new Error(`Unknown time unit: ${unit}`); + } +}; diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx index f616c311a..5d5e9d186 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx @@ -37,6 +37,7 @@ import { } from "@app/hooks/api/certificates/constants"; import { CertExtendedKeyUsage, CertKeyUsage } from "@app/hooks/api/certificates/enums"; import { UsePopUpState } from "@app/hooks/usePopUp"; +import { convertTimeUnitValueToDays, TimeUnit } from "@app/lib/fn/date"; type Props = { popUp: UsePopUpState<["pkiSubscriber"]>; @@ -75,7 +76,8 @@ const schema = z [CertExtendedKeyUsage.TIMESTAMPING]: z.boolean().optional() }), enableAutoRenewal: z.boolean().optional().default(false), - autoRenewalPeriodInDays: z.number().min(1).optional() + renewalBefore: z.number().min(1).optional(), + renewalUnit: z.nativeEnum(TimeUnit).optional() }) .required(); @@ -118,7 +120,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { }, extendedKeyUsages: {}, enableAutoRenewal: false, - autoRenewalPeriodInDays: 7 + renewalBefore: 7, + renewalUnit: TimeUnit.DAY } }); @@ -139,7 +142,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { (pkiSubscriber.extendedKeyUsages || []).map((name) => [name, true]) ), enableAutoRenewal: pkiSubscriber.enableAutoRenewal || false, - autoRenewalPeriodInDays: pkiSubscriber.autoRenewalPeriodInDays || 7 + renewalBefore: pkiSubscriber.autoRenewalPeriodInDays || 7, + renewalUnit: TimeUnit.DAY }); } else { reset({ @@ -154,7 +158,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { }, extendedKeyUsages: {}, enableAutoRenewal: false, - autoRenewalPeriodInDays: 7 + renewalBefore: 7, + renewalUnit: TimeUnit.DAY }); } }, [pkiSubscriber, reset]); @@ -174,7 +179,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { keyUsages, extendedKeyUsages, enableAutoRenewal, - autoRenewalPeriodInDays + renewalBefore, + renewalUnit }: FormData) => { try { if (!projectId) return; @@ -212,6 +218,10 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { .map((san) => san.trim()) .filter(Boolean); + const autoRenewalPeriodInDays = enableAutoRenewal + ? convertTimeUnitValueToDays(renewalUnit, renewalBefore) + : undefined; + if (pkiSubscriber) { await updateMutateAsync({ subscriberName: pkiSubscriber.name, @@ -473,35 +483,61 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { onCheckedChange={onChange} className="data-[state=checked]:bg-primary" > - Enable Auto Renewal + Enable Certificate Auto Renewal )} /> {selectedAutoRenewalState && ( - { - return ( +
+ ( onChange(Number(e.target.value))} + {...field} + placeholder="5" type="number" - min="1" - step="1" - placeholder="7" + min={1} + onChange={(e) => onChange(Number(e.target.value))} /> - ); - }} - /> + )} + /> + ( + + + + )} + /> +
)}