parent
c51a4519c8
commit
5fd257cb5f
@ -0,0 +1,108 @@ |
||||
<template> |
||||
<div class="flex flex-col flex-wrap justify-center content-center text-center"> |
||||
<BaseInputText |
||||
v-if="audio" |
||||
v-model="recordName" |
||||
:label="t('Enter filename here')" |
||||
:help-text="recordError" |
||||
:is-invalid="recordError !== ''" |
||||
class="max-w-full self-center mb-4 w-60" |
||||
/> |
||||
|
||||
<audio v-if="audio" class="max-w-full self-center mb-4" controls> |
||||
<source :src="window.URL.createObjectURL(audio)"/> |
||||
</audio> |
||||
|
||||
<AudioRecorder |
||||
ref="audioRecorder" |
||||
:multiple="false" |
||||
:show-buttons="showAudioRecorderButtons" |
||||
:show-recorded-audios="false" |
||||
class="self-center mr-2 mb-4" |
||||
@recorded-audio="processAudio($event)" |
||||
/> |
||||
|
||||
<div v-if="audio" class="flex"> |
||||
<BaseButton |
||||
:label="t('Start recording')" |
||||
type="black" |
||||
icon="restart" |
||||
class="mr-2" |
||||
@click="recordAudio" |
||||
/> |
||||
<BaseButton |
||||
:label="t('Save recorded audio')" |
||||
type="secondary" |
||||
icon="send" |
||||
class="mr-2" |
||||
@click="saveAudio" |
||||
/> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<script setup> |
||||
import {ref} from "vue"; |
||||
import { useStore } from "vuex"; |
||||
import {useI18n} from "vue-i18n"; |
||||
import BaseInputText from "../basecomponents/BaseInputText.vue"; |
||||
import AudioRecorder from "../AudioRecorder.vue"; |
||||
import BaseButton from "../basecomponents/BaseButton.vue"; |
||||
import {RESOURCE_LINK_PUBLISHED} from "../resource_links/visibility"; |
||||
import {useCidReq} from "../../composables/cidReq"; |
||||
|
||||
const {t} = useI18n() |
||||
const queryParams = useCidReq() |
||||
const store = useStore() |
||||
|
||||
const props = defineProps({ |
||||
parentResourceNodeId: { |
||||
type: Object, |
||||
required: true, |
||||
} |
||||
}) |
||||
|
||||
const emit = defineEmits(['document-saved', 'document-not-saved']) |
||||
|
||||
const recordName = ref('') |
||||
const recordError = ref('') |
||||
const audioRecorder = ref(null) |
||||
const showAudioRecorderButtons = ref(true) |
||||
const audio = ref() |
||||
|
||||
const processAudio = (recordedAudio) => { |
||||
audio.value = recordedAudio |
||||
showAudioRecorderButtons.value = false |
||||
} |
||||
|
||||
const recordAudio = () => { |
||||
recordError.value = '' |
||||
audio.value = null |
||||
showAudioRecorderButtons.value = true |
||||
audioRecorder.value.record() |
||||
} |
||||
|
||||
const saveAudio = () => { |
||||
if (recordName.value === '') { |
||||
recordError.value = t('It is necessary a file name before save recorded audio') |
||||
return |
||||
} |
||||
|
||||
let fileName = recordName.value + '.wav'; |
||||
let uploadFile = new File([audio.value], fileName) |
||||
let data = { |
||||
title: fileName, |
||||
filetype: 'file', |
||||
uploadFile: uploadFile, |
||||
parentResourceNodeId: props.parentResourceNodeId, |
||||
resourceLinkList: JSON.stringify([{ |
||||
...queryParams, |
||||
visibility: RESOURCE_LINK_PUBLISHED, |
||||
}]), |
||||
} |
||||
store |
||||
.dispatch("documents/createWithFormData", data) |
||||
.then(() => emit('document-saved')) |
||||
.catch((error) => emit('document-not-saved', error)) |
||||
} |
||||
</script> |
Loading…
Reference in new issue