mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-22 22:55:00 +00:00
102 lines
2.5 KiB
Vue
102 lines
2.5 KiB
Vue
<script setup lang="ts">
|
|
import { StoredObject, StoredObjectVersion } from "../../types";
|
|
import { computed, ref, Ref } from "vue";
|
|
import DropFile from "ChillDocStoreAssets/vuejs/DropFileWidget/DropFile.vue";
|
|
import DocumentActionButtonsGroup from "ChillDocStoreAssets/vuejs/DocumentActionButtonsGroup.vue";
|
|
|
|
interface DropFileConfig {
|
|
allowRemove: boolean;
|
|
existingDoc?: StoredObject;
|
|
}
|
|
|
|
const props = withDefaults(defineProps<DropFileConfig>(), {
|
|
allowRemove: false,
|
|
});
|
|
|
|
const emit = defineEmits<{
|
|
(
|
|
e: "addDocument",
|
|
{
|
|
stored_object: StoredObject,
|
|
stored_object_version: StoredObjectVersion,
|
|
file_name: string,
|
|
},
|
|
): void;
|
|
(e: "removeDocument"): void;
|
|
}>();
|
|
|
|
const has_existing_doc = computed<boolean>(() => {
|
|
return props.existingDoc !== undefined && props.existingDoc !== null;
|
|
});
|
|
|
|
const dav_link_expiration = computed<number | undefined>(() => {
|
|
if (props.existingDoc === undefined || props.existingDoc === null) {
|
|
return undefined;
|
|
}
|
|
if (props.existingDoc.status !== "ready") {
|
|
return undefined;
|
|
}
|
|
|
|
return props.existingDoc._links?.dav_link?.expiration;
|
|
});
|
|
|
|
const dav_link_href = computed<string | undefined>(() => {
|
|
if (props.existingDoc === undefined || props.existingDoc === null) {
|
|
return undefined;
|
|
}
|
|
if (props.existingDoc.status !== "ready") {
|
|
return undefined;
|
|
}
|
|
|
|
return props.existingDoc._links?.dav_link?.href;
|
|
});
|
|
|
|
const onAddDocument = ({
|
|
stored_object,
|
|
stored_object_version,
|
|
file_name,
|
|
}: {
|
|
stored_object: StoredObject;
|
|
stored_object_version: StoredObjectVersion;
|
|
file_name: string;
|
|
}): void => {
|
|
emit("addDocument", { stored_object, stored_object_version, file_name });
|
|
};
|
|
|
|
const onRemoveDocument = (e: Event): void => {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
emit("removeDocument");
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<drop-file
|
|
:existingDoc="props.existingDoc"
|
|
@addDocument="onAddDocument"
|
|
></drop-file>
|
|
|
|
<ul class="record_actions">
|
|
<li v-if="has_existing_doc">
|
|
<document-action-buttons-group
|
|
:stored-object="props.existingDoc"
|
|
:can-edit="props.existingDoc?.status === 'ready'"
|
|
:can-download="true"
|
|
:dav-link="dav_link_href"
|
|
:dav-link-expiration="dav_link_expiration"
|
|
/>
|
|
</li>
|
|
<li>
|
|
<button
|
|
v-if="allowRemove"
|
|
class="btn btn-delete"
|
|
@click="onRemoveDocument($event)"
|
|
></button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped lang="scss"></style>
|