diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/CreateReminderForm.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/CreateReminderForm.tsx index 3474e6e88..2014c34b3 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/CreateReminderForm.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/CreateReminderForm.tsx @@ -3,8 +3,6 @@ import { useForm } from "react-hook-form"; import { faClock } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; -import { isValidCron } from "cron-validator"; -import cronstrue from "cronstrue"; import { z } from "zod"; import { Button, FormControl, Input, Modal, ModalContent, TextArea } from "@app/components/v2"; @@ -14,8 +12,7 @@ const ReminderFormSchema = z.object({ days: z .number() .min(1, { message: "Must be at least 1 day" }) - .max(365, { message: "Must be less than 365 days" }), - cron: z.string().refine(isValidCron, { message: "Invalid cron expression" }) + .max(365, { message: "Must be less than 365 days" }) }); export type TReminderFormSchema = z.infer; @@ -37,20 +34,11 @@ export const CreateReminderForm = ({ isOpen, onOpenChange }: ReminderFormProps) }); const daysWatch = watch("days"); - const cronWatch = watch("cron"); const handleFormSubmit = async (data: TReminderFormSchema) => { onOpenChange(false, data); }; - useEffect(() => { - if (!daysWatch) { - setValue("cron", ""); - } else { - setValue("cron", `0 0 */${daysWatch} * *`); - } - }, [daysWatch]); - useEffect(() => { if (isOpen) { reset(); @@ -65,8 +53,8 @@ export const CreateReminderForm = ({ isOpen, onOpenChange }: ReminderFormProps) // ? Or should we be call it something more generic? subTitle={
- Set up a reminder for when this secret should be rotated. Everyone in the workspace will - be notified when the reminder is triggered. + Set up a reminder for when this secret should be rotated. Everyone with access to this + project will be notified when the reminder is triggered.
} > @@ -85,8 +73,10 @@ export const CreateReminderForm = ({ isOpen, onOpenChange }: ReminderFormProps) placeholder="every 5 days" /> - {!!daysWatch && cronWatch && isValidCron(cronWatch) && ( -
{cronstrue.toString(cronWatch)}
+ {!!daysWatch && ( +
+ Every {daysWatch > 1 ? `${daysWatch} days` : "day"} +
)} diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx index 2ac0386d0..9fdd1e3f8 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx @@ -113,7 +113,7 @@ export const SecretItem = memo( const overrideAction = watch("overrideAction"); const hasComment = Boolean(watch("comment")); - const hasReminder = Boolean(watch("reminderCron")); + const hasReminder = Boolean(watch("reminderRepeatDays")); const selectedTags = watch("tags", []); const selectedTagsGroupById = selectedTags.reduce>( @@ -152,7 +152,9 @@ export const SecretItem = memo( } ); setValue("valueOverride", secret?.valueOverride, { shouldDirty: !isUnsavedOverride }); - setValue("reminderCron", secret?.reminderCron, { shouldDirty: !isUnsavedOverride }); + setValue("reminderRepeatDays", secret?.reminderRepeatDays, { + shouldDirty: !isUnsavedOverride + }); setValue("reminderNote", secret?.reminderNote, { shouldDirty: !isUnsavedOverride }); } else { reset(); @@ -194,7 +196,7 @@ export const SecretItem = memo( setCreateReminderFormOpen.toggle(); if (data) { - setValue("reminderCron", data.cron, { shouldDirty: true }); + setValue("reminderRepeatDays", data.days, { shouldDirty: true }); setValue("reminderNote", data.note, { shouldDirty: true }); } }} @@ -390,7 +392,7 @@ export const SecretItem = memo( if (!hasReminder) { setCreateReminderFormOpen.on(); } else { - setValue("reminderCron", null, { shouldDirty: true }); + setValue("reminderRepeatDays", null, { shouldDirty: true }); setValue("reminderNote", null, { shouldDirty: true }); } }} diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx index bd1a4c4e1..7db6037fd 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx @@ -122,7 +122,7 @@ export const SecretListView = ({ { value, comment, - reminderCron, + reminderRepeatDays, reminderNote, tags, skipMultilineEncoding, @@ -131,7 +131,7 @@ export const SecretListView = ({ }: Partial<{ value: string; comment: string; - reminderCron: string | null; + reminderRepeatDays: number | null; reminderNote: string | null; tags: string[]; skipMultilineEncoding: boolean; @@ -163,7 +163,7 @@ export const SecretListView = ({ latestFileKey: decryptFileKey, tags, secretComment: comment, - secretReminderCron: reminderCron, + secretReminderRepeatDays: reminderRepeatDays, secretReminderNote: reminderNote, skipMultilineEncoding, newSecretName: newKey @@ -194,16 +194,33 @@ export const SecretListView = ({ cb?: () => void ) => { const { key: oldKey } = orgSecret; - const { key, value, overrideAction, idOverride, valueOverride, tags, comment, reminderCron, reminderNote } = modSecret; + const { + key, + value, + overrideAction, + idOverride, + valueOverride, + tags, + comment, + reminderRepeatDays, + reminderNote + } = modSecret; const hasKeyChanged = oldKey !== key; const tagIds = tags.map(({ _id }) => _id); const oldTagIds = orgSecret.tags.map(({ _id }) => _id); const isSameTags = JSON.stringify(tagIds) === JSON.stringify(oldTagIds); const isSharedSecUnchanged = - (["key", "value", "comment", "skipMultilineEncoding", "reminderCron", "reminderNote"] as const).every( - (el) => orgSecret[el] === modSecret[el] - ) && isSameTags; + ( + [ + "key", + "value", + "comment", + "skipMultilineEncoding", + "reminderRepeatDays", + "reminderNote" + ] as const + ).every((el) => orgSecret[el] === modSecret[el]) && isSameTags; try { // personal secret change @@ -228,7 +245,7 @@ export const SecretListView = ({ value, tags: tagIds, comment, - reminderCron, + reminderRepeatDays, reminderNote, secretId: orgSecret._id, newKey: hasKeyChanged ? key : undefined, @@ -313,7 +330,7 @@ export const SecretListView = ({