diff --git a/ui/packages/ce/src/api/snapshots/destroySnapshot.js b/ui/packages/ce/src/api/snapshots/destroySnapshot.ts similarity index 84% rename from ui/packages/ce/src/api/snapshots/destroySnapshot.js rename to ui/packages/ce/src/api/snapshots/destroySnapshot.ts index e68699543923c05eb82390fede1438510c97e55c..855a47549cd96348ea27090d337004ad192d91c1 100644 --- a/ui/packages/ce/src/api/snapshots/destroySnapshot.js +++ b/ui/packages/ce/src/api/snapshots/destroySnapshot.ts @@ -7,11 +7,15 @@ import { request } from 'helpers/request' -export const destroySnapshot = async (snapshotId) => { +export const destroySnapshot = async ( + snapshotId: string, + forceDelete: boolean, +) => { const response = await request(`/snapshot/delete`, { method: 'POST', body: JSON.stringify({ snapshotID: snapshotId, + force: forceDelete, }), }) diff --git a/ui/packages/ce/src/api/snapshots/getBranchSnapshots.ts b/ui/packages/ce/src/api/snapshots/getBranchSnapshots.ts index de4029b3c08d2f0d4c7ae921aa240671cfd54845..e4729fc4b352689893799cc78acb07d17b281c45 100644 --- a/ui/packages/ce/src/api/snapshots/getBranchSnapshots.ts +++ b/ui/packages/ce/src/api/snapshots/getBranchSnapshots.ts @@ -6,12 +6,21 @@ */ import { request } from 'helpers/request' +import { + SnapshotDto, + formatSnapshotDto, +} from '@postgres.ai/shared/types/api/entities/snapshot' +import { GetBranchSnapshots } from '@postgres.ai/shared/types/api/endpoints/getBranchSnapshots' -export const getBranchSnapshots = async (branch: string) => { +export const getBranchSnapshots: GetBranchSnapshots = async ( + branch: string, +) => { const response = await request(`/branch/snapshots/${branch}`) return { - response: response.ok ? await response.json() : null, + response: response.ok + ? ((await response.json()) as SnapshotDto[]).map(formatSnapshotDto) + : null, error: response.ok ? null : response, } } diff --git a/ui/packages/ce/src/api/snapshots/getSnapshots.ts b/ui/packages/ce/src/api/snapshots/getSnapshots.ts index d9ae5fb4e7a08be8549f30b3ce6b154154e687de..b26788ebda5df598bcee5650f355a1c29b7deb68 100644 --- a/ui/packages/ce/src/api/snapshots/getSnapshots.ts +++ b/ui/packages/ce/src/api/snapshots/getSnapshots.ts @@ -13,7 +13,8 @@ import { import { request } from 'helpers/request' export const getSnapshots: GetSnapshots = async (req) => { - const response = await request('/snapshots') + const url = `/snapshots${req.branchName ? `?branch=${req.branchName}` : ''}`; + const response = await request(url); return { response: response.ok diff --git a/ui/packages/shared/pages/Branches/Branch/index.tsx b/ui/packages/shared/pages/Branches/Branch/index.tsx index f835661c21cd1c4a09f8cd2321e1a038d2631ac7..4a5510e87ba89139c0d40d6cfd93c0f639703818 100644 --- a/ui/packages/shared/pages/Branches/Branch/index.tsx +++ b/ui/packages/shared/pages/Branches/Branch/index.tsx @@ -337,7 +337,7 @@ export const BranchesPage = observer((props: Props) => { {snapshot.dataStateAt || '-'} - {snapshot.comment ?? '-'} + {snapshot.message ?? '-'} ))} diff --git a/ui/packages/shared/pages/CreateClone/index.tsx b/ui/packages/shared/pages/CreateClone/index.tsx index 0b62c9757c096f389eeb9f2378fb100943990d3b..577edc520b2c85bed374cf1f77813f626312d943 100644 --- a/ui/packages/shared/pages/CreateClone/index.tsx +++ b/ui/packages/shared/pages/CreateClone/index.tsx @@ -49,6 +49,7 @@ export const CreateClone = observer((props: Props) => { const timer = useTimer() const [branchesList, setBranchesList] = useState([]) const [snapshots, setSnapshots] = useState([] as Snapshot[]) + const [isLoadingSnapshots, setIsLoadingSnapshots] = useState(false) // Form. const onSubmit = async (values: FormValues) => { @@ -94,6 +95,7 @@ export const CreateClone = observer((props: Props) => { const fetchData = async () => { try { + setIsLoadingSnapshots(true) await stores.main.load(props.instanceId) const branches = (await stores.main.getBranches()) ?? [] @@ -105,12 +107,15 @@ export const CreateClone = observer((props: Props) => { await fetchBranchSnapshotsData(initiallySelectedBranch) } else { const allSnapshots = stores.main?.snapshots?.data ?? [] - setSnapshots(allSnapshots) + const sortedSnapshots = allSnapshots.slice().sort(compareSnapshotsDesc) + setSnapshots(sortedSnapshots) const [firstSnapshot] = allSnapshots ?? [] formik.setFieldValue('snapshotId', firstSnapshot?.id) } } catch (error) { console.error('Error fetching data:', error) + } finally { + setIsLoadingSnapshots(false) } } @@ -136,7 +141,7 @@ export const CreateClone = observer((props: Props) => { ) // Initial loading spinner. - if (!stores.main.instance) + if (!stores.main.instance || isLoadingSnapshots) return ( <> {headRendered} @@ -217,23 +222,20 @@ export const CreateClone = observer((props: Props) => { } error={Boolean(formik.errors.snapshotId)} items={ - snapshots - .slice() - .sort(compareSnapshotsDesc) - .map((snapshot, i) => { - const isLatest = i === 0 - return { - value: snapshot.id, - children: ( - <> - {snapshot.dataStateAt} - {isLatest && ( - Latest - )} - - ), - } - }) ?? [] + snapshots.map((snapshot, i) => { + const isLatest = i === 0 + return { + value: snapshot.id, + children: ( + <> + {snapshot.dataStateAt} + {isLatest && ( + Latest + )} + + ), + } + }) ?? [] } /> diff --git a/ui/packages/shared/pages/CreateSnapshot/index.tsx b/ui/packages/shared/pages/CreateSnapshot/index.tsx index f2e074a7dadb676bdb7c70fb2f1bece054d00b08..607a6e035822180218d76b63ad35e815718b651d 100644 --- a/ui/packages/shared/pages/CreateSnapshot/index.tsx +++ b/ui/packages/shared/pages/CreateSnapshot/index.tsx @@ -100,7 +100,7 @@ export const CreateSnapshotPage = observer( const clonesList = instance?.instance?.state?.cloning.clones || [] const handleSubmit = async (values: FormValues) => { - await createSnapshot(values.cloneID, values.comment).then((snapshot) => { + await createSnapshot(values.cloneID, values.message).then((snapshot) => { if (snapshot && generateSnapshotPageId(snapshot.snapshotID)) { history.push( `/instance/snapshots/${generateSnapshotPageId( @@ -165,18 +165,18 @@ export const CreateSnapshotPage = observer( : [] } /> - Comment + Message

- Optional comment to be added to the snapshot. + Message to be added to the snapshot.

- formik.setFieldValue('comment', e.target.value) + formik.setFieldValue('message', e.target.value) } />