11import { useEffect , useState , type FC } from 'react'
2+ import * as oasis from '@oasisprotocol/client'
3+ import * as oasisRT from '@oasisprotocol/client-rt'
24import { Tabs , TabsContent , TabsList , TabsTrigger } from '@oasisprotocol/ui-library/src/components/ui/tabs'
35import { AppStatusIcon } from '../../../components/AppStatusIcon'
46import { AppMetadata } from './AppMetadata'
@@ -16,6 +18,7 @@ import { UnsavedChanges } from './UnsavedChanges'
1618import { RemoveAppButton } from './RemoveAppButton'
1719import { Dialog , DialogContent } from '@oasisprotocol/ui-library/src/components/ui/dialog'
1820import { HelpWidget } from '../../CreateApp/HelpWidget'
21+ import { AddSecret } from '../../../components/SecretsTable/AddSecret'
1922
2023function setDefaultMetadataViewState ( metadata : RoflAppMetadata | undefined = { } ) : ViewMetadataState {
2124 return {
@@ -66,6 +69,22 @@ export const AppDetails: FC = () => {
6669
6770 const showBlockingOverlay = removeApp . isPending || updateApp . isPending
6871
72+ const handleAddSecret = ( key : string , value : string ) => {
73+ if ( ! roflApp ?. sek ) return
74+
75+ const secretValue = oasisRT . rofl . encryptSecret (
76+ key ,
77+ oasis . misc . fromString ( value ) ,
78+ oasis . misc . fromBase64 ( roflApp . sek ) ,
79+ )
80+
81+ const updatedSecrets = { ...viewSecretsState . secrets , [ key ] : secretValue }
82+ setViewSecretsState ( {
83+ isDirty : true ,
84+ secrets : updatedSecrets ,
85+ } )
86+ }
87+
6988 useEffect ( ( ) => {
7089 if ( roflApp ) {
7190 setViewMetadataState ( {
@@ -183,6 +202,7 @@ export const AppDetails: FC = () => {
183202 setViewSecretsState = { setViewSecretsState }
184203 editEnabled = { editEnabled }
185204 />
205+ < AddSecret disabled = { ! editEnabled } handleAddSecret = { handleAddSecret } />
186206 </ TabsContent >
187207 < TabsContent value = "compose" >
188208 < AppArtifacts
0 commit comments