dgrcorrientes-modulos 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nvmrc +1 -0
- package/.prettierrc.cjs +8 -0
- package/.storybook/main.cjs +11 -0
- package/.storybook/manager-head.html +2 -0
- package/.storybook/manager.cjs +6 -0
- package/.storybook/preview-head.html +3 -0
- package/.storybook/preview.cjs +11 -0
- package/.storybook/themes.cjs +14 -0
- package/README.md +21 -0
- package/StoryBook.txt +19 -0
- package/dist-config.cjs +57 -0
- package/index.html +13 -0
- package/package.json +60 -0
- package/public/elevation.ico +0 -0
- package/public/elevationImage.png +0 -0
- package/public/vite.svg +1 -0
- package/src/App.scss +36 -0
- package/src/App.tsx +34 -0
- package/src/assets/react.svg +1 -0
- package/src/index.js +70 -0
- package/src/index.scss +63 -0
- package/src/index.ts +108 -0
- package/src/main.tsx +11 -0
- package/src/sass/base/_base.scss +50 -0
- package/src/sass/base/_controls.scss +90 -0
- package/src/sass/base/_datepicker.scss +114 -0
- package/src/sass/base/_typo.scss +71 -0
- package/src/sass/base/fonts/SFUIText-Bold.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-BoldItalic.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-Heavy.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-HeavyItalic.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-Light.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-LightItalic.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-Medium.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-MediumItalic.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-Regular.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-RegularItalic.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-Semibold.ttf +0 -0
- package/src/sass/base/fonts/SFUIText-SemiboldItalic.ttf +0 -0
- package/src/sass/bulma/bulma-changes.scss +19 -0
- package/src/sass/bulma/extensions/extensions.sass +1 -0
- package/src/sass/bulma/extensions/steps/bulma-steps.sass +3 -0
- package/src/sass/bulma/extensions/steps/index.sass +421 -0
- package/src/sass/bulma/variables/_variables-bulma.sass +16 -0
- package/src/sass/bulma/variables/components/card.sass +20 -0
- package/src/sass/bulma/variables/components/navbar.sass +50 -0
- package/src/sass/bulma/variables/components/tabs.sass +28 -0
- package/src/sass/bulma/variables/elements/button.sass +46 -0
- package/src/sass/bulma/variables/elements/notification.sass +8 -0
- package/src/sass/bulma/variables/elements/title.sass +20 -0
- package/src/sass/bulma/variables/grid/column.sass +2 -0
- package/src/sass/main.sass +16 -0
- package/src/sass/utilities/_bulma-variables.sass +20 -0
- package/src/sass/utilities/_derived-variables.scss +68 -0
- package/src/sass/utilities/_helpers.scss +70 -0
- package/src/sass/utilities/_variables.scss +147 -0
- package/src/stories/Changelog.stories.tsx +73 -0
- package/src/stories/Components/AssistanceDiary/AssistanceDiary.scss +19 -0
- package/src/stories/Components/AssistanceDiary/AssistanceDiary.stories.tsx +25 -0
- package/src/stories/Components/AssistanceDiary/AssistanceDiary.tsx +57 -0
- package/src/stories/Components/AverageAttended/AverageAttended.scss +39 -0
- package/src/stories/Components/AverageAttended/AverageAttended.stories.tsx +71 -0
- package/src/stories/Components/AverageAttended/AverageAttended.tsx +311 -0
- package/src/stories/Components/Breadcrumb/Breadcrumb.stories.tsx +45 -0
- package/src/stories/Components/Breadcrumb/Breadcrumb.tsx +68 -0
- package/src/stories/Components/Breadcrumb/breadcrumb.scss +82 -0
- package/src/stories/Components/CTA/CTA.scss +76 -0
- package/src/stories/Components/CTA/CTA.stories.tsx +46 -0
- package/src/stories/Components/CTA/CTA.tsx +70 -0
- package/src/stories/Components/Cards/Card CTA/CardCta.stories.tsx +34 -0
- package/src/stories/Components/Cards/Card CTA/CardCta.tsx +81 -0
- package/src/stories/Components/Cards/Card CTA/cardCta.scss +71 -0
- package/src/stories/Components/Cards/Card Expiration/cardExpiration.scss +105 -0
- package/src/stories/Components/Cards/Card Expiration/cardExpiration.stories.tsx +40 -0
- package/src/stories/Components/Cards/Card Expiration/cardExpiration.tsx +95 -0
- package/src/stories/Components/Cards/Card Vertical/CardVertical.stories.tsx +43 -0
- package/src/stories/Components/Cards/Card Vertical/CardVertical.tsx +106 -0
- package/src/stories/Components/Cards/Card Vertical/cardVertical.scss +130 -0
- package/src/stories/Components/Cards/CardActivity/cardActivity.scss +31 -0
- package/src/stories/Components/Cards/CardActivity/cardActivity.stories.tsx +20 -0
- package/src/stories/Components/Cards/CardActivity/cardActivity.tsx +48 -0
- package/src/stories/Components/Cards/CardHorizontal/CardHorizontal.stories.tsx +96 -0
- package/src/stories/Components/Cards/CardHorizontal/CardHorizontal.tsx +94 -0
- package/src/stories/Components/Cards/CardHorizontal/cardHorizontal.scss +65 -0
- package/src/stories/Components/Cards/CardUser/CardUser.stories.tsx +135 -0
- package/src/stories/Components/Cards/CardUser/CardUser.tsx +122 -0
- package/src/stories/Components/Cards/CardUser/cardUser.scss +115 -0
- package/src/stories/Components/Cart/Cart.scss +279 -0
- package/src/stories/Components/Cart/Cart.stories.tsx +350 -0
- package/src/stories/Components/Cart/Cart.tsx +277 -0
- package/src/stories/Components/Collapse/Collapse.scss +339 -0
- package/src/stories/Components/Collapse/Collapse.stories.tsx +766 -0
- package/src/stories/Components/Collapse/Collapse.tsx +451 -0
- package/src/stories/Components/CollapseEdit/CollapseEdit.scss +128 -0
- package/src/stories/Components/CollapseEdit/CollapseEdit.stories.tsx +29 -0
- package/src/stories/Components/CollapseEdit/CollapseEdit.tsx +185 -0
- package/src/stories/Components/CompleteDiary/CompleteDiary.scss +165 -0
- package/src/stories/Components/CompleteDiary/CompleteDiary.stories.tsx +219 -0
- package/src/stories/Components/CompleteDiary/CompleteDiary.tsx +394 -0
- package/src/stories/Components/Dropdown/Dropdown.scss +60 -0
- package/src/stories/Components/Dropdown/Dropdown.stories.tsx +19 -0
- package/src/stories/Components/Dropdown/Dropdown.tsx +99 -0
- package/src/stories/Components/EmptyState/EmptyState.stories.tsx +46 -0
- package/src/stories/Components/EmptyState/EmptyState.tsx +44 -0
- package/src/stories/Components/EmptyState/emptyState.scss +75 -0
- package/src/stories/Components/ErrorPage/ErrorPage.scss +65 -0
- package/src/stories/Components/ErrorPage/ErrorPage.stories.tsx +164 -0
- package/src/stories/Components/ErrorPage/ErrorPage.tsx +107 -0
- package/src/stories/Components/IncomingCall/IncomingCall.scss +27 -0
- package/src/stories/Components/IncomingCall/IncomingCall.stories.tsx +43 -0
- package/src/stories/Components/IncomingCall/IncomingCall.tsx +76 -0
- package/src/stories/Components/ModalConfirm/ModalConfirm.scss +30 -0
- package/src/stories/Components/ModalConfirm/ModalConfirm.stories.tsx +21 -0
- package/src/stories/Components/ModalConfirm/ModalConfirm.tsx +118 -0
- package/src/stories/Components/Pagination/Pagination.scss +42 -0
- package/src/stories/Components/Pagination/Pagination.stories.tsx +25 -0
- package/src/stories/Components/Pagination/Pagination.tsx +143 -0
- package/src/stories/Components/PerformanceAssessment/PerformanceAssessment.scss +26 -0
- package/src/stories/Components/PerformanceAssessment/PerformanceAssessment.stories.tsx +27 -0
- package/src/stories/Components/PerformanceAssessment/PerformanceAssessment.tsx +108 -0
- package/src/stories/Components/ShiftDiary/ShiftDiary.scss +45 -0
- package/src/stories/Components/ShiftDiary/ShiftDiary.stories.tsx +32 -0
- package/src/stories/Components/ShiftDiary/ShiftDiary.tsx +92 -0
- package/src/stories/Components/Stepper/Stepper.stories.tsx +26 -0
- package/src/stories/Components/Stepper/Stepper.tsx +102 -0
- package/src/stories/Components/Stepper/stepper.scss +59 -0
- package/src/stories/Components/Tabs/Tabs.stories.tsx +76 -0
- package/src/stories/Components/Tabs/Tabs.tsx +111 -0
- package/src/stories/Components/Tabs/tabs.scss +118 -0
- package/src/stories/Components/Tooltip/Tooltip.scss +235 -0
- package/src/stories/Components/Tooltip/Tooltip.stories.tsx +125 -0
- package/src/stories/Components/Tooltip/Tooltip.tsx +222 -0
- package/src/stories/Elements/Alert/Alert.stories.tsx +65 -0
- package/src/stories/Elements/Alert/Alert.tsx +49 -0
- package/src/stories/Elements/Alert/alert.scss +189 -0
- package/src/stories/Elements/Badge/Badge.stories.tsx +15 -0
- package/src/stories/Elements/Badge/Badge.tsx +21 -0
- package/src/stories/Elements/Badge/badge.scss +24 -0
- package/src/stories/Elements/Button/Button.stories.tsx +54 -0
- package/src/stories/Elements/Button/Button.tsx +118 -0
- package/src/stories/Elements/Button/button.scss +102 -0
- package/src/stories/Elements/Icon/Icon.stories.tsx +33 -0
- package/src/stories/Elements/Icon/Icon.tsx +57 -0
- package/src/stories/Elements/Icon/icon.scss +15 -0
- package/src/stories/Elements/Icon/icono.svg +1 -0
- package/src/stories/Elements/ProgressBar/ProgressBar.scss +26 -0
- package/src/stories/Elements/ProgressBar/ProgressBar.stories.tsx +19 -0
- package/src/stories/Elements/ProgressBar/ProgressBar.tsx +35 -0
- package/src/stories/Form/Autocomplete/Autocomplete.stories.tsx +55 -0
- package/src/stories/Form/Autocomplete/Autocomplete.tsx +160 -0
- package/src/stories/Form/Autocomplete/autocomplete.scss +311 -0
- package/src/stories/Form/Autocomplete-Prueba/Autocomplete.stories.tsx +50 -0
- package/src/stories/Form/Autocomplete-Prueba/AutocompletePrueba.tsx +83 -0
- package/src/stories/Form/Checkbox/Checkbox.stories.tsx +26 -0
- package/src/stories/Form/Checkbox/Checkbox.tsx +89 -0
- package/src/stories/Form/Checkbox/checkbox.scss +41 -0
- package/src/stories/Form/DatePicker/DatePickerExample.stories.tsx +27 -0
- package/src/stories/Form/DatePicker/DatePickerExample.tsx +65 -0
- package/src/stories/Form/DatePickerComponent/DatePickerComponent.scss +116 -0
- package/src/stories/Form/DatePickerComponent/DatePickerComponent.stories.tsx +37 -0
- package/src/stories/Form/DatePickerComponent/DatePickerComponent.tsx +97 -0
- package/src/stories/Form/Filters/Filters.stories.tsx +84 -0
- package/src/stories/Form/Filters/Filters.tsx +230 -0
- package/src/stories/Form/Filters/filters.scss +261 -0
- package/src/stories/Form/Input/Input.stories.tsx +25 -0
- package/src/stories/Form/Input/Input.tsx +86 -0
- package/src/stories/Form/Input/InputVar.sass +26 -0
- package/src/stories/Form/Input/input.scss +19 -0
- package/src/stories/Form/InputFormControl/Input-form-control.stories.tsx +26 -0
- package/src/stories/Form/InputFormControl/Input-form-control.tsx +48 -0
- package/src/stories/Form/InputFormControl/input-form-control.scss +34 -0
- package/src/stories/Form/Radio/Radio.stories.tsx +19 -0
- package/src/stories/Form/Radio/Radio.tsx +84 -0
- package/src/stories/Form/Radio/radio.scss +19 -0
- package/src/stories/Form/Search/Search.scss +50 -0
- package/src/stories/Form/Search/Search.stories.tsx +26 -0
- package/src/stories/Form/Search/Search.tsx +84 -0
- package/src/stories/Form/Select/Select.stories.tsx +55 -0
- package/src/stories/Form/Select/Select.tsx +121 -0
- package/src/stories/Form/Select/select.scss +303 -0
- package/src/stories/Form/Switch/Switch.stories.tsx +17 -0
- package/src/stories/Form/Switch/Switch.tsx +36 -0
- package/src/stories/Form/Switch/switch.scss +123 -0
- package/src/stories/Form/Textarea/Textarea.stories.tsx +19 -0
- package/src/stories/Form/Textarea/Textarea.tsx +52 -0
- package/src/stories/Form/Textarea/textarea.scss +25 -0
- package/src/stories/Form/UploadFileItem/UploadFileItem.scss +49 -0
- package/src/stories/Form/UploadFileItem/UploadFileItem.stories.tsx +18 -0
- package/src/stories/Form/UploadFileItem/UploadFileItem.tsx +89 -0
- package/src/stories/Form/UploadFiles/UploadFiles.scss +17 -0
- package/src/stories/Form/UploadFiles/UploadFiles.stories.tsx +32 -0
- package/src/stories/Form/UploadFiles/UploadFiles.tsx +177 -0
- package/src/stories/Layout/Footer/Footer.scss +129 -0
- package/src/stories/Layout/Footer/Footer.stories.tsx +101 -0
- package/src/stories/Layout/Footer/Footer.tsx +81 -0
- package/src/stories/Layout/Header/Header.scss +190 -0
- package/src/stories/Layout/Header/Header.stories.tsx +223 -0
- package/src/stories/Layout/Header/Header.tsx +278 -0
- package/src/stories/Layout/HeaderTable/HeaderTable.scss +21 -0
- package/src/stories/Layout/HeaderTable/HeaderTable.stories.tsx +112 -0
- package/src/stories/Layout/HeaderTable/HeaderTable.tsx +72 -0
- package/src/stories/Layout/Sidebar/Sidebar.scss +50 -0
- package/src/stories/Layout/Sidebar/Sidebar.stories.tsx +744 -0
- package/src/stories/Layout/Sidebar/Sidebar.tsx +129 -0
- package/src/stories/Layout/SidebarEmpty/SidebarEmpty.scss +64 -0
- package/src/stories/Layout/SidebarEmpty/SidebarEmpty.stories.tsx +26 -0
- package/src/stories/Layout/SidebarEmpty/SidebarEmpty.tsx +100 -0
- package/src/stories/Layout/Subtitle/Subtitle.scss +88 -0
- package/src/stories/Layout/Subtitle/Subtitle.stories.tsx +46 -0
- package/src/stories/Layout/Subtitle/Subtitle.tsx +108 -0
- package/src/stories/Layout/Title/Title.scss +79 -0
- package/src/stories/Layout/Title/Title.stories.tsx +86 -0
- package/src/stories/Layout/Title/Title.tsx +96 -0
- package/src/stories/Welcome.stories.tsx +111 -0
- package/src/stories/assets/404 Page Not Found _Two Color (1).png +0 -0
- package/src/stories/assets/404 Page Not Found _Two Color.png +0 -0
- package/src/stories/assets/Empty Inbox _Two Color.png +0 -0
- package/src/stories/assets/Loading _Two Color.png +0 -0
- package/src/stories/assets/Notifications_Two Color 1.png +0 -0
- package/src/stories/assets/Online protection_Two Color.png +0 -0
- package/src/stories/assets/Under Constructions _Two Color.png +0 -0
- package/src/stories/assets/bulma.png +0 -0
- package/src/stories/assets/burger.svg +5 -0
- package/src/stories/assets/code-brackets.svg +1 -0
- package/src/stories/assets/colors.svg +1 -0
- package/src/stories/assets/comments.svg +1 -0
- package/src/stories/assets/decor-bg.png +0 -0
- package/src/stories/assets/direction.svg +1 -0
- package/src/stories/assets/e-isologo.svg +4 -0
- package/src/stories/assets/e-isotype.svg +4 -0
- package/src/stories/assets/e-logo_negative.svg +14 -0
- package/src/stories/assets/e-logotype.svg +14 -0
- package/src/stories/assets/flow.svg +1 -0
- package/src/stories/assets/logo_gobierno_corrientes.svg +9 -0
- package/src/stories/assets/logo_rentas_corrientes.svg +10 -0
- package/src/stories/assets/logo_rentas_corrientes_compacto.svg +10 -0
- package/src/stories/assets/plugin.svg +1 -0
- package/src/stories/assets/repo.svg +1 -0
- package/src/stories/assets/stackalt.svg +1 -0
- package/src/stories/assets/storybook.svg +13 -0
- package/src/stories/assets/thumbnail-black.jpg +0 -0
- package/src/stories/assets/thumbnail-black[2].jpg +0 -0
- package/src/stories/assets/thumbnail.jpg +0 -0
- package/src/stories/assets/thumbnail[2].jpg +0 -0
- package/src/stories/changelog.ts +389 -0
- package/src/utils/functions.ts +57 -0
- package/src/vite-env.d.ts +2 -0
- package/static/e-isologo-192.jpg +0 -0
- package/static/e-isologo.svg +4 -0
- package/static/e-logotype.svg +14 -0
- package/static/favicon.ico +0 -0
- package/tsconfig.json +22 -0
- package/tsconfig.node.json +9 -0
- package/vite.config.ts +22 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import {useCallback, useEffect, useState} from 'react';
|
|
2
|
+
import {Badge} from '../../Elements/Badge/Badge';
|
|
3
|
+
import {Icon} from '../../Elements/Icon/Icon';
|
|
4
|
+
import './AverageAttended.scss';
|
|
5
|
+
|
|
6
|
+
export interface IAverageAttended {
|
|
7
|
+
// BASE
|
|
8
|
+
option?: IOptions[];
|
|
9
|
+
option2?: IOptions2[];
|
|
10
|
+
option3?: IOptions3[];
|
|
11
|
+
Call: ICall[];
|
|
12
|
+
|
|
13
|
+
// IS-OPTIONS
|
|
14
|
+
|
|
15
|
+
// EVENTS
|
|
16
|
+
|
|
17
|
+
// GENERIC
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface IOptions {
|
|
21
|
+
status?: string;
|
|
22
|
+
icon: string;
|
|
23
|
+
iconColor?: string;
|
|
24
|
+
amountCall?: number | string;
|
|
25
|
+
minutes?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
labelTop: string;
|
|
28
|
+
labelButtom: string;
|
|
29
|
+
color: string;
|
|
30
|
+
colorText: string;
|
|
31
|
+
colorTextPositive: string;
|
|
32
|
+
}
|
|
33
|
+
export interface IOptions2 {
|
|
34
|
+
status?: string;
|
|
35
|
+
icon: string;
|
|
36
|
+
iconColor?: string;
|
|
37
|
+
amountCall?: number | string;
|
|
38
|
+
minutes?: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
labelTop: string;
|
|
41
|
+
labelButtom: string;
|
|
42
|
+
color: string;
|
|
43
|
+
colorText: string;
|
|
44
|
+
colorTextPositive: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface IOptions3 {
|
|
48
|
+
status?: string;
|
|
49
|
+
icon: string;
|
|
50
|
+
iconColor?: string;
|
|
51
|
+
amountCall?: number | string;
|
|
52
|
+
minutes?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
labelTop: string;
|
|
55
|
+
labelButtom: string;
|
|
56
|
+
color: string;
|
|
57
|
+
colorText: string;
|
|
58
|
+
colorTextPositive: string;
|
|
59
|
+
}
|
|
60
|
+
interface ICall {
|
|
61
|
+
id: number;
|
|
62
|
+
date: Date;
|
|
63
|
+
arrivalTime: Date;
|
|
64
|
+
serviceStartTime?: Date;
|
|
65
|
+
}
|
|
66
|
+
declare global {
|
|
67
|
+
interface Date {
|
|
68
|
+
getWeek(): number;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const AverageAttended = ({option, option2, option3, Call, className}: IAverageAttended) => {
|
|
73
|
+
const [CallThisWeek, setCallThisWeek] = useState<number>(0);
|
|
74
|
+
const [CallLastWeek, setCallLastWeek] = useState<number>(0);
|
|
75
|
+
const [averageCall, setAverageCall] = useState<number>(0);
|
|
76
|
+
const [currentCallWaitingTime, setCurrentCallWaitingTime] = useState<number | null>(null);
|
|
77
|
+
const [currentCallerviceTime, setCurrentCallerviceTime] = useState<number | null>(null);
|
|
78
|
+
const [averageWaitTime, setAverageWaitTime] = useState<number | null>(null);
|
|
79
|
+
const [averageServiceTime, setAverageServiceTime] = useState<number | null>(null);
|
|
80
|
+
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
const currentDate = new Date();
|
|
83
|
+
const currentWeek = currentDate.getWeek();
|
|
84
|
+
const lastWeek = currentWeek - 1;
|
|
85
|
+
|
|
86
|
+
const CallInCurrentWeek = Call.filter(Call => Call.date.getWeek() === currentWeek);
|
|
87
|
+
const CallInLastWeek = Call.filter(Call => Call.date.getWeek() === lastWeek);
|
|
88
|
+
|
|
89
|
+
setCallThisWeek(CallInCurrentWeek.length);
|
|
90
|
+
setCallLastWeek(CallInLastWeek.length);
|
|
91
|
+
|
|
92
|
+
const avgCall = CallInLastWeek.length !== 0 ? (CallInCurrentWeek.length - CallInLastWeek.length) / CallInLastWeek.length : 0;
|
|
93
|
+
const roundedAvgCall = parseFloat(avgCall.toFixed(2));
|
|
94
|
+
|
|
95
|
+
setAverageCall(roundedAvgCall);
|
|
96
|
+
|
|
97
|
+
// Calcular el tiempo de espera y tiempo de servicio de la llamada actual
|
|
98
|
+
const currentCall = Call[Call.length - 1]; // Suponiendo que la última llamada es la actual
|
|
99
|
+
if (currentCall) {
|
|
100
|
+
const now = new Date();
|
|
101
|
+
const arrivalTime = currentCall.arrivalTime;
|
|
102
|
+
const serviceStartTime = currentCall.serviceStartTime || arrivalTime;
|
|
103
|
+
|
|
104
|
+
// Calcular el tiempo de espera
|
|
105
|
+
const waitingTime = (serviceStartTime || now).getTime() - arrivalTime.getTime();
|
|
106
|
+
setCurrentCallWaitingTime(waitingTime / (1000 * 60)); // Convertir a minutos
|
|
107
|
+
|
|
108
|
+
// Calcular el tiempo de servicio
|
|
109
|
+
const serviceTime = now.getTime() - (serviceStartTime || arrivalTime).getTime();
|
|
110
|
+
const totalMinutes = Math.floor(serviceTime / (1000 * 60));
|
|
111
|
+
setCurrentCallerviceTime(totalMinutes); // Convertir a minutos
|
|
112
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
113
|
+
const minutes = totalMinutes % 60;
|
|
114
|
+
|
|
115
|
+
// Calcular el tiempo de servicio y promedio de tiempo de servicio
|
|
116
|
+
const currentWeekServiceTime = calculateServiceTime(CallInCurrentWeek);
|
|
117
|
+
const lastWeekServiceTime = calculateServiceTime(CallInLastWeek);
|
|
118
|
+
const avgServiceTime = calculateAverageServiceTime(
|
|
119
|
+
currentWeekServiceTime,
|
|
120
|
+
lastWeekServiceTime,
|
|
121
|
+
CallInCurrentWeek.length,
|
|
122
|
+
CallInLastWeek.length,
|
|
123
|
+
);
|
|
124
|
+
setAverageServiceTime(avgServiceTime);
|
|
125
|
+
|
|
126
|
+
// Verificar si hay horas para decidir cómo formatear
|
|
127
|
+
} else {
|
|
128
|
+
setCurrentCallWaitingTime(null);
|
|
129
|
+
setCurrentCallerviceTime(null);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Calcular el promedio de minutos de espera respecto a la semana anterior
|
|
133
|
+
const currentWeekWaitTime = calculateWaitTime(CallInCurrentWeek);
|
|
134
|
+
const lastWeekWaitTime = calculateWaitTime(CallInLastWeek);
|
|
135
|
+
const avgWaitTime = calculateAverageWaitTime(currentWeekWaitTime, lastWeekWaitTime, CallInCurrentWeek.length, CallInLastWeek.length);
|
|
136
|
+
setAverageWaitTime(avgWaitTime);
|
|
137
|
+
}, [Call]);
|
|
138
|
+
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
const intervalId = setInterval(() => {
|
|
141
|
+
const currentCall = Call[Call.length - 1];
|
|
142
|
+
if (currentCall && currentCall.serviceStartTime) {
|
|
143
|
+
const now = new Date();
|
|
144
|
+
const serviceTime = now.getTime() - currentCall.serviceStartTime.getTime();
|
|
145
|
+
|
|
146
|
+
setCurrentCallerviceTime(serviceTime / (1000 * 60));
|
|
147
|
+
} else {
|
|
148
|
+
setCurrentCallerviceTime(null);
|
|
149
|
+
}
|
|
150
|
+
}, 1000); // Actualizar cada 1000 ms (1 segundo)
|
|
151
|
+
|
|
152
|
+
return () => clearInterval(intervalId); // Limpiar el intervalo al desmontar el componente
|
|
153
|
+
}, [Call]);
|
|
154
|
+
|
|
155
|
+
const formattedServiceTime =
|
|
156
|
+
currentCallerviceTime !== null
|
|
157
|
+
? `${Math.floor(currentCallerviceTime / 60)}:${(currentCallerviceTime % 60).toFixed(0).padStart(2, '0')}`
|
|
158
|
+
: 'N/A';
|
|
159
|
+
|
|
160
|
+
const formattedWaitingTime =
|
|
161
|
+
currentCallWaitingTime !== null
|
|
162
|
+
? `${Math.floor(currentCallWaitingTime / 60)}:${(currentCallWaitingTime % 60).toFixed(0).padStart(2, '0')}`
|
|
163
|
+
: 'N/A';
|
|
164
|
+
|
|
165
|
+
const formattedAvgWaitTime =
|
|
166
|
+
averageWaitTime !== null ? `${Math.floor(averageWaitTime / 60)}:${(averageWaitTime % 60).toFixed(0).padStart(2, '0')}` : 'N/A';
|
|
167
|
+
|
|
168
|
+
const calculateAverageServiceTime = (
|
|
169
|
+
currentWeekServiceTime: number,
|
|
170
|
+
lastWeekServiceTime: number,
|
|
171
|
+
currentWeekCalls: number,
|
|
172
|
+
lastWeekCalls: number,
|
|
173
|
+
) => {
|
|
174
|
+
const currentWeekDenominator = currentWeekCalls > 0 ? currentWeekCalls : 1;
|
|
175
|
+
const lastWeekDenominator = lastWeekCalls > 0 ? lastWeekCalls : 1;
|
|
176
|
+
// Calcula el promedio en minutos directamente
|
|
177
|
+
const avgServiceTime = (currentWeekServiceTime / currentWeekDenominator - lastWeekServiceTime / lastWeekDenominator) / (1000 * 60);
|
|
178
|
+
const percentage = avgServiceTime / 100;
|
|
179
|
+
|
|
180
|
+
// Redondea avgServiceTime a dos decimales
|
|
181
|
+
const roundedAvgServiceTime = parseFloat(avgServiceTime.toFixed(2));
|
|
182
|
+
|
|
183
|
+
return roundedAvgServiceTime / 100;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const calculateServiceTime = (calls: ICall[]) => {
|
|
187
|
+
return calls.reduce((acc, call) => {
|
|
188
|
+
if (call.serviceStartTime && call.arrivalTime) {
|
|
189
|
+
const serviceTime = new Date().getTime() - call.serviceStartTime.getTime();
|
|
190
|
+
return acc + serviceTime;
|
|
191
|
+
}
|
|
192
|
+
return acc;
|
|
193
|
+
}, 0);
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const calculateWaitTime = (calls: ICall[]) => {
|
|
197
|
+
return calls.reduce((acc, call) => {
|
|
198
|
+
if (call.serviceStartTime && call.arrivalTime) {
|
|
199
|
+
const waitTime = call.serviceStartTime.getTime() - call.arrivalTime.getTime();
|
|
200
|
+
return acc + waitTime;
|
|
201
|
+
}
|
|
202
|
+
return acc;
|
|
203
|
+
}, 0);
|
|
204
|
+
};
|
|
205
|
+
const calculateAverageWaitTime = (
|
|
206
|
+
currentWeekWaitTime: number,
|
|
207
|
+
lastWeekWaitTime: number,
|
|
208
|
+
currentWeekCalls: number,
|
|
209
|
+
lastWeekCalls: number,
|
|
210
|
+
) => {
|
|
211
|
+
const currentWeekDenominator = currentWeekCalls > 0 ? currentWeekCalls : 1;
|
|
212
|
+
const lastWeekDenominator = lastWeekCalls > 0 ? lastWeekCalls : 1;
|
|
213
|
+
// Calcula el promedio en minutos directamente
|
|
214
|
+
const avgWaitTime = (currentWeekWaitTime / currentWeekDenominator - lastWeekWaitTime / lastWeekDenominator) / (1000 * 60);
|
|
215
|
+
|
|
216
|
+
// Redondea avgWaitTime a dos decimales
|
|
217
|
+
const roundedAvgWaitTime = parseFloat(avgWaitTime.toFixed(2));
|
|
218
|
+
|
|
219
|
+
return roundedAvgWaitTime;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
Date.prototype.getWeek = function () {
|
|
223
|
+
var date = new Date(this.getTime());
|
|
224
|
+
date.setHours(0, 0, 0, 0);
|
|
225
|
+
date.setDate(date.getDate() + 4 - (date.getDay() || 7));
|
|
226
|
+
var yearStart = new Date(date.getFullYear(), 0, 1);
|
|
227
|
+
var weekNo = Math.ceil(((date.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
|
|
228
|
+
return weekNo;
|
|
229
|
+
};
|
|
230
|
+
return (
|
|
231
|
+
<div className="elv-component elv-averageAttended">
|
|
232
|
+
<div
|
|
233
|
+
className={['averageAttended box is-flex is-gap-4 is-justify-content-space-between', `${className ? ' ' + className : ''}`].join(
|
|
234
|
+
'',
|
|
235
|
+
)}
|
|
236
|
+
>
|
|
237
|
+
{option?.map(item => (
|
|
238
|
+
<div className="averageAttended__option is-flex is-align-items-center is-fullw">
|
|
239
|
+
<div>
|
|
240
|
+
<Icon icon={item.icon} color={item.iconColor} className="is-size-1" />
|
|
241
|
+
</div>
|
|
242
|
+
<div className="is-flex is-flex-direction-column is-gap-4">
|
|
243
|
+
<div className="averageAttended__colorDark has-text-weight-semibold">{item.status}</div>
|
|
244
|
+
<div className="averageAttended__colorDark has-text-weight-bold is-size-3">{CallThisWeek}</div>
|
|
245
|
+
<div className="is-flex is-align-items-center">
|
|
246
|
+
<Badge
|
|
247
|
+
text={`${averageCall < 0 ? item.labelButtom : item.labelTop}${averageCall.toString()}%`}
|
|
248
|
+
color={item.color}
|
|
249
|
+
colorText={`${averageCall < 0 ? item.colorText : item.colorTextPositive}`}
|
|
250
|
+
className="badge"
|
|
251
|
+
/>
|
|
252
|
+
<p className="ml-3 is-size-14px has-text-grey">{item.description}</p>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
))}
|
|
257
|
+
|
|
258
|
+
{option2?.map(item => (
|
|
259
|
+
<div className="averageAttended__option is-flex is-align-items-center is-fullw">
|
|
260
|
+
<div>
|
|
261
|
+
<Icon icon={item.icon} color={item.iconColor} className="is-size-1" />
|
|
262
|
+
</div>
|
|
263
|
+
<div className="is-flex is-flex-direction-column is-gap-4">
|
|
264
|
+
<div className="averageAttended__colorDark has-text-weight-semibold">{item.status}</div>
|
|
265
|
+
{formattedWaitingTime !== null && (
|
|
266
|
+
<div className="averageAttended__colorDark has-text-weight-bold is-size-3">{`${formattedWaitingTime}${item.amountCall}`}</div>
|
|
267
|
+
)}
|
|
268
|
+
|
|
269
|
+
<div className="is-flex is-align-items-center">
|
|
270
|
+
<Badge
|
|
271
|
+
text={`${averageWaitTime !== null && averageWaitTime < 0 ? item.labelButtom : item.labelTop}${
|
|
272
|
+
averageWaitTime !== null && averageWaitTime.toFixed(1)
|
|
273
|
+
}%`}
|
|
274
|
+
color={item.color}
|
|
275
|
+
colorText={averageWaitTime != null && averageWaitTime < 0 ? item.colorText : item.colorTextPositive}
|
|
276
|
+
className="badge"
|
|
277
|
+
/>
|
|
278
|
+
<p className="ml-3 is-size-14px has-text-grey">{item.description}</p>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
))}
|
|
283
|
+
|
|
284
|
+
{option3?.map(item => (
|
|
285
|
+
<div className="averageAttended__option is-flex is-align-items-center is-fullw">
|
|
286
|
+
<div>
|
|
287
|
+
<Icon icon={item.icon} color={item.iconColor} className="is-size-1" />
|
|
288
|
+
</div>
|
|
289
|
+
<div className="is-flex is-flex-direction-column is-gap-4">
|
|
290
|
+
<div className="averageAttended__colorDark has-text-weight-semibold">{item.status}</div>
|
|
291
|
+
{formattedServiceTime !== null && (
|
|
292
|
+
<div className="averageAttended__colorDark has-text-weight-bold is-size-3">{`${formattedServiceTime}${item.amountCall}`}</div>
|
|
293
|
+
)}
|
|
294
|
+
<div className="is-flex is-align-items-center">
|
|
295
|
+
<Badge
|
|
296
|
+
text={`${averageServiceTime != null && averageServiceTime < 0 ? item.labelButtom : item.labelTop}${
|
|
297
|
+
averageServiceTime != null && averageServiceTime.toFixed(1)
|
|
298
|
+
}%`}
|
|
299
|
+
color={item.color}
|
|
300
|
+
colorText={`${averageServiceTime != null && averageServiceTime < 0 ? item.colorText : item.colorTextPositive}`}
|
|
301
|
+
className="badge"
|
|
302
|
+
/>
|
|
303
|
+
<p className="ml-3 is-size-14px has-text-grey">{item.description}</p>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
))}
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
);
|
|
311
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {ComponentStory, ComponentMeta} from '@storybook/react';
|
|
2
|
+
import {Breadcrumb} from './Breadcrumb';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Components/Breadcrumb',
|
|
6
|
+
component: Breadcrumb,
|
|
7
|
+
args: {
|
|
8
|
+
defaultActiveLabel: 'Label 2',
|
|
9
|
+
items: [
|
|
10
|
+
{label: '', icon: 'fa-solid fa-house', onClick: () => console.log('1er Label Presionado')},
|
|
11
|
+
{label: 'Label 2', onClick: () => console.log('2do Label Presionado')},
|
|
12
|
+
{label: 'Label 3', onClick: () => console.log('3er Label Presionado')},
|
|
13
|
+
{label: 'Label 4', icon: 'fas fa-coffee', onClick: () => console.log('4to Label Presionado')},
|
|
14
|
+
{label: 'Label 5', onClick: () => console.log('5to Label Presionado')},
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
argTypes: {type: {control: 'radio', options: ['not-lined', 'updown-lined', 'outlined', 'outlined-border', 'outlined-border-color']}},
|
|
18
|
+
} as ComponentMeta<typeof Breadcrumb>;
|
|
19
|
+
|
|
20
|
+
const Template: ComponentStory<typeof Breadcrumb> = args => <Breadcrumb {...args} />;
|
|
21
|
+
|
|
22
|
+
export const NotLine = Template.bind({});
|
|
23
|
+
NotLine.args = {
|
|
24
|
+
type: 'not-lined',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const UpDownLine = Template.bind({});
|
|
28
|
+
UpDownLine.args = {
|
|
29
|
+
type: 'updown-lined',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const Outlined = Template.bind({});
|
|
33
|
+
Outlined.args = {
|
|
34
|
+
type: 'outlined',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const OutlinedBorder = Template.bind({});
|
|
38
|
+
OutlinedBorder.args = {
|
|
39
|
+
type: 'outlined-border',
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const OutlinedBorderColor = Template.bind({});
|
|
43
|
+
OutlinedBorderColor.args = {
|
|
44
|
+
type: 'outlined-border-color',
|
|
45
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import {useState} from 'react';
|
|
2
|
+
import './breadcrumb.scss';
|
|
3
|
+
import {shortenText} from '../../../utils/functions';
|
|
4
|
+
|
|
5
|
+
export interface IBreadcrumb extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
|
|
6
|
+
// base
|
|
7
|
+
type: string;
|
|
8
|
+
defaultActiveLabel?: string;
|
|
9
|
+
items: {
|
|
10
|
+
label?: string;
|
|
11
|
+
icon?: any;
|
|
12
|
+
onClick?: () => void;
|
|
13
|
+
}[];
|
|
14
|
+
|
|
15
|
+
// events
|
|
16
|
+
handleActive?: (itemActive: ItemValue) => void;
|
|
17
|
+
|
|
18
|
+
// react
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ItemValue {
|
|
23
|
+
label?: string;
|
|
24
|
+
icon?: any;
|
|
25
|
+
onClick?: () => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const Breadcrumb = ({type, defaultActiveLabel, items, handleActive, className, ...props}: IBreadcrumb) => {
|
|
29
|
+
const itemActive = items.find(item => item.label === defaultActiveLabel);
|
|
30
|
+
const [activeStep, setActiveStep] = useState(itemActive);
|
|
31
|
+
|
|
32
|
+
const handleClick = (item: ItemValue) => {
|
|
33
|
+
setActiveStep(item);
|
|
34
|
+
|
|
35
|
+
if (handleActive) {
|
|
36
|
+
handleActive(item);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (item.onClick) {
|
|
40
|
+
item.onClick();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className="elv-component elv-nav_bc" {...props}>
|
|
46
|
+
<nav aria-label="nav_bc" className={`nav_bc nav_bc--${type} ${className ? className : ''}`}>
|
|
47
|
+
<ol className="bc-list">
|
|
48
|
+
{items.map((item, index) => (
|
|
49
|
+
<li key={item.label} className={`bc-item ${item === activeStep ? 'bc-item--active' : ''}`}>
|
|
50
|
+
<p
|
|
51
|
+
className="bc-item__bc-link"
|
|
52
|
+
onClick={() => {
|
|
53
|
+
handleClick(item);
|
|
54
|
+
}}
|
|
55
|
+
>
|
|
56
|
+
{item.icon && item.icon !== '' && (
|
|
57
|
+
<i className={`${item.icon} item-icon ${item.label && item.label !== '' ? '--and-label' : ''}`}></i>
|
|
58
|
+
)}
|
|
59
|
+
{item.label && item.label !== '' && shortenText(item.label, 25)}
|
|
60
|
+
</p>
|
|
61
|
+
{index < items.length - 1 && <i className="fa-solid fa-chevron-right bc-item__chebron"></i>}
|
|
62
|
+
</li>
|
|
63
|
+
))}
|
|
64
|
+
</ol>
|
|
65
|
+
</nav>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
@import '/src/sass/utilities/variables';
|
|
2
|
+
|
|
3
|
+
/* =========================================== NAV (father div & types) ============================================== */
|
|
4
|
+
.nav_bc {
|
|
5
|
+
display: inline-block;
|
|
6
|
+
min-width: 430px;
|
|
7
|
+
padding-right: 10px;
|
|
8
|
+
padding-left: 5px;
|
|
9
|
+
|
|
10
|
+
&--updown-lined {
|
|
11
|
+
border-top: 1px solid $primary-600;
|
|
12
|
+
border-bottom: 1px solid $primary-600;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&--outlined {
|
|
16
|
+
border: 1px solid $primary-600;
|
|
17
|
+
border-radius: 10px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&--outlined-border {
|
|
21
|
+
border: 1px solid $primary-600;
|
|
22
|
+
border-radius: 25px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&--outlined-border-color {
|
|
26
|
+
background-color: #e7f0ff;
|
|
27
|
+
border: 1px solid $primary-600;
|
|
28
|
+
border-radius: 25px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* =========================================== OL (items list) ============================================== */
|
|
32
|
+
.bc-list {
|
|
33
|
+
display: flex;
|
|
34
|
+
list-style: none;
|
|
35
|
+
flex-wrap: wrap;
|
|
36
|
+
padding-left: 0px;
|
|
37
|
+
margin: 15px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* =========================================== LI (items) ============================================== */
|
|
41
|
+
.bc-item {
|
|
42
|
+
display: flex;
|
|
43
|
+
justify-content: center;
|
|
44
|
+
text-align: center;
|
|
45
|
+
align-items: center;
|
|
46
|
+
color: #737373;
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
|
|
49
|
+
font-size: 14px;
|
|
50
|
+
line-height: 150%;
|
|
51
|
+
|
|
52
|
+
&--active {
|
|
53
|
+
color: $primary-600;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* =========================================== LINK ============================================== */
|
|
57
|
+
&__bc-link {
|
|
58
|
+
align-items: center;
|
|
59
|
+
text-decoration: none;
|
|
60
|
+
text-align: center;
|
|
61
|
+
|
|
62
|
+
&:hover {
|
|
63
|
+
color: $primary-600;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.item-icon {
|
|
67
|
+
font-size: 16px;
|
|
68
|
+
|
|
69
|
+
&.--and-label {
|
|
70
|
+
margin-right: 10px;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* =========================================== CHEBRÓN ============================================== */
|
|
76
|
+
&__chebron {
|
|
77
|
+
color: $text-500;
|
|
78
|
+
margin-left: 15px;
|
|
79
|
+
margin-right: 15px;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
@import '/src/sass/utilities/variables';
|
|
2
|
+
|
|
3
|
+
.elv-cta {
|
|
4
|
+
.cta {
|
|
5
|
+
min-height: 290px;
|
|
6
|
+
min-width: 320px;
|
|
7
|
+
|
|
8
|
+
background-color: $white;
|
|
9
|
+
border: 1px solid $text-300;
|
|
10
|
+
box-shadow: 0px 4px 8px rgba(14, 31, 53, 0.1), 0px 8px 16px rgba(14, 31, 53, 0.16), 0px 16px 28px -1px rgba(14, 31, 53, 0.1);
|
|
11
|
+
border-radius: 22px;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
|
|
14
|
+
&__principal {
|
|
15
|
+
max-width: 265px;
|
|
16
|
+
margin: 53px 48px;
|
|
17
|
+
|
|
18
|
+
.title {
|
|
19
|
+
font-size: 36px;
|
|
20
|
+
min-width: 230px;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&__items {
|
|
25
|
+
margin: 48px;
|
|
26
|
+
margin-left: 0px;
|
|
27
|
+
padding: 30px;
|
|
28
|
+
|
|
29
|
+
@media screen and (max-width: $mobile) {
|
|
30
|
+
margin: 0px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.columns {
|
|
34
|
+
gap: 40px;
|
|
35
|
+
|
|
36
|
+
@media screen and (max-width: 1100px) {
|
|
37
|
+
flex-direction: column;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.item {
|
|
41
|
+
&__icon {
|
|
42
|
+
min-width: 48px;
|
|
43
|
+
height: 48px;
|
|
44
|
+
border-radius: 8px;
|
|
45
|
+
background-color: $primary-100;
|
|
46
|
+
|
|
47
|
+
.fa_icon {
|
|
48
|
+
font-size: 25px;
|
|
49
|
+
color: $text-800;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.svg_icon {
|
|
53
|
+
width: 25px;
|
|
54
|
+
fill: $text-800;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&__description {
|
|
59
|
+
margin-left: 24px;
|
|
60
|
+
color: $primary-600;
|
|
61
|
+
// max-width: 178px;
|
|
62
|
+
|
|
63
|
+
.title {
|
|
64
|
+
margin: 0;
|
|
65
|
+
color: $primary-600;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
p {
|
|
69
|
+
max-width: 100%;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {ComponentStory, ComponentMeta} from '@storybook/react';
|
|
2
|
+
import {CTA} from './CTA';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Components/CTA',
|
|
6
|
+
component: CTA,
|
|
7
|
+
args: {
|
|
8
|
+
title: 'Sugerencias y Quejas',
|
|
9
|
+
button: {
|
|
10
|
+
type: 'button',
|
|
11
|
+
color: 'primary',
|
|
12
|
+
size: 'medium',
|
|
13
|
+
fill: 'outline',
|
|
14
|
+
loading: false,
|
|
15
|
+
disabled: false,
|
|
16
|
+
label: 'Más información',
|
|
17
|
+
trailingIcon: true,
|
|
18
|
+
onClick: () => console.log('Button Clicked'),
|
|
19
|
+
},
|
|
20
|
+
items: [
|
|
21
|
+
{
|
|
22
|
+
icon: {icon: 'fa fa-home'},
|
|
23
|
+
title: 'Sugerencia',
|
|
24
|
+
description:
|
|
25
|
+
'Consejo, idea o propuesta presentada con el propósito de mejorar la prestación de un servicio o producto ofrecido por la D.G.R.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
icon: {icon: 'fa fa-home'},
|
|
29
|
+
title: 'Sugerencia',
|
|
30
|
+
description:
|
|
31
|
+
'Consejo, idea o propuesta presentada con el propósito de mejorar la prestación de un servicio o producto ofrecido por la D.G.R.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
icon: {icon: 'fa fa-home'},
|
|
35
|
+
title: 'Sugerencia',
|
|
36
|
+
description:
|
|
37
|
+
'Consejo, idea o propuesta presentada con el propósito de mejorar la prestación de un servicio o producto ofrecido por la D.G.R.',
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
} as ComponentMeta<typeof CTA>;
|
|
42
|
+
|
|
43
|
+
const Template: ComponentStory<typeof CTA> = args => <CTA {...args} />;
|
|
44
|
+
|
|
45
|
+
export const Standard = Template.bind({});
|
|
46
|
+
Standard.args = {};
|