diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretDetaiSidebar.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretDetaiSidebar.tsx index f1b9a4c353..8890174cdb 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretDetaiSidebar.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretDetaiSidebar.tsx @@ -7,6 +7,7 @@ import { faCircleDot, faClock, faPlus, + faShare, faTag } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; @@ -57,6 +58,7 @@ type Props = { ) => Promise; tags: WsTag[]; onCreateTag: () => void; + handleSecretShare: (value: string) => void; }; export const SecretDetailSidebar = ({ @@ -69,7 +71,8 @@ export const SecretDetailSidebar = ({ tags, onCreateTag, environment, - secretPath + secretPath, + handleSecretShare }: Props) => { const { register, @@ -381,7 +384,7 @@ export const SecretDetailSidebar = ({ rows={5} /> -
+
-
+
+ +
+
Version History
{secretVersion?.map(({ createdAt, value, id }, i) => ( diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx index 98a8030203..3726f30575 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx @@ -61,6 +61,7 @@ type Props = { onCreateTag: () => void; environment: string; secretPath: string; + handleSecretShare: () => void; }; export const SecretItem = memo( @@ -75,7 +76,8 @@ export const SecretItem = memo( onCreateTag, onToggleSecretSelect, environment, - secretPath + secretPath, + handleSecretShare }: Props) => { const { currentWorkspace } = useWorkspace(); const { permission } = useProjectPermission(); @@ -420,8 +422,9 @@ export const SecretItem = memo( 0 - ? `Every ${secretReminderRepeatDays} day${Number(secretReminderRepeatDays) > 1 ? "s" : "" - } + ? `Every ${secretReminderRepeatDays} day${ + Number(secretReminderRepeatDays) > 1 ? "s" : "" + } ` : "Reminder" } @@ -461,6 +464,20 @@ export const SecretItem = memo( )} + + + + + + handlePopUpOpen("createSharedSecret", { + value: secret.valueOverride ?? secret.value + }) + } /> ))}
@@ -391,11 +398,18 @@ export const SecretListView = ({ onSaveSecret={handleSaveSecret} tags={wsTags} onCreateTag={() => handlePopUpOpen("createTag")} + handleSecretShare={(value: string) => handlePopUpOpen("createSharedSecret", { value })} /> handlePopUpToggle("createTag", isOpen)} /> + ); }; diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.utils.ts b/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.utils.ts index c80296b7fd..1e1e4c7a8b 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.utils.ts +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.utils.ts @@ -10,6 +10,7 @@ import { faCopy, faEllipsis, faKey, + faShare, faTags } from "@fortawesome/free-solid-svg-icons"; import { z } from "zod"; @@ -66,7 +67,8 @@ export enum FontAwesomeSpriteName { Override = "secret-override", Close = "close", CheckedCircle = "check-circle", - ReplicatedSecretKey = "secret-replicated" + ReplicatedSecretKey = "secret-replicated", + ShareSecret = "share-secret" } // this is an optimization technique @@ -82,5 +84,6 @@ export const FontAwesomeSpriteSymbols = [ { icon: faCodeBranch, symbol: FontAwesomeSpriteName.Override }, { icon: faClose, symbol: FontAwesomeSpriteName.Close }, { icon: faCheckCircle, symbol: FontAwesomeSpriteName.CheckedCircle }, - { icon: faClone, symbol: FontAwesomeSpriteName.ReplicatedSecretKey } + { icon: faClone, symbol: FontAwesomeSpriteName.ReplicatedSecretKey }, + { icon: faShare, symbol: FontAwesomeSpriteName.ShareSecret } ]; diff --git a/frontend/src/views/ShareSecretPage/components/AddShareSecretForm.tsx b/frontend/src/views/ShareSecretPage/components/AddShareSecretForm.tsx index 07a5d2f058..5a97dd9e41 100644 --- a/frontend/src/views/ShareSecretPage/components/AddShareSecretForm.tsx +++ b/frontend/src/views/ShareSecretPage/components/AddShareSecretForm.tsx @@ -6,14 +6,7 @@ import * as yup from "yup"; import { createNotification } from "@app/components/notifications"; import { encryptSymmetric } from "@app/components/utilities/cryptography/crypto"; -import { - Button, - FormControl, - Input, - ModalClose, - Select, - SelectItem -} from "@app/components/v2"; +import { Button, FormControl, Input, ModalClose, Select, SelectItem } from "@app/components/v2"; import { useCreatePublicSharedSecret, useCreateSharedSecret } from "@app/hooks/api/secretSharing"; const schema = yup.object({ @@ -31,7 +24,8 @@ export const AddShareSecretForm = ({ handleSubmit, control, isSubmitting, - setNewSharedSecret + setNewSharedSecret, + isInputDisabled }: { isPublic: boolean; inModal: boolean; @@ -39,6 +33,7 @@ export const AddShareSecretForm = ({ control: any; isSubmitting: boolean; setNewSharedSecret: (value: string) => void; + isInputDisabled?: boolean; }) => { const publicSharedSecretCreator = useCreatePublicSharedSecret(); const privateSharedSecretCreator = useCreateSharedSecret(); @@ -124,12 +119,13 @@ export const AddShareSecretForm = ({ }; return (
-
+
(