vue-wiguet-chatweb 0.1.22 → 0.1.24
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/App.vue.d.ts +2 -0
- package/dist/components/Chat.vue.d.ts +16 -6
- package/dist/components/ChatMessage.vue.d.ts +12 -0
- package/dist/components/DangerIcon.vue.d.ts +1 -1
- package/dist/components/IconAttach.vue.d.ts +2 -0
- package/dist/components/IconChat.vue.d.ts +1 -1
- package/dist/components/IconClose.vue.d.ts +1 -1
- package/dist/components/IconSend.vue.d.ts +1 -1
- package/dist/components/IconTelegram.vue.d.ts +1 -1
- package/dist/components/IconWhatsApp.vue.d.ts +1 -1
- package/dist/components/IconWidget.vue.d.ts +1 -1
- package/dist/components/Loader.vue.d.ts +1 -1
- package/dist/components/LoadingComponent.vue.d.ts +21 -0
- package/dist/components/MessageList.vue.d.ts +12 -6
- package/dist/components/ODialog/IPropsDialog.d.ts +6 -0
- package/dist/components/ODialog/IPropsSidebar.d.ts +14 -0
- package/dist/components/ODialog/ODialog.vue.d.ts +26 -0
- package/dist/components/Widget.vue.d.ts +10 -6
- package/dist/components/sidebar/SidebarHeader.vue.d.ts +36 -0
- package/dist/dto/app.dto.d.ts +9 -1
- package/dist/hooks/useMobile.d.ts +3 -0
- package/dist/index.d.ts +1 -1
- package/dist/resources/constants/message-type.constant.d.ts +8 -0
- package/dist/store/config.d.ts +1 -1
- package/dist/store/index.d.ts +1 -4
- package/dist/style.css +1 -1
- package/dist/vue-wiguet-chatweb.js +3284 -2585
- package/dist/vue-wiguet-chatweb.umd.cjs +17 -7
- package/package.json +7 -7
- package/src/components/Chat.vue +163 -52
- package/src/components/ChatMessage.vue +2 -2
- package/src/components/IconAttach.vue +24 -0
- package/src/components/IconSend.vue +1 -1
- package/src/components/LoadingComponent.vue +111 -0
- package/src/components/MessageList.vue +46 -18
- package/src/components/ODialog/IPropsDialog.ts +10 -0
- package/src/components/ODialog/IPropsSidebar.ts +17 -0
- package/src/components/ODialog/ODialog.vue +82 -0
- package/src/components/sidebar/SidebarHeader.vue +40 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
import type { DrawerProps } from "primevue/drawer";
|
2
|
+
|
3
|
+
export interface IPropsSidebar {
|
4
|
+
modelValue: boolean;
|
5
|
+
dismissable?: boolean;
|
6
|
+
position?: DrawerProps['position'];
|
7
|
+
title?: string;
|
8
|
+
isLoading?: boolean;
|
9
|
+
hideActions?: boolean;
|
10
|
+
hideHeader?: boolean;
|
11
|
+
acceptFn?: () => Promise<boolean>;
|
12
|
+
beforeAcceptFn?: () => Promise<boolean>;
|
13
|
+
disable?: boolean;
|
14
|
+
|
15
|
+
// solo para v-bind
|
16
|
+
'onUpdate:modelValue'?: (args: IPropsSidebar['modelValue'])=> void
|
17
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
<template>
|
2
|
+
<Dialog
|
3
|
+
:visible="propsComponent.modelValue"
|
4
|
+
:dismissable
|
5
|
+
:position
|
6
|
+
@update:visible="(val: boolean) => emit('update:modelValue', val)"
|
7
|
+
class="!w-auto min-w-[20rem] dark:!bg-[var(--theme-background-secondary)]"
|
8
|
+
>
|
9
|
+
<template #container>
|
10
|
+
<LoadingComponent v-if="propsComponent.isLoading || isWorking" />
|
11
|
+
<SidebarHeader v-if="!propsComponent.hideHeader" :title :closeFn="() => emit('update:modelValue', false)" />
|
12
|
+
|
13
|
+
<!-- <Divider class="!m-0 !p-0" /> -->
|
14
|
+
|
15
|
+
<div class="overflow-y-auto m-4 h-full max-h-full">
|
16
|
+
<slot></slot>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<footer v-if="!hideActions" class="flex sm:justify-between gap-16 items-center mx-5 py-5">
|
20
|
+
<Button
|
21
|
+
label="Cancelar"
|
22
|
+
severity="secondary"
|
23
|
+
class="w-full h-[40px] !rounded-2xl pr-5 sm:max-w-48"
|
24
|
+
icon="pi pi-times"
|
25
|
+
outlined
|
26
|
+
@click="() => emit('update:modelValue', false)"
|
27
|
+
></Button>
|
28
|
+
<Button
|
29
|
+
label="Aceptar"
|
30
|
+
:disabled="disable || isLoading"
|
31
|
+
icon="pi pi-check"
|
32
|
+
aria-label="save"
|
33
|
+
class="w-full h-[40px] !rounded-2xl pr-5 sm:max-w-48"
|
34
|
+
@click="onAccept"
|
35
|
+
></Button>
|
36
|
+
</footer>
|
37
|
+
</template>
|
38
|
+
</Dialog>
|
39
|
+
</template>
|
40
|
+
|
41
|
+
<script setup lang="ts">
|
42
|
+
import Dialog from 'primevue/dialog';
|
43
|
+
import { IPropsDialog } from './IPropsDialog';
|
44
|
+
import LoadingComponent from '../LoadingComponent.vue';
|
45
|
+
import SidebarHeader from '../sidebar/SidebarHeader.vue';
|
46
|
+
import { computed, ref } from 'vue';
|
47
|
+
import Button from 'primevue/button';
|
48
|
+
|
49
|
+
const propsComponent = withDefaults(defineProps<IPropsDialog>(), {
|
50
|
+
beforeAcceptFn: async () => true
|
51
|
+
});
|
52
|
+
|
53
|
+
const emit = defineEmits<{
|
54
|
+
'update:modelValue': [visible: boolean];
|
55
|
+
accept: [void];
|
56
|
+
}>();
|
57
|
+
|
58
|
+
const isWorking = ref(false);
|
59
|
+
const isLoading = computed(() => {
|
60
|
+
return isWorking.value || propsComponent.disable || propsComponent.isLoading;
|
61
|
+
});
|
62
|
+
|
63
|
+
async function onAccept() {
|
64
|
+
if (!propsComponent.acceptFn) {
|
65
|
+
emit('accept');
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
|
69
|
+
const isPassed = await propsComponent.beforeAcceptFn();
|
70
|
+
|
71
|
+
if(!isPassed) return;
|
72
|
+
|
73
|
+
isWorking.value = true;
|
74
|
+
const result = await propsComponent.acceptFn?.();
|
75
|
+
isWorking.value = false;
|
76
|
+
|
77
|
+
if(!result) return
|
78
|
+
|
79
|
+
emit('accept')
|
80
|
+
emit('update:modelValue', false);
|
81
|
+
}
|
82
|
+
</script>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<template>
|
2
|
+
<header class="flex justify-between items-center border-b-2 p-2 pl-4 pb-0">
|
3
|
+
<slot name="content">
|
4
|
+
<span class="text-gray-500 dark:text-gray-200 text-xl font-roboto font-medium">
|
5
|
+
{{ props.title }}
|
6
|
+
</span>
|
7
|
+
</slot>
|
8
|
+
<Button
|
9
|
+
icon="pi pi-times"
|
10
|
+
severity="secondary"
|
11
|
+
text
|
12
|
+
rounded
|
13
|
+
aria-label="Cancel"
|
14
|
+
@click="props.closeFn"
|
15
|
+
>
|
16
|
+
<template #icon>
|
17
|
+
<IconClose />
|
18
|
+
</template>
|
19
|
+
</Button>
|
20
|
+
</header>
|
21
|
+
</template>
|
22
|
+
|
23
|
+
<script setup lang="ts">
|
24
|
+
import Button from 'primevue/button';
|
25
|
+
import IconClose from '../IconClose.vue';
|
26
|
+
import { PropType } from 'vue';
|
27
|
+
|
28
|
+
const props = defineProps({
|
29
|
+
closeFn: {
|
30
|
+
type: Function as PropType<(event: Event) => void>,
|
31
|
+
required: true,
|
32
|
+
},
|
33
|
+
title: {
|
34
|
+
type: String,
|
35
|
+
required: false,
|
36
|
+
},
|
37
|
+
});
|
38
|
+
</script>
|
39
|
+
|
40
|
+
<style scoped></style>
|