diff --git a/src/api/index.ts b/src/api/index.ts index ac39acf..532a675 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -685,6 +685,10 @@ export const deleteAccountTtsCache = (sid: string) => { export const deleteClient = (sid: string) => { return deleteFetch(`${API_CLIENTS}/${sid}`); }; + +export const deleteRecord = (url: string) => { + return deleteFetch(url); +}; /** Named wrappers for `getFetch` */ export const getUser = (sid: string) => { diff --git a/src/containers/internal/views/recent-calls/player.tsx b/src/containers/internal/views/recent-calls/player.tsx index 0daadb3..545f57a 100644 --- a/src/containers/internal/views/recent-calls/player.tsx +++ b/src/containers/internal/views/recent-calls/player.tsx @@ -3,8 +3,8 @@ import React from "react"; import WaveSurfer from "wavesurfer.js"; import { useEffect, useRef, useState } from "react"; import { Icon, P } from "@jambonz/ui-kit"; -import { Icons, ModalClose } from "src/components"; -import { getBlob, getJaegerTrace } from "src/api"; +import { Icons, Modal, ModalClose } from "src/components"; +import { deleteRecord, getBlob, getJaegerTrace } from "src/api"; import { DownloadedBlob, RecentCall } from "src/api/types"; import RegionsPlugin, { Region } from "wavesurfer.js/src/plugin/regions"; import TimelinePlugin from "wavesurfer.js/src/plugin/timeline"; @@ -21,6 +21,7 @@ import { getSpansByNameRegex, getSpansFromJaegerRoot, } from "./utils"; +import { toastError, toastSuccess } from "src/store"; type PlayerProps = { call: RecentCall; @@ -49,6 +50,8 @@ export const Player = ({ call }: PlayerProps) => { const [record, setRecord] = useState(null); + const [deleteRecordUrl, setDeleteRecordUrl] = useState(""); + const drawDtmfRegionForSpan = (s: JaegerSpan, startPoint: JaegerSpan) => { if (waveSufferRef.current) { const r = waveSufferRef.current.regions.list[s.spanId]; @@ -201,6 +204,19 @@ export const Player = ({ call }: PlayerProps) => { } }; + const handleDeleteRecordSubmit = () => { + if (deleteRecordUrl) { + deleteRecord(deleteRecordUrl) + .then(() => { + setDeleteRecordUrl(""); + toastSuccess("Successfully deleted record"); + }) + .catch((error) => { + toastError(error.msg); + }); + } + }; + useEffect(() => { buildWavesufferRegion(); }, [jaegerRoot, isReady]); @@ -314,53 +330,71 @@ export const Player = ({ call }: PlayerProps) => {
{playBackTime}
-
- - +
+
+
+ + - - - - - - + +
+ +
+ + + + + + + +
)} + {deleteRecordUrl && ( + setDeleteRecordUrl("")} + handleSubmit={handleDeleteRecordSubmit} + > +

+ Are you sure you want to delete the record for call{" "} + {call_sid}? +

+
+ )} ); }; diff --git a/src/containers/internal/views/recent-calls/styles.scss b/src/containers/internal/views/recent-calls/styles.scss index 547ae41..104f1fc 100644 --- a/src/containers/internal/views/recent-calls/styles.scss +++ b/src/containers/internal/views/recent-calls/styles.scss @@ -19,6 +19,57 @@ } } +.controll-btn-container { + display: flex; + justify-content: space-between; + position: relative; + padding: 13px; + + &__center { + position: absolute; + left: 50%; + transform: translateX(-50%); + + button:not(:last-child) { + margin-right: ui-vars.$px01; + } + + button { + background-color: transparent; + width: auto; + height: auto; + border: 0; + padding: 0; + } + .ico { + color: ui-vars.$white; + @include mixins.icosize(); + } + } + + &__right { + a:not(:last-child) { + margin-right: ui-vars.$px01; + } + + button { + background-color: transparent; + width: auto; + height: auto; + border: 0; + padding: 0; + } + .ico { + color: ui-vars.$white; + @include mixins.icosize(); + } + } + + &__placeholder { + flex: 1; + } +} + .media-container { border: 1px solid black; border-radius: ui-vars.$px01; @@ -31,18 +82,5 @@ justify-content: center; grid-gap: ui-vars.$px01; margin-top: ui-vars.$px01; - - button { - background-color: transparent; - width: auto; - height: auto; - border: 0; - padding: 0; - } - - .ico { - color: ui-vars.$white; - @include mixins.icosize(); - } } }