siam-ui-utils 2.1.9 → 2.1.11
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/eslint.config.js +36 -23
- package/index.d.ts +73 -14
- package/index.html +3 -3
- package/package.json +13 -30
- package/src/App.css +47 -0
- package/src/App.jsx +82 -39
- package/src/CustomSelectInput.jsx +1 -1
- package/src/IntlMessages.jsx +7 -6
- package/src/archivos-adjuntos/dropzone-uploader-dni-digital/index.jsx +152 -0
- package/src/{dropzone-uploader → archivos-adjuntos}/index.jsx +57 -63
- package/src/archivos-adjuntos/simple-line-icons.css +778 -0
- package/src/assets/css/sass/_gogo.style.scss +9012 -0
- package/src/assets/css/sass/_mixins.scss +118 -0
- package/src/assets/css/sass/_plugins.scss +1 -0
- package/src/assets/css/sass/ampf_style.scss +182 -0
- package/src/assets/css/sass/main.scss +11 -0
- package/src/assets/css/sass/plugins/react-table.scss +311 -0
- package/src/assets/css/sass/themes/gogo.light.redruby.scss +40 -0
- package/src/bridges/index.js +1 -0
- package/src/bridges/{index.jsx → with-router-bridge.jsx} +2 -0
- package/src/constants.js +0 -9
- package/src/iconos/icon-button-svg.jsx +2 -1
- package/src/iconos/index.js +2 -3
- package/src/iconos/styled-icon.jsx +1 -1
- package/src/index.css +74 -0
- package/src/index.js +7 -8
- package/src/main.jsx +6 -6
- package/src/tomar-foto/index.jsx +66 -63
- package/src/video-call-room/index.jsx +10 -0
- package/tsconfig.json +24 -25
- package/vite.config.ts +19 -10
- package/.eslintrc +0 -73
- package/.eslintrc.mjs +0 -53
- package/.prettierrc.js +0 -5
- package/.storybook/main.ts +0 -17
- package/.storybook/preview.ts +0 -16
- package/src/dropzone-uploader/DropzoneUploader.stories.tsx +0 -34
- package/src/tomar-foto/TomarFoto.stories.tsx +0 -29
- /package/src/{dropzone-uploader → archivos-adjuntos}/dropzone-uploader.css +0 -0
- /package/{.storybook/css → src/assets/css/vendor}/bootstrap.min.css +0 -0
- /package/{.storybook/css → src/assets/css/vendor}/bootstrap.rtl.only.min.css +0 -0
- /package/src/{constants-svg.js → iconos/constants-svg.js} +0 -0
package/eslint.config.js
CHANGED
|
@@ -1,28 +1,41 @@
|
|
|
1
1
|
import js from '@eslint/js'
|
|
2
2
|
import globals from 'globals'
|
|
3
|
+
import react from 'eslint-plugin-react'
|
|
3
4
|
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
5
|
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
-
import tseslint from 'typescript-eslint'
|
|
6
6
|
|
|
7
|
-
export default
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
7
|
+
export default [
|
|
8
|
+
{ ignores: ['build'] },
|
|
9
|
+
{
|
|
10
|
+
files: ['**/*.{js,jsx,ts,tsx}'],
|
|
11
|
+
languageOptions: {
|
|
12
|
+
ecmaVersion: 2020,
|
|
13
|
+
globals: globals.browser,
|
|
14
|
+
parserOptions: {
|
|
15
|
+
ecmaVersion: 'latest',
|
|
16
|
+
ecmaFeatures: { jsx: true },
|
|
17
|
+
sourceType: 'module',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
settings: { react: { version: '18.3' } },
|
|
21
|
+
plugins: {
|
|
22
|
+
react,
|
|
23
|
+
'react-hooks': reactHooks,
|
|
24
|
+
'react-refresh': reactRefresh,
|
|
25
|
+
},
|
|
26
|
+
rules: {
|
|
27
|
+
...js.configs.recommended.rules,
|
|
28
|
+
...react.configs.recommended.rules,
|
|
29
|
+
...react.configs['jsx-runtime'].rules,
|
|
30
|
+
...reactHooks.configs.recommended.rules,
|
|
31
|
+
'react/jsx-no-target-blank': 'off',
|
|
32
|
+
'react-refresh/only-export-components': [
|
|
33
|
+
'off',
|
|
34
|
+
{ allowConstantExport: true },
|
|
35
|
+
],
|
|
36
|
+
'react/prop-types': 'off',
|
|
37
|
+
'@/no-default-export': 'off',
|
|
38
|
+
'no-unused-vars': 'warn',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
]
|
package/index.d.ts
CHANGED
|
@@ -1,20 +1,79 @@
|
|
|
1
|
-
declare module
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
declare module 'siam-ui-utils' {
|
|
2
|
+
//BRIDGES
|
|
3
|
+
export function withRouter(props);
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
//CUSTOMBOOSTRAP
|
|
6
|
+
export function Colxx(props);
|
|
7
|
+
export function Separator(props);
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
//CUSTOMSELECTINPUT
|
|
10
|
+
export function CustomSelectInput(props);
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
//DROPZONEUploader
|
|
13
|
+
export function DropzoneUploader(props);
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
//DropzoneUploaderDniDigital
|
|
16
|
+
export function DropzoneUploaderDniDigital(props);
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
//INTLMESSAGES
|
|
19
|
+
export function IntlMessages(props);
|
|
20
|
+
|
|
21
|
+
//ICONOS
|
|
22
|
+
export function AnularAyudaIcon(props);
|
|
23
|
+
export function AsesoriaBurbujaButton(props);
|
|
24
|
+
export function AsesoriaBurbujaIcon(props);
|
|
25
|
+
export function AtencionPresencial(props);
|
|
26
|
+
export function AtencionTelefonica(props);
|
|
27
|
+
export function AtencionTurnoTelefonico(props);
|
|
28
|
+
export function AtencionVirtual(props);
|
|
29
|
+
export function BibliotecaBurbujaButton(props);
|
|
30
|
+
export function BibliotecaBurbujaIcon(props);
|
|
31
|
+
export function CancelarTurnoIcon(props);
|
|
32
|
+
export function CodigoVerificacionIcon(props);
|
|
33
|
+
export const passwordEyeSvg;
|
|
34
|
+
export const passwordEyeOpenSvg;
|
|
35
|
+
export const contactoBarraSup;
|
|
36
|
+
export const pagosMenuLateral;
|
|
37
|
+
export const delegacionMenuLateral;
|
|
38
|
+
export const delegacionesVerde;
|
|
39
|
+
export const telefonoCeleste;
|
|
40
|
+
export const mailRojo;
|
|
41
|
+
export const whatAppIcon;
|
|
42
|
+
export const telefonoEmergencia;
|
|
43
|
+
export const telefonoConsulta;
|
|
44
|
+
export const telefonoExequial;
|
|
45
|
+
export const telefonoSalud;
|
|
46
|
+
export const descarga;
|
|
47
|
+
export const descargaOver;
|
|
48
|
+
export const anularAyuda;
|
|
49
|
+
export const continuar;
|
|
50
|
+
export const pdfImage;
|
|
51
|
+
export function CursoAutogestionadoColor(props);
|
|
52
|
+
export function CursoAutogestionado(props);
|
|
53
|
+
export function CursoBurbujaButton(props);
|
|
54
|
+
export function CursoBurbujaIcon(props);
|
|
55
|
+
export function CursoPresencialColor(props);
|
|
56
|
+
export function CursoPresencial(props);
|
|
57
|
+
export function CursoVirtualColor(props);
|
|
58
|
+
export function CursoVirtual(props);
|
|
59
|
+
export function DelegacionesIcon(props);
|
|
60
|
+
export function ForgotDniIcon(props);
|
|
61
|
+
export function ForgotPasswordIcon(props);
|
|
62
|
+
export function IconButtonSvg(props);
|
|
63
|
+
export function LabelTimer(props);
|
|
64
|
+
export function LapizActContactoPerfilButton(props);
|
|
65
|
+
export function Icon(props);
|
|
66
|
+
export function UserIcon(props);
|
|
67
|
+
export function VerificarSinVerificarIcon(props);
|
|
68
|
+
export function VerificarVerificadoIcon(props);
|
|
69
|
+
export function WhatsappIconButton(props);
|
|
70
|
+
|
|
71
|
+
//ICONOS/USER
|
|
72
|
+
export function UserIcon(props);
|
|
73
|
+
|
|
74
|
+
//TOMAR FOTO
|
|
75
|
+
export function TomarFoto(props);
|
|
76
|
+
|
|
77
|
+
//VIDEO CALL ROOM
|
|
78
|
+
export function VideoCallRoom(props);
|
|
20
79
|
}
|
package/index.html
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
1
|
+
<!doctype html><html lang="en">
|
|
3
2
|
<head>
|
|
4
3
|
<meta charset="UTF-8" />
|
|
4
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>Siam - UI - utils</title>
|
|
7
7
|
</head>
|
|
8
8
|
<body>
|
|
9
9
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "siam-ui-utils",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.11",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"ampf-react",
|
|
6
6
|
"ampf-utils",
|
|
7
7
|
"siam-ui-utils"
|
|
8
8
|
],
|
|
9
|
-
"type": "module",
|
|
10
9
|
"author": "Ampf Development Team",
|
|
11
10
|
"license": "MIT",
|
|
12
11
|
"description": "Conjunto de librerias de componentes utiles para AMPF",
|
|
@@ -21,17 +20,12 @@
|
|
|
21
20
|
"moduleResolution": "nodenext",
|
|
22
21
|
"scripts": {
|
|
23
22
|
"start": "vite",
|
|
24
|
-
"publish-npm": "npm publish"
|
|
25
|
-
"storybook": "storybook dev -p 6006",
|
|
26
|
-
"build-storybook": "storybook build"
|
|
23
|
+
"publish-npm": "npm publish"
|
|
27
24
|
},
|
|
28
25
|
"dependencies": {
|
|
29
|
-
"@storybook/cli": "^8.3.2",
|
|
30
26
|
"@types/react-intl": "^3.0.0",
|
|
31
|
-
"
|
|
32
|
-
"eslint-plugin-react-refresh": "^0.4.12",
|
|
27
|
+
"events": "^3.3.0",
|
|
33
28
|
"html5-file-selector": "^2.1.0",
|
|
34
|
-
"init": "^0.1.2",
|
|
35
29
|
"prop-types": "^15.8.1",
|
|
36
30
|
"react": "^18.3.1",
|
|
37
31
|
"react-dropzone-uploader": "^2.11.0",
|
|
@@ -48,40 +42,29 @@
|
|
|
48
42
|
"vite-plugin-commonjs": "^0.10.3"
|
|
49
43
|
},
|
|
50
44
|
"devDependencies": {
|
|
51
|
-
"@
|
|
52
|
-
"@storybook/addon-essentials": "^8.3.2",
|
|
53
|
-
"@storybook/addon-interactions": "^8.3.2",
|
|
54
|
-
"@storybook/addon-links": "^8.3.2",
|
|
55
|
-
"@storybook/addon-onboarding": "^8.3.2",
|
|
56
|
-
"@storybook/blocks": "^8.3.2",
|
|
57
|
-
"@storybook/react": "^8.3.2",
|
|
58
|
-
"@storybook/react-vite": "^8.3.2",
|
|
59
|
-
"@storybook/test": "^8.3.2",
|
|
45
|
+
"@eslint/js": "^9.9.0",
|
|
60
46
|
"@testing-library/dom": "^10.4.0",
|
|
61
47
|
"@testing-library/jest-dom": "^6.4.8",
|
|
62
48
|
"@testing-library/react": "^16.0.0",
|
|
49
|
+
"@types/react": "^18.3.3",
|
|
50
|
+
"@types/react-dom": "^18.3.0",
|
|
63
51
|
"@types/react-router-dom": "^5.3.3",
|
|
64
|
-
"@typescript-eslint/
|
|
65
|
-
"@typescript-eslint/parser": "^5.0.0",
|
|
52
|
+
"@typescript-eslint/parser": "^8.2.0",
|
|
66
53
|
"@vitejs/plugin-react": "^4.3.1",
|
|
67
54
|
"copyfiles": "^2.4.1",
|
|
68
|
-
"eslint": "^
|
|
55
|
+
"eslint": "^9.9.0",
|
|
69
56
|
"eslint-config-airbnb": "^19.0.4",
|
|
70
57
|
"eslint-config-prettier": "^8.8.0",
|
|
71
58
|
"eslint-config-react-app": "^7.0.1",
|
|
72
59
|
"eslint-plugin-import": "^2.27.5",
|
|
73
60
|
"eslint-plugin-jsx-a11y": "^6.7.1",
|
|
74
|
-
"eslint-plugin-prettier": "^
|
|
61
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
75
62
|
"eslint-plugin-react": "^7.33.0",
|
|
76
|
-
"eslint-plugin-
|
|
77
|
-
"
|
|
63
|
+
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
|
|
64
|
+
"eslint-plugin-react-refresh": "^0.4.9",
|
|
65
|
+
"sass-embedded": "^1.79.4",
|
|
78
66
|
"vite": "^5.3.4",
|
|
79
|
-
"vite-plugin-eslint": "^1.1
|
|
67
|
+
"vite-plugin-eslint": "^1.8.1",
|
|
80
68
|
"vitest": "^2.0.5"
|
|
81
|
-
},
|
|
82
|
-
"eslintConfig": {
|
|
83
|
-
"extends": [
|
|
84
|
-
"plugin:storybook/recommended"
|
|
85
|
-
]
|
|
86
69
|
}
|
|
87
70
|
}
|
package/src/App.css
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#root {
|
|
2
|
+
max-width: 1280px;
|
|
3
|
+
margin: 0 auto;
|
|
4
|
+
padding: 2rem;
|
|
5
|
+
text-align: center;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.logo {
|
|
9
|
+
height: 6em;
|
|
10
|
+
padding: 1.5em;
|
|
11
|
+
will-change: filter;
|
|
12
|
+
transition: filter 300ms;
|
|
13
|
+
}
|
|
14
|
+
.logo:hover {
|
|
15
|
+
filter: drop-shadow(0 0 2em #646cffaa);
|
|
16
|
+
}
|
|
17
|
+
.logo.react:hover {
|
|
18
|
+
filter: drop-shadow(0 0 2em #61dafbaa);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@keyframes logo-spin {
|
|
22
|
+
from {
|
|
23
|
+
transform: rotate(0deg);
|
|
24
|
+
}
|
|
25
|
+
to {
|
|
26
|
+
transform: rotate(360deg);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
31
|
+
a:nth-of-type(2) .logo {
|
|
32
|
+
animation: logo-spin infinite 20s linear;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.card {
|
|
37
|
+
padding: 2em;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.read-the-docs {
|
|
41
|
+
color: #888;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
.custom-dropzone-uploader-dni-digital{
|
|
46
|
+
display: flex;
|
|
47
|
+
}
|
package/src/App.jsx
CHANGED
|
@@ -1,43 +1,86 @@
|
|
|
1
|
-
import React, { useState } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Accordion,
|
|
4
|
+
AccordionBody,
|
|
5
|
+
AccordionHeader,
|
|
6
|
+
AccordionItem,
|
|
7
|
+
Modal,
|
|
8
|
+
} from 'reactstrap';
|
|
9
|
+
import { TomarFoto, DropzoneUploader, DropzoneUploaderDniDigital } from './';
|
|
10
|
+
import './index.css';
|
|
11
|
+
import './App.css';
|
|
12
|
+
import './assets/css/vendor/bootstrap.min.css';
|
|
13
|
+
import { VideoCallRoom } from './video-call-room';
|
|
4
14
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
setComponentReference(innerText);
|
|
15
|
+
const App = () => {
|
|
16
|
+
const [open, setOpen] = useState('0');
|
|
17
|
+
const toggle = (id) => {
|
|
18
|
+
if (open === id) {
|
|
19
|
+
setOpen();
|
|
20
|
+
} else {
|
|
21
|
+
setOpen(id);
|
|
13
22
|
}
|
|
23
|
+
};
|
|
14
24
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
25
|
+
return (
|
|
26
|
+
<div>
|
|
27
|
+
<Accordion open={open} toggle={toggle}>
|
|
28
|
+
<AccordionItem>
|
|
29
|
+
<AccordionHeader targetId="1">Tomar Foto</AccordionHeader>
|
|
30
|
+
<AccordionBody accordionId="1">
|
|
31
|
+
<TomarFoto isMobile={true} />
|
|
32
|
+
<DropzoneUploader
|
|
33
|
+
totalFiles={4}
|
|
34
|
+
onChangeFiles={() => alert('onChange')}
|
|
35
|
+
maxFiles={3}
|
|
36
|
+
nameFileLabel="file"
|
|
37
|
+
/>
|
|
38
|
+
</AccordionBody>
|
|
39
|
+
</AccordionItem>
|
|
40
|
+
<AccordionItem>
|
|
41
|
+
<AccordionHeader targetId="2">
|
|
42
|
+
DropzoneUploader Firma Digital
|
|
43
|
+
</AccordionHeader>
|
|
44
|
+
<AccordionBody accordionId="2">
|
|
45
|
+
<DropzoneUploader
|
|
46
|
+
totalFiles={0}
|
|
47
|
+
onChangeFiles={() => {
|
|
48
|
+
console.log('onChange');
|
|
49
|
+
}}
|
|
50
|
+
maxFiles={7}
|
|
51
|
+
nameFileLabel="Subir archivos"
|
|
52
|
+
capture="environment"
|
|
53
|
+
onFilesSelectedSelfie
|
|
54
|
+
/>
|
|
55
|
+
</AccordionBody>
|
|
56
|
+
</AccordionItem>
|
|
57
|
+
<AccordionItem>
|
|
58
|
+
<AccordionHeader targetId="3">
|
|
59
|
+
DropzoneUploader DNI Digital
|
|
60
|
+
</AccordionHeader>
|
|
61
|
+
<AccordionBody accordionId="3">
|
|
62
|
+
<DropzoneUploaderDniDigital
|
|
63
|
+
totalFiles={0}
|
|
64
|
+
maxFiles={2}
|
|
65
|
+
onChangeFiles={() => {
|
|
66
|
+
console.log('onChange');
|
|
67
|
+
}}
|
|
68
|
+
classNames="custom-dropzone-uploader-dni-digital"
|
|
69
|
+
/>
|
|
70
|
+
</AccordionBody>
|
|
71
|
+
</AccordionItem>
|
|
72
|
+
<AccordionItem>
|
|
73
|
+
<AccordionHeader targetId="4">Video Call Room</AccordionHeader>
|
|
74
|
+
<AccordionBody accordionId="4">
|
|
75
|
+
<VideoCallRoom
|
|
76
|
+
url="https://whereby.com/test-ampf-room"
|
|
77
|
+
title="Videollamada de ejemplo"
|
|
78
|
+
/>
|
|
79
|
+
</AccordionBody>
|
|
80
|
+
</AccordionItem>
|
|
81
|
+
</Accordion>
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
42
85
|
|
|
43
|
-
export default App
|
|
86
|
+
export default App;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { components } from 'react-select';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const CustomSelectInput = (props) => {
|
|
5
5
|
const customProps = { ...props };
|
|
6
6
|
delete customProps.autoCorrect;
|
|
7
7
|
delete customProps.autoCapitalize;
|
package/src/IntlMessages.jsx
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { FormattedMessage, injectIntl } from 'react-intl'
|
|
3
|
-
const _InjectMassage = (props) => <FormattedMessage {...props} />
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FormattedMessage, injectIntl } from 'react-intl';
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const InjectMassage = (props) => <FormattedMessage {...props} />;
|
|
5
|
+
|
|
6
|
+
export default injectIntl(InjectMassage, {
|
|
7
|
+
withRef: false,
|
|
8
|
+
});
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/* eslint-disable react/prop-types */
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Button } from 'reactstrap';
|
|
4
|
+
import { getDroppedOrSelectedFiles } from 'html5-file-selector';
|
|
5
|
+
import Dropzone from 'react-dropzone-uploader';
|
|
6
|
+
import 'react-dropzone-uploader/dist/styles.css';
|
|
7
|
+
import { pdfImage, IconButtonSvg } from '../../iconos';
|
|
8
|
+
import '../dropzone-uploader.css';
|
|
9
|
+
|
|
10
|
+
export const DropzoneUploaderDniDigital = ({
|
|
11
|
+
accept = 'image/*, application/pdf',
|
|
12
|
+
classNames = '',
|
|
13
|
+
onChangeFiles,
|
|
14
|
+
totalFiles,
|
|
15
|
+
label = 'Cargar Dni',
|
|
16
|
+
maxFiles = 2,
|
|
17
|
+
maxSize = 2,
|
|
18
|
+
onMaxFileSizeError = () => {
|
|
19
|
+
alert('El archivo supera el tamaño máximo');
|
|
20
|
+
},
|
|
21
|
+
}) => {
|
|
22
|
+
const [files, setFiles] = useState([]);
|
|
23
|
+
|
|
24
|
+
const handleChangeStatus = ({ file }, status) => {
|
|
25
|
+
if (status === 'done') {
|
|
26
|
+
const filesTemp = [...files];
|
|
27
|
+
filesTemp.push(file);
|
|
28
|
+
setFiles(filesTemp);
|
|
29
|
+
onChangeFiles(filesTemp);
|
|
30
|
+
} else if (status === 'removed') {
|
|
31
|
+
const filesTemp = [...files];
|
|
32
|
+
const index = filesTemp.indexOf(file);
|
|
33
|
+
if (index > -1) {
|
|
34
|
+
filesTemp.splice(index, 1);
|
|
35
|
+
}
|
|
36
|
+
setFiles(filesTemp);
|
|
37
|
+
onChangeFiles(filesTemp);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getFilesFromEvent = (e) => {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
getDroppedOrSelectedFiles(e).then((chosenFiles) => {
|
|
44
|
+
resolve(chosenFiles.map((f) => f.fileObject));
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const CustomPreview = ({ fileWithMeta }) => {
|
|
50
|
+
const { meta, remove } = fileWithMeta;
|
|
51
|
+
if (meta.size / (1024 * 1024) > maxSize) {
|
|
52
|
+
onMaxFileSizeError();
|
|
53
|
+
remove();
|
|
54
|
+
}
|
|
55
|
+
return (
|
|
56
|
+
<div
|
|
57
|
+
className="dropzone-upload-previewContainer"
|
|
58
|
+
style={{ width: '100%', display: 'flex', alignItems: 'center' }}
|
|
59
|
+
>
|
|
60
|
+
{meta.type === 'application/pdf' ? (
|
|
61
|
+
<>
|
|
62
|
+
<IconButtonSvg
|
|
63
|
+
className="form-control flex"
|
|
64
|
+
svg={pdfImage}
|
|
65
|
+
svgOver={pdfImage}
|
|
66
|
+
height="1.6rem"
|
|
67
|
+
width="1.6rem"
|
|
68
|
+
title={meta.name}
|
|
69
|
+
/>
|
|
70
|
+
<p style={{ paddingRight: '1rem' }}>
|
|
71
|
+
{meta.name.length > 17
|
|
72
|
+
? meta.name.substring(0, 17) + '...'
|
|
73
|
+
: meta.name}
|
|
74
|
+
</p>
|
|
75
|
+
</>
|
|
76
|
+
) : (
|
|
77
|
+
<>
|
|
78
|
+
<img
|
|
79
|
+
className="dropzone-upload-previewImage mt-1"
|
|
80
|
+
src={meta.previewUrl}
|
|
81
|
+
alt={meta.name}
|
|
82
|
+
style={{
|
|
83
|
+
width: '110px',
|
|
84
|
+
height: '110px',
|
|
85
|
+
objectFit: 'cover',
|
|
86
|
+
marginRight: '0.5rem',
|
|
87
|
+
}}
|
|
88
|
+
/>
|
|
89
|
+
<div className="dropzone-upload-file-name-container">
|
|
90
|
+
<p className="dropzone-upload-file-name" title={meta.name}>
|
|
91
|
+
{meta.name}
|
|
92
|
+
</p>
|
|
93
|
+
</div>
|
|
94
|
+
</>
|
|
95
|
+
)}
|
|
96
|
+
<button
|
|
97
|
+
style={{ marginTop: '0rem' }}
|
|
98
|
+
onClick={remove}
|
|
99
|
+
className="dropzone-upload-delete-btn simple-icon-trash"
|
|
100
|
+
></button>
|
|
101
|
+
</div>
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const Input = ({ accept, onFiles, getFilesFromEvent }) => {
|
|
106
|
+
const text =
|
|
107
|
+
totalFiles > 0 ? `${maxFiles - totalFiles} archivos más` : `${label}`;
|
|
108
|
+
return (
|
|
109
|
+
<>
|
|
110
|
+
<Button
|
|
111
|
+
outline
|
|
112
|
+
block
|
|
113
|
+
size="xs"
|
|
114
|
+
className="mt-5 ml-5"
|
|
115
|
+
onClick={() => document.getElementById('fileInput').click()}
|
|
116
|
+
>
|
|
117
|
+
{text}
|
|
118
|
+
<input
|
|
119
|
+
id="fileInput"
|
|
120
|
+
style={{ display: 'none' }}
|
|
121
|
+
type="file"
|
|
122
|
+
accept={accept}
|
|
123
|
+
multiple
|
|
124
|
+
onChange={(e) => {
|
|
125
|
+
getFilesFromEvent(e).then((chosenFiles) => {
|
|
126
|
+
onFiles(chosenFiles);
|
|
127
|
+
});
|
|
128
|
+
}}
|
|
129
|
+
/>
|
|
130
|
+
</Button>
|
|
131
|
+
</>
|
|
132
|
+
);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<div className={classNames}>
|
|
137
|
+
<Dropzone
|
|
138
|
+
disableUpload={false}
|
|
139
|
+
maxFiles={totalFiles < maxFiles ? maxFiles : 0}
|
|
140
|
+
maxSize={maxSize} // en megas
|
|
141
|
+
InputComponent={Input}
|
|
142
|
+
PreviewComponent={CustomPreview}
|
|
143
|
+
classNames={{ dropzone: 'dropzone-upload-frame' }}
|
|
144
|
+
onChangeStatus={handleChangeStatus}
|
|
145
|
+
getFilesFromEvent={getFilesFromEvent}
|
|
146
|
+
accept={accept}
|
|
147
|
+
/>
|
|
148
|
+
</div>
|
|
149
|
+
);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export default DropzoneUploaderDniDigital;
|