Restructure omni services and add Chatwoot research snapshot

This commit is contained in:
Ruslan Bakiev
2026-02-21 11:11:27 +07:00
parent edea7a0034
commit b73babbbf6
7732 changed files with 978203 additions and 32 deletions

View File

@@ -0,0 +1,55 @@
<script>
import { BUS_EVENTS } from 'shared/constants/busEvents';
import SnackbarItem from './Item.vue';
import { emitter } from 'shared/helpers/mitt';
export default {
components: { SnackbarItem },
props: {
duration: {
type: Number,
default: 2500,
},
},
data() {
return {
snackbarAlertMessages: [],
};
},
mounted() {
emitter.on(BUS_EVENTS.SHOW_TOAST, this.onNewToastMessage);
},
unmounted() {
emitter.off(BUS_EVENTS.SHOW_TOAST, this.onNewToastMessage);
},
methods: {
onNewToastMessage({ message, action }) {
this.snackbarAlertMessages.push({
key: new Date().getTime(),
message,
action,
});
window.setTimeout(() => {
this.snackbarAlertMessages.splice(0, 1);
}, this.duration);
},
},
};
</script>
<template>
<transition-group
name="toast-fade"
tag="div"
class="fixed left-0 right-0 mx-auto overflow-hidden text-center top-10 z-50 max-w-[40rem]"
>
<SnackbarItem
v-for="snackbarAlertMessage in snackbarAlertMessages"
:key="snackbarAlertMessage.key"
:message="snackbarAlertMessage.message"
:action="snackbarAlertMessage.action"
/>
</transition-group>
</template>

View File

@@ -0,0 +1,32 @@
<script>
export default {
props: {
message: { type: String, default: '' },
action: {
type: Object,
default: () => ({}),
},
},
computed: {
isActionPresent() {
return this.action && this.action.message;
},
},
};
</script>
<template>
<div
class="bg-n-slate-12 dark:bg-n-slate-7 rounded-md drop-shadow-md mb-4 max-w-[40rem] inline-flex items-center min-w-[22rem] py-3 px-4"
:class="isActionPresent ? 'justify-between' : 'justify-center'"
>
<div class="text-sm font-medium text-white">
{{ message }}
</div>
<div v-if="isActionPresent" class="ml-4">
<router-link v-if="action.type == 'link'" :to="action.to" class="">
{{ action.message }}
</router-link>
</div>
</div>
</template>