hippofish/packages/client/src/components/MkNoteSimple.vue

101 lines
1.7 KiB
Vue
Raw Normal View History

<template>
2024-05-07 17:23:19 +02:00
<div
v-show="!deleted"
2024-05-08 19:06:10 +02:00
ref="el"
2024-05-07 17:23:19 +02:00
v-size="{ min: [350, 500] }"
class="yohlumlk"
>
2023-04-08 02:01:42 +02:00
<MkAvatar class="avatar" :user="note.user" />
<div class="main">
<XNoteHeader class="header" :note="note" :mini="true" />
<div class="body">
<MkSubNoteContent class="text" :note="note" />
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import type { entities } from "firefish-js";
2024-05-08 19:06:10 +02:00
import { computed, ref, watch } from "vue";
2023-04-08 02:01:42 +02:00
import XNoteHeader from "@/components/MkNoteHeader.vue";
import MkSubNoteContent from "@/components/MkSubNoteContent.vue";
2024-05-07 17:23:19 +02:00
import { deepClone } from "@/scripts/clone";
import { useNoteCapture } from "@/scripts/use-note-capture";
import { isDeleted } from "@/scripts/note";
2024-05-07 17:23:19 +02:00
const props = defineProps<{
note: entities.Note;
pinned?: boolean;
}>();
2024-05-07 17:23:19 +02:00
const rootEl = ref<HTMLElement | null>(null);
const note = ref(deepClone(props.note));
const deleted = computed(() => isDeleted(note.value.id));
let capture = useNoteCapture({
note,
rootEl,
});
function reload() {
note.value = deepClone(props.note);
capture.close();
capture = useNoteCapture({
note,
rootEl,
});
}
watch(
() => props.note.id,
(o, n) => {
if (o === n) return;
reload();
},
);
</script>
<style lang="scss" scoped>
2020-05-10 09:05:01 +02:00
.yohlumlk {
display: flex;
margin: 0;
padding: 0;
2022-07-13 14:41:06 +02:00
overflow: clip;
font-size: 0.95em;
2021-05-04 14:27:36 +02:00
&.min-width_350px {
> .avatar {
margin: 0 10px 0 0;
width: 44px;
height: 44px;
}
2021-05-04 14:27:36 +02:00
}
2021-05-04 14:27:36 +02:00
&.min-width_500px {
> .avatar {
margin: 0 12px 0 0;
width: 48px;
height: 48px;
}
}
> .avatar {
flex-shrink: 0;
display: block;
margin: 0 10px 0 0;
width: 40px;
height: 40px;
border-radius: 8px;
}
> .main {
flex: 1;
min-width: 0;
> .header {
margin-bottom: 2px;
}
}
}
</style>