@ssplib/react-components 0.0.295 → 0.0.296

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.
Files changed (139) hide show
  1. package/components/detalhes/Category.d.ts +1 -0
  2. package/components/detalhes/Category.js +14 -0
  3. package/components/detalhes/Field.d.ts +1 -0
  4. package/components/detalhes/Field.js +42 -0
  5. package/components/detalhes/FieldLabel.d.ts +1 -0
  6. package/components/detalhes/FieldLabel.js +28 -0
  7. package/components/detalhes/File.d.ts +1 -0
  8. package/components/detalhes/File.js +62 -0
  9. package/components/form/checkbox/CheckBox.js +18 -0
  10. package/components/form/checkbox/CheckBoxAdditional.d.ts +1 -0
  11. package/components/form/checkbox/CheckBoxAdditional.js +95 -0
  12. package/components/form/checkbox/CheckBoxWarning.js +43 -0
  13. package/components/form/checkbox/RequiredCheckBoxValidator.d.ts +1 -0
  14. package/components/form/checkbox/RequiredCheckBoxValidator.js +85 -0
  15. package/components/form/date/DatePicker.d.ts +1 -0
  16. package/components/form/date/DatePicker.js +105 -0
  17. package/components/form/date/GenericDatePicker.d.ts +1 -0
  18. package/components/form/date/GenericDatePicker.js +105 -0
  19. package/components/form/date/TimePicker.d.ts +1 -0
  20. package/components/form/date/TimePicker.js +82 -0
  21. package/components/form/file/DropFileUpload.d.ts +1 -0
  22. package/components/form/file/DropFileUpload.js +226 -0
  23. package/components/form/file/FileUpload.d.ts +1 -0
  24. package/components/form/file/FileUpload.js +200 -0
  25. package/components/form/input/ActiveInput.js +33 -0
  26. package/components/form/input/AutoComplete.d.ts +1 -0
  27. package/components/form/input/AutoComplete.js +69 -0
  28. package/components/form/input/FetchAutoComplete.d.ts +1 -0
  29. package/components/form/input/FetchAutoComplete.js +134 -0
  30. package/components/form/input/FixedAutoComplete.d.ts +1 -0
  31. package/components/form/input/FixedAutoComplete.js +83 -0
  32. package/components/form/input/GenericFetchAutoComplete.d.ts +1 -0
  33. package/components/form/input/GenericFetchAutoComplete.js +132 -0
  34. package/components/form/input/GenericInput.js +168 -0
  35. package/components/form/input/GenericMaskInput.js +79 -0
  36. package/components/form/input/GenericMultInput.d.ts +1 -0
  37. package/components/form/input/GenericMultInput.js +67 -0
  38. package/components/form/input/Input.js +168 -0
  39. package/components/form/input/MaskInput.js +78 -0
  40. package/components/form/input/MultInput.d.ts +1 -0
  41. package/components/form/input/MultInput.js +67 -0
  42. package/components/form/input/OtherCheckBox.d.ts +1 -0
  43. package/components/form/input/OtherCheckBox.js +56 -0
  44. package/components/form/stepper/Stepper.js +135 -0
  45. package/components/form/stepper/StepperBlock.js +97 -0
  46. package/components/form/switch/Switch.js +54 -0
  47. package/components/form/switch/ToggleVisibility.d.ts +1 -0
  48. package/components/form/switch/ToggleVisibility.js +61 -0
  49. package/components/form/table/FilterSection.d.ts +1 -0
  50. package/components/form/table/FilterSection.js +217 -0
  51. package/components/form/table/GenericTable.js +1034 -0
  52. package/components/form/table/Table.js +514 -0
  53. package/components/form/table/TableErrorState.js +27 -0
  54. package/components/form/table/TableLoadingState.d.ts +1 -0
  55. package/components/form/table/TableLoadingState.js +39 -0
  56. package/components/form/table/types.js +2 -0
  57. package/components/form/table/utils.d.ts +1 -0
  58. package/components/form/table/utils.js +361 -0
  59. package/components/icons/icons.d.ts +1 -0
  60. package/components/icons/icons.js +24 -0
  61. package/components/map/AnimatedMarker.js +65 -0
  62. package/components/map/DraggableMarker.js +66 -0
  63. package/components/map/Map.js +23 -0
  64. package/components/map/index.d.ts +1 -0
  65. package/components/map/index.js +31 -0
  66. package/components/modal/Modal.d.ts +1 -0
  67. package/components/modal/Modal.js +105 -0
  68. package/components/navbar/NavBar.d.ts +1 -0
  69. package/components/navbar/NavBar.js +171 -0
  70. package/components/navbar/TabNavBar.d.ts +1 -0
  71. package/components/navbar/TabNavBar.js +179 -0
  72. package/components/providers/FormProvider.js +54 -0
  73. package/components/providers/KeycloakAuthProvider.d.ts +1 -0
  74. package/components/providers/KeycloakAuthProvider.js +118 -0
  75. package/components/providers/OAuthProvider.d.ts +1 -0
  76. package/components/providers/OAuthProvider.js +138 -0
  77. package/components/providers/SspComponentsProvider.d.ts +1 -0
  78. package/components/providers/SspComponentsProvider.js +18 -0
  79. package/components/utils/Bt.d.ts +1 -0
  80. package/components/utils/Bt.js +35 -0
  81. package/components/utils/CustomMenu.js +39 -0
  82. package/context/auth.d.ts +1 -0
  83. package/context/auth.js +5 -0
  84. package/context/form.js +5 -0
  85. package/index.d.ts +18 -18
  86. package/index.js +94 -0
  87. package/package.json +1 -1
  88. package/types/auth.js +2 -0
  89. package/types/form.js +31 -0
  90. package/Map-31d95a26.js +0 -2
  91. package/Map-31d95a26.js.map +0 -1
  92. package/Map-644d2f90.js +0 -2
  93. package/Map-644d2f90.js.map +0 -1
  94. package/components/form/input/OptionalInput.d.ts +0 -10
  95. package/components/loading/LinearProgress.d.ts +0 -2
  96. package/components/loading/LoadingScreen.d.ts +0 -7
  97. package/components/providers/GenericFormProvider.d.ts +0 -10
  98. package/components/teste/Teste.d.ts +0 -3
  99. package/decorators/FormBaseDecorator.d.ts +0 -2
  100. package/decorators/GenericFormBaseDecorator.d.ts +0 -2
  101. package/decorators/StepperDecorator.d.ts +0 -2
  102. package/index.cjs +0 -3
  103. package/index.cjs.map +0 -1
  104. package/index.esm.js +0 -3
  105. package/index.esm.js.map +0 -1
  106. package/stories/Autocomplete.stories.d.ts +0 -6
  107. package/stories/CheckBox.stories.d.ts +0 -6
  108. package/stories/CheckBoxWarning.stories.d.ts +0 -6
  109. package/stories/DatePicker.stories.d.ts +0 -6
  110. package/stories/DetalhesCategory.stories.d.ts +0 -6
  111. package/stories/DetalhesField.stories.d.ts +0 -6
  112. package/stories/DetalhesFieldLabel.stories.d.ts +0 -6
  113. package/stories/DetalhesFile.stories.d.ts +0 -6
  114. package/stories/DropFileUpload.stories.d.ts +0 -6
  115. package/stories/ExemploAssitirValorInput.stories.d.ts +0 -7
  116. package/stories/ExemploInputs.stories.d.ts +0 -7
  117. package/stories/ExemploTable.stories.d.ts +0 -1
  118. package/stories/ExemploValoresCompartilhados.stories.d.ts +0 -7
  119. package/stories/FetchAutocomplete.stories.d.ts +0 -6
  120. package/stories/FileUpload.stories.d.ts +0 -6
  121. package/stories/FixedAutocomplete.stories.d.ts +0 -6
  122. package/stories/GenericFetchAutocomplete.stories.d.ts +0 -6
  123. package/stories/GenericInput.stories.d.ts +0 -6
  124. package/stories/GenericTable.stories.d.ts +0 -6
  125. package/stories/Input.stories.d.ts +0 -6
  126. package/stories/LinearProgress.stories.d.ts +0 -6
  127. package/stories/LoadingScreen.stories.d.ts +0 -6
  128. package/stories/Map.stories.d.ts +0 -6
  129. package/stories/MultInput.stories.d.ts +0 -6
  130. package/stories/NavBar.stories.d.ts +0 -6
  131. package/stories/OptionalInput.stories.d.ts +0 -6
  132. package/stories/OtherCheckBox.stories.d.ts +0 -6
  133. package/stories/Stepper.stories.d.ts +0 -6
  134. package/stories/StepperBlock.stories.d.ts +0 -6
  135. package/stories/Switch.stories.d.ts +0 -6
  136. package/stories/Table.stories.d.ts +0 -4
  137. package/stories/TableWithStaticData.stories.d.ts +0 -6
  138. package/stories/Teste.stories.d.ts +0 -6
  139. package/stories/TimePicker.stories.d.ts +0 -6
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const material_1 = require("@mui/material");
41
+ const x_date_pickers_1 = require("@mui/x-date-pickers");
42
+ const AdapterDayjs_1 = require("@mui/x-date-pickers/AdapterDayjs");
43
+ const x_date_pickers_2 = require("@mui/x-date-pickers");
44
+ const dayjs_1 = __importDefault(require("dayjs"));
45
+ require("dayjs/locale/pt-br");
46
+ const lodash_get_1 = __importDefault(require("lodash.get"));
47
+ const lodash_hasin_1 = __importDefault(require("lodash.hasin"));
48
+ const react_1 = __importStar(require("react"));
49
+ const react_hook_form_1 = require("react-hook-form");
50
+ function GenericDatePicker(_a) {
51
+ var _b;
52
+ var { name, required = false, title, xs = 12, sm, md, minDt, defaultValue, persistValue, maxDt } = _a, props = __rest(_a, ["name", "required", "title", "xs", "sm", "md", "minDt", "defaultValue", "persistValue", "maxDt"]);
53
+ const context = (0, react_hook_form_1.useFormContext)();
54
+ const [value, setValue] = (0, react_1.useState)(defaultValue !== undefined ? (0, dayjs_1.default)(defaultValue, 'DD/MM/YYYY') : undefined);
55
+ const handleChange = (newValue) => {
56
+ setValue(undefined);
57
+ };
58
+ (0, react_1.useEffect)(() => {
59
+ if (value === undefined)
60
+ return;
61
+ context.setValue(name, value ? value.format('DD/MM/YYYY') : value);
62
+ }, [value]);
63
+ (0, react_1.useEffect)(() => {
64
+ // Vamos executar o unregister em casos em que não queremos persistir o valor
65
+ if (persistValue)
66
+ return;
67
+ return () => {
68
+ context.unregister(name);
69
+ };
70
+ }, []);
71
+ return (react_1.default.createElement(react_1.default.Fragment, null,
72
+ react_1.default.createElement(material_1.Grid, Object.assign({ item: true }, { xs, sm, md }),
73
+ title && react_1.default.createElement(material_1.InputLabel, { required: required }, title),
74
+ react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { adapterLocale: 'pt-br', dateAdapter: AdapterDayjs_1.AdapterDayjs },
75
+ react_1.default.createElement(x_date_pickers_2.DatePicker, { minDate: (0, dayjs_1.default)(minDt, 'DD/MM/YYYY'), maxDate: (0, dayjs_1.default)(maxDt, 'DD/MM/YYYY'), format: 'DD/MM/YYYY', value: value, onChange: handleChange, disableHighlightToday: true, sx: {
76
+ outline: (0, lodash_get_1.default)(context.formState.errors, name) ? '1px solid #a51c30' : '',
77
+ backgroundColor: 'white',
78
+ width: '100%',
79
+ div: {
80
+ input: {
81
+ paddingX: 2,
82
+ paddingY: 1.05,
83
+ },
84
+ },
85
+ }, inputRef: (params) => (react_1.default.createElement(material_1.TextField, Object.assign({ size: 'small' }, params, context === null || context === void 0 ? void 0 : context.register(name, {
86
+ validate: (v, f) => {
87
+ if (!(0, lodash_hasin_1.default)(f, name)) {
88
+ return true;
89
+ }
90
+ if (!v)
91
+ v = '';
92
+ if (v.length <= 0 && required)
93
+ return 'Este campo é obrigatório';
94
+ if (v.length < 10 && required)
95
+ return 'A data precisa seguir o padrão DD/MM/AAAA';
96
+ if (minDt && !((0, dayjs_1.default)(minDt, 'DD/MM/YYYY').isSame((0, dayjs_1.default)(v, 'DD/MM/YYYY')) || (0, dayjs_1.default)(minDt, 'DD/MM/YYYY').isBefore((0, dayjs_1.default)(v, 'DD/MM/YYYY'))))
97
+ return `A data tem que ser depois de ${minDt} e antes de ${maxDt}`;
98
+ if (maxDt && !((0, dayjs_1.default)(maxDt, 'DD/MM/YYYY').isSame((0, dayjs_1.default)(v, 'DD/MM/YYYY')) || (0, dayjs_1.default)(maxDt, 'DD/MM/YYYY').isAfter((0, dayjs_1.default)(v, 'DD/MM/YYYY'))))
99
+ return 'A data escolhida não é válida';
100
+ },
101
+ shouldUnregister: true,
102
+ }), { fullWidth: true }))) }),
103
+ react_1.default.createElement(material_1.Typography, { sx: { color: '#a51c30', fontSize: 14, paddingLeft: 1 } }, (_b = (0, lodash_get_1.default)(context.formState.errors, name)) === null || _b === void 0 ? void 0 : _b.message)))));
104
+ }
105
+ exports.default = GenericDatePicker;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import 'dayjs/locale/pt-br';
2
3
  export default function TimePicker({ name, required, title, defaultValue, xs, sm, md, }: {
3
4
  name: string;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const material_1 = require("@mui/material");
30
+ const x_date_pickers_1 = require("@mui/x-date-pickers");
31
+ const AdapterDayjs_1 = require("@mui/x-date-pickers/AdapterDayjs");
32
+ const dayjs_1 = __importDefault(require("dayjs"));
33
+ const lodash_get_1 = __importDefault(require("lodash.get"));
34
+ require("dayjs/locale/pt-br");
35
+ const react_1 = __importStar(require("react"));
36
+ const form_1 = require("../../../context/form");
37
+ const lodash_hasin_1 = __importDefault(require("lodash.hasin"));
38
+ function TimePicker({ name, required = false, title, defaultValue = '', xs = 12, sm, md, }) {
39
+ var _a;
40
+ const context = (0, react_1.useContext)(form_1.FormContext);
41
+ const [value, setValue] = (0, react_1.useState)(defaultValue ? (0, dayjs_1.default)(defaultValue, 'HH:mm') : null);
42
+ const handleChange = (newValue) => {
43
+ setValue(newValue);
44
+ };
45
+ (0, react_1.useEffect)(() => {
46
+ context.formSetValue(name, value ? value.format('HH:mm') : value);
47
+ }, [value]);
48
+ (0, react_1.useEffect)(() => {
49
+ return () => {
50
+ context.formUnregister(name);
51
+ };
52
+ }, []);
53
+ return (react_1.default.createElement(material_1.Grid, Object.assign({ item: true }, { xs, sm, md }),
54
+ title && react_1.default.createElement(material_1.InputLabel, { required: required }, title),
55
+ react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { adapterLocale: 'pt-br', dateAdapter: AdapterDayjs_1.AdapterDayjs },
56
+ react_1.default.createElement(x_date_pickers_1.TimePicker, { value: value, ampm: false, onChange: handleChange, sx: {
57
+ outline: (0, lodash_get_1.default)(context.errors, name) ? '1px solid #a51c30' : '',
58
+ backgroundColor: 'white',
59
+ width: '100%',
60
+ div: {
61
+ input: {
62
+ paddingX: 2,
63
+ paddingY: 1.05,
64
+ },
65
+ },
66
+ }, inputRef: (params) => (react_1.default.createElement(material_1.TextField, Object.assign({ size: 'small' }, params, context === null || context === void 0 ? void 0 : context.formRegister(name, {
67
+ validate: (v, f) => {
68
+ if (!(0, lodash_hasin_1.default)(f, name)) {
69
+ return true;
70
+ }
71
+ if (!v)
72
+ v = '';
73
+ if (v.length <= 0 && required)
74
+ return 'Este campo é obrigatório';
75
+ if (v.length < 5 && required)
76
+ return 'A hora precisa seguir o padrão HH:MM';
77
+ },
78
+ shouldUnregister: true,
79
+ }), { fullWidth: true }))) }),
80
+ react_1.default.createElement(material_1.Typography, { sx: { color: '#a51c30', fontSize: 15, paddingLeft: 1 } }, (_a = (0, lodash_get_1.default)(context.errors, name)) === null || _a === void 0 ? void 0 : _a.message))));
81
+ }
82
+ exports.default = TimePicker;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { DropzoneOptions } from 'react-dropzone';
2
3
  export default function DropFileUpload({ name, tipoArquivo, title, required, multiple, apiURL, sizeLimit, xs, sm, md, route, tstToken, dropZoneOptions, }: {
3
4
  name: string;
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const material_1 = require("@mui/material");
30
+ const system_1 = require("@mui/system");
31
+ const axios_1 = __importDefault(require("axios"));
32
+ const lodash_get_1 = __importDefault(require("lodash.get"));
33
+ const react_1 = __importStar(require("react"));
34
+ const react_dropzone_1 = require("react-dropzone");
35
+ const auth_1 = require("../../../context/auth");
36
+ const form_1 = require("../../../context/form");
37
+ const icons_1 = require("../../icons/icons");
38
+ function bytesToMegabytes(bytes) {
39
+ const megabytes = bytes / (1024 * 1024);
40
+ return megabytes;
41
+ }
42
+ function bytesToKBorMB(bytes) {
43
+ const KB = 1024;
44
+ const MB = 1024 * KB;
45
+ if (bytes < MB) {
46
+ const KBValue = bytes / KB;
47
+ return `${KBValue.toFixed(1)}KB`;
48
+ }
49
+ else {
50
+ const MBValue = bytes / MB;
51
+ return `${MBValue.toFixed(1)}MB`;
52
+ }
53
+ }
54
+ function DropFileUpload({ name, tipoArquivo, title, required = false, multiple = false, apiURL, sizeLimit = 4, xs = 12, sm, md, route = '', tstToken = '', dropZoneOptions, }) {
55
+ const { getRootProps, getInputProps } = (0, react_dropzone_1.useDropzone)(Object.assign({ multiple, useFsAccessApi: true, onDrop: (dropFiles) => {
56
+ const fileList = [];
57
+ setProgress(-1);
58
+ dropFiles
59
+ .filter((file) => {
60
+ if (bytesToMegabytes(file.size) > sizeLimit) {
61
+ setErrorMsg(`Por favor, escolha um arquivo com tamanho inferior a ${sizeLimit} MB`);
62
+ setTimeout(() => {
63
+ setErrorMsg('');
64
+ }, 3000);
65
+ return false;
66
+ }
67
+ return true;
68
+ })
69
+ .forEach((file, index) => {
70
+ let id = Date.now() + index;
71
+ // fetch API
72
+ const fd = new FormData();
73
+ fd.append('files', file);
74
+ fd.append('tipoArquivo', tipoArquivo);
75
+ axios_1.default
76
+ .post(apiURL, fd, {
77
+ onUploadProgress: (progressEvent) => {
78
+ const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
79
+ setProgress(percentCompleted);
80
+ if (percentCompleted >= 100) {
81
+ setFiles((f) => [...f, { id: id, name: file.name, loading: true, error: false, file: file, size: file.size }]);
82
+ }
83
+ },
84
+ headers: { Authorization: `Bearer ${tstToken === '' ? (user ? user.token : '') : tstToken}` },
85
+ })
86
+ .then((res) => {
87
+ if (res.status > 200) {
88
+ const fileIdFromApi = (0, lodash_get_1.default)(res.data, route, res.data)[0];
89
+ const fileId = fileIdFromApi['coSeqArquivo'];
90
+ context.setFilesUid((fId) => [
91
+ ...fId,
92
+ {
93
+ CO_SEQ_ARQUIVO: fileId,
94
+ CO_TIPO_ARQUIVO: parseInt(tipoArquivo),
95
+ },
96
+ ]);
97
+ setFilesLoaded((fl) => [...fl, id]);
98
+ const f = {};
99
+ f[id] = fileId;
100
+ setFilesIds((ids) => (Object.assign(Object.assign({}, ids), f)));
101
+ }
102
+ else {
103
+ setProgress(-1);
104
+ removeFile(id);
105
+ }
106
+ })
107
+ .catch((err) => {
108
+ console.log(err);
109
+ setProgress(-1);
110
+ removeFile(id);
111
+ });
112
+ });
113
+ } }, (dropZoneOptions || {})));
114
+ const context = (0, react_1.useContext)(form_1.FormContext);
115
+ const { user } = (0, react_1.useContext)(auth_1.AuthContext);
116
+ const theme = (0, material_1.useTheme)();
117
+ const isSmall = (0, material_1.useMediaQuery)(theme.breakpoints.only('xs'));
118
+ const [progress, setProgress] = (0, react_1.useState)(-1);
119
+ const [files, setFiles] = (0, react_1.useState)([]);
120
+ const [filesLoaded, setFilesLoaded] = (0, react_1.useState)([]);
121
+ const [fileIds, setFilesIds] = (0, react_1.useState)({});
122
+ // const [filesError, setFilesError] = useState<number[]>([])
123
+ const [errorMsg, setErrorMsg] = (0, react_1.useState)('');
124
+ const removeFile = (id, hideMsg, fileId) => {
125
+ setFiles(files.filter((x) => x.id !== id));
126
+ if (fileId)
127
+ context.setFilesUid((fId) => fId.filter((idd) => idd.CO_SEQ_ARQUIVO !== fileId));
128
+ if (!hideMsg) {
129
+ setErrorMsg('Erro ao enviar arquivo. Verifique o formato e tente mais tarde.');
130
+ setTimeout(() => {
131
+ setErrorMsg('');
132
+ }, 3000);
133
+ }
134
+ };
135
+ const deleteFile = (e, id) => {
136
+ if (Object.keys(fileIds).includes(id.toString())) {
137
+ fetch(`${apiURL}/${fileIds[id]}`, {
138
+ method: 'DELETE',
139
+ headers: {
140
+ Authorization: `Bearer ${tstToken === '' ? (user ? user.token : '') : tstToken}`,
141
+ },
142
+ })
143
+ .then((res) => {
144
+ if (!res.ok)
145
+ removeFile(id, true, fileIds[id]);
146
+ if (res.status === 200) {
147
+ removeFile(id, true, fileIds[id]);
148
+ }
149
+ })
150
+ .catch((err) => console.log(err));
151
+ }
152
+ };
153
+ (0, react_1.useEffect)(() => {
154
+ const dt = new DataTransfer();
155
+ files.forEach((x) => {
156
+ dt.items.add(x.file);
157
+ });
158
+ context === null || context === void 0 ? void 0 : context.formSetValue(name, dt.files);
159
+ }, [files, context, name]);
160
+ (0, react_1.useEffect)(() => {
161
+ return () => {
162
+ context.setFilesUid((files) => files.filter((x) => x.CO_TIPO_ARQUIVO !== parseInt(tipoArquivo)));
163
+ };
164
+ }, []);
165
+ return (react_1.default.createElement(material_1.Grid, Object.assign({ item: true }, { xs, sm, md }, { sx: { width: '100%' } }),
166
+ react_1.default.createElement(material_1.Box, { bgcolor: 'white', p: 2, borderRadius: '8px', color: '#1E293B' },
167
+ react_1.default.createElement(material_1.InputLabel, { required: required, sx: { marginBottom: 2, textTransform: 'capitalize' } }, title),
168
+ react_1.default.createElement(system_1.Stack, Object.assign({}, getRootProps({ className: 'dropzone' }), { bgcolor: '#EFEFEF', justifyContent: 'center', alignItems: 'center', textAlign: 'center', borderRadius: '6px', py: 8, border: 'solid 1.5px #989898', sx: {
169
+ borderStyle: 'dashed',
170
+ cursor: 'pointer',
171
+ } }),
172
+ react_1.default.createElement("input", Object.assign({}, getInputProps(), context.formRegister(name, {
173
+ validate: (v, f) => {
174
+ if ((v.length && filesLoaded.length) <= 0 && required)
175
+ return 'O campo de arquivo é obrigatório';
176
+ },
177
+ }))),
178
+ react_1.default.createElement(system_1.Stack, { spacing: 2, alignItems: 'center' },
179
+ react_1.default.createElement(material_1.Box, null,
180
+ react_1.default.createElement(material_1.Typography, { fontWeight: 600, fontSize: 18 }, "Arraste seus arquivos at\u00E9 aqui"),
181
+ react_1.default.createElement(material_1.Typography, null, "ou selecione arquivos que est\u00E3o no seu computador")),
182
+ react_1.default.createElement(material_1.Button, { variant: 'contained', sx: {
183
+ backgroundColor: '#64748B',
184
+ pointerEvents: 'none',
185
+ borderRadius: '8px',
186
+ width: 'fit-content',
187
+ } }, "Selecionar"),
188
+ react_1.default.createElement(material_1.Typography, { fontWeight: 300 },
189
+ "Tamanho m\u00E1ximo por arquivo ",
190
+ sizeLimit,
191
+ "MB"))),
192
+ react_1.default.createElement(material_1.Typography, { pt: 2, fontSize: 16, fontWeight: 600 },
193
+ "Voc\u00EA selecionou ",
194
+ files.length,
195
+ " arquivo",
196
+ files.length > 1 ? 's' : '',
197
+ "."),
198
+ react_1.default.createElement(system_1.Stack, { width: '100%', marginTop: 1, spacing: 1 },
199
+ files.map((x) => (react_1.default.createElement(system_1.Stack, { direction: 'row', justifyContent: 'space-between', border: 'solid 1px #E2E8F0', borderRadius: 2, p: 1 },
200
+ react_1.default.createElement(system_1.Stack, { direction: 'row' },
201
+ react_1.default.createElement(system_1.Stack, { direction: 'row', justifyContent: 'center', alignItems: 'center', minWidth: 30, pr: 1.5 },
202
+ react_1.default.createElement(icons_1.PDFIcon, { sx: {
203
+ filter: 'invert(42%) sepia(86%) saturate(2412%) hue-rotate(326deg) brightness(86%) contrast(102%)',
204
+ transform: 'scale(1.5)',
205
+ width: 30,
206
+ } })),
207
+ react_1.default.createElement(system_1.Stack, null,
208
+ react_1.default.createElement(material_1.Typography, { fontWeight: 600 }, x.name),
209
+ react_1.default.createElement(material_1.Typography, { fontSize: 14 }, bytesToKBorMB(x.size)))),
210
+ react_1.default.createElement(material_1.Button, { size: 'small', startIcon: react_1.default.createElement(icons_1.TrashIcon, null), variant: 'contained', onClick: (e) => deleteFile(e, x.id), sx: {
211
+ height: 40,
212
+ backgroundColor: '#DE3F50',
213
+ borderRadius: '8px',
214
+ } }, "Remover")))),
215
+ progress > 0 && progress < 100 && (react_1.default.createElement(material_1.LinearProgress, { value: progress, sx: {
216
+ backgroundColor: '#103D6A',
217
+ '.MuiLinearProgress-bar': {
218
+ backgroundColor: '#BDDDFA',
219
+ },
220
+ } }))),
221
+ errorMsg && (react_1.default.createElement(react_1.default.Fragment, null,
222
+ react_1.default.createElement(material_1.Typography, { variant: 'caption', color: '#e53935', fontWeight: 600, fontSize: 14, paddingTop: 2 }, errorMsg),
223
+ react_1.default.createElement("br", null))),
224
+ (0, lodash_get_1.default)(context === null || context === void 0 ? void 0 : context.errors, name) && (react_1.default.createElement(material_1.Typography, { variant: 'caption', color: '#e53935', fontWeight: 600, fontSize: 14 }, "* O campo de arquivo \u00E9 obrigat\u00F3rio")))));
225
+ }
226
+ exports.default = DropFileUpload;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export default function FileUpload({ name, tipoArquivo, title, required, multiple, apiURL, route, sizeLimit, xs, sm, md, }: {
2
3
  name: string;
3
4
  tipoArquivo: string;
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const CameraAlt_1 = __importDefault(require("@mui/icons-material/CameraAlt"));
30
+ const Delete_1 = __importDefault(require("@mui/icons-material/Delete"));
31
+ const Done_1 = __importDefault(require("@mui/icons-material/Done"));
32
+ const InsertDriveFile_1 = __importDefault(require("@mui/icons-material/InsertDriveFile"));
33
+ const PictureAsPdf_1 = __importDefault(require("@mui/icons-material/PictureAsPdf"));
34
+ const material_1 = require("@mui/material");
35
+ const system_1 = require("@mui/system");
36
+ const lodash_get_1 = __importDefault(require("lodash.get"));
37
+ const react_1 = __importStar(require("react"));
38
+ const auth_1 = require("../../../context/auth");
39
+ const form_1 = require("../../../context/form");
40
+ function bytesToMegabytes(bytes) {
41
+ const megabytes = bytes / (1024 * 1024);
42
+ return megabytes;
43
+ }
44
+ function FileUpload({ name, tipoArquivo, title, required = false, multiple = false, apiURL, route = '', sizeLimit = 4, xs = 12, sm, md, }) {
45
+ const context = (0, react_1.useContext)(form_1.FormContext);
46
+ const { user } = (0, react_1.useContext)(auth_1.AuthContext);
47
+ const theme = (0, material_1.useTheme)();
48
+ const isSmall = (0, material_1.useMediaQuery)(theme.breakpoints.only('xs'));
49
+ const [files, setFiles] = (0, react_1.useState)([]);
50
+ const [filesLoaded, setFilesLoaded] = (0, react_1.useState)([]);
51
+ const [fileIds, setFilesIds] = (0, react_1.useState)({});
52
+ // const [filesError, setFilesError] = useState<number[]>([])
53
+ const [errorMsg, setErrorMsg] = (0, react_1.useState)('');
54
+ const onFile = (0, react_1.useCallback)((e) => {
55
+ const newFiles = e.target.files;
56
+ const filesTo = Object.keys(newFiles).map((key) => newFiles[key]);
57
+ setFiles([
58
+ ...files,
59
+ ...filesTo
60
+ .filter((file) => {
61
+ if (bytesToMegabytes(file.size) > sizeLimit) {
62
+ setErrorMsg(`Por favor, escolha um arquivo com tamanho inferior a ${sizeLimit} MB`);
63
+ setTimeout(() => {
64
+ setErrorMsg('');
65
+ }, 3000);
66
+ return false;
67
+ }
68
+ return true;
69
+ })
70
+ .map((file, index) => {
71
+ let id = Date.now() + index;
72
+ // fetch API
73
+ const fd = new FormData();
74
+ fd.append('files', file);
75
+ fd.append('tipoArquivo', tipoArquivo);
76
+ fetch(apiURL, {
77
+ method: 'POST',
78
+ body: fd,
79
+ headers: {
80
+ Authorization: `Bearer ${user ? user.token : ''}`,
81
+ },
82
+ })
83
+ .then((res) => {
84
+ if (!res.ok) {
85
+ removeFile(id);
86
+ return;
87
+ }
88
+ res.json().then((j) => {
89
+ if (j.status && j.status.status === 200) {
90
+ const fileIdFromApi = (0, lodash_get_1.default)(j, route, j)[0];
91
+ const fileId = fileIdFromApi['coSeqArquivo'];
92
+ context.setFilesUid((fId) => [
93
+ ...fId,
94
+ {
95
+ CO_SEQ_ARQUIVO: fileId,
96
+ CO_TIPO_ARQUIVO: parseInt(tipoArquivo),
97
+ },
98
+ ]);
99
+ setFilesLoaded((fl) => [...fl, id]);
100
+ const f = {};
101
+ f[id] = fileId;
102
+ setFilesIds((ids) => (Object.assign(Object.assign({}, ids), f)));
103
+ }
104
+ else {
105
+ removeFile(id);
106
+ }
107
+ });
108
+ })
109
+ .catch((err) => {
110
+ removeFile(id);
111
+ });
112
+ return { id: id, name: file.name, loading: true, error: false, file: file };
113
+ }),
114
+ ]);
115
+ }, [files, context]);
116
+ const removeFile = (id, hideMsg, fileId) => {
117
+ setFiles(files.filter((x) => x.id !== id));
118
+ if (fileId)
119
+ context.setFilesUid((fId) => fId.filter((idd) => idd.CO_SEQ_ARQUIVO !== fileId));
120
+ if (!hideMsg) {
121
+ setErrorMsg('Erro ao enviar arquivo. Tente novamente mais tarde');
122
+ setTimeout(() => {
123
+ setErrorMsg('');
124
+ }, 3000);
125
+ }
126
+ };
127
+ const deleteFile = (e, id) => {
128
+ if (Object.keys(fileIds).includes(id.toString())) {
129
+ fetch(`${apiURL}/${fileIds[id]}`, {
130
+ method: 'DELETE',
131
+ headers: {
132
+ Authorization: `Bearer ${user === null || user === void 0 ? void 0 : user.token}`,
133
+ },
134
+ })
135
+ .then((res) => {
136
+ if (!res.ok)
137
+ removeFile(id, true, fileIds[id]);
138
+ if (res.status === 200) {
139
+ removeFile(id, true, fileIds[id]);
140
+ }
141
+ })
142
+ .catch((err) => console.log(err));
143
+ }
144
+ };
145
+ (0, react_1.useEffect)(() => {
146
+ const dt = new DataTransfer();
147
+ files.forEach((x) => {
148
+ dt.items.add(x.file);
149
+ });
150
+ context === null || context === void 0 ? void 0 : context.formSetValue(name, dt.files);
151
+ }, [files, context, name]);
152
+ (0, react_1.useEffect)(() => {
153
+ return () => {
154
+ context.setFilesUid((files) => files.filter((x) => x.CO_TIPO_ARQUIVO !== parseInt(tipoArquivo)));
155
+ };
156
+ }, []);
157
+ return (react_1.default.createElement(material_1.Grid, Object.assign({ item: true }, { xs, sm, md }, { sx: { width: '100%' } }),
158
+ react_1.default.createElement(material_1.InputLabel, { required: required, sx: { marginBottom: 2, textTransform: 'capitalize' } }, title),
159
+ react_1.default.createElement(material_1.Box, { sx: { backgroundColor: '#e2eafc', padding: 1, borderRadius: 1, marginTop: 1 } },
160
+ react_1.default.createElement("input", Object.assign({ id: name, type: 'file', multiple: multiple }, context === null || context === void 0 ? void 0 : context.formRegister(name, {
161
+ validate: (v, f) => {
162
+ if ((v.length && filesLoaded.length) <= 0 && required)
163
+ return 'O campo de arquivo é obrigatório';
164
+ },
165
+ }), { onChange: onFile, accept: '.pdf', style: { display: 'none' } })),
166
+ react_1.default.createElement("input", Object.assign({ id: name + 'foto', type: 'file', capture: 'environment', multiple: multiple }, context === null || context === void 0 ? void 0 : context.formRegister(name, {
167
+ validate: (v, f) => {
168
+ if ((v.length && filesLoaded.length) <= 0 && required)
169
+ return 'O campo de arquivo é obrigatório';
170
+ },
171
+ }), { onChange: onFile, accept: '.jpg, .png, .jpeg', style: { display: 'none' } })),
172
+ react_1.default.createElement(material_1.Box, { sx: {
173
+ display: {
174
+ sx: 'block',
175
+ md: 'flex',
176
+ },
177
+ } },
178
+ react_1.default.createElement(material_1.Box, { sx: { width: '100%', marginRight: { xs: 0, md: 1 }, marginBottom: { xs: 1, md: 0 } } }, !multiple && files.length >= 1 ? (react_1.default.createElement(material_1.Button, { disabled: true, variant: 'contained', disableElevation: true, startIcon: react_1.default.createElement(InsertDriveFile_1.default, null), component: 'span', sx: { textTransform: 'none' }, fullWidth: true }, "Escolher Documento")) : (react_1.default.createElement("label", { htmlFor: name },
179
+ react_1.default.createElement(material_1.Button, { variant: 'contained', disableElevation: true, startIcon: react_1.default.createElement(InsertDriveFile_1.default, null), component: 'span', sx: { textTransform: 'none' }, fullWidth: true }, "Escolher Documento")))),
180
+ react_1.default.createElement(material_1.Box, { sx: { width: '100%' } }, !multiple && files.length >= 1 ? (react_1.default.createElement(material_1.Button, { disabled: true, variant: 'contained', disableElevation: true, startIcon: react_1.default.createElement(CameraAlt_1.default, null), component: 'span', sx: { textTransform: 'none', backgroundColor: '#0096c7' }, fullWidth: true }, isSmall ? 'Tirar Foto' : 'Escolher Imagem')) : (react_1.default.createElement("label", { htmlFor: name + 'foto' },
181
+ react_1.default.createElement(material_1.Button, { variant: 'contained', disableElevation: true, startIcon: react_1.default.createElement(CameraAlt_1.default, null), component: 'span', sx: { textTransform: 'none', backgroundColor: '#0096c7' }, fullWidth: true }, isSmall ? 'Tirar Foto' : 'Escolher Imagem'))))),
182
+ react_1.default.createElement(material_1.Typography, { fontWeight: 600, paddingY: 1, color: 'black' },
183
+ "Voc\u00EA selecionou ",
184
+ files.length,
185
+ " arquivo",
186
+ files.length > 1 && 's'),
187
+ files.length > 0 && (react_1.default.createElement(material_1.TableContainer, { component: material_1.Paper },
188
+ react_1.default.createElement(system_1.Stack, { direction: 'column' }, files.map((x) => (react_1.default.createElement(system_1.Stack, { key: x.name, direction: 'row', justifyContent: 'space-between', padding: 0.5 },
189
+ react_1.default.createElement(material_1.Box, null,
190
+ react_1.default.createElement(system_1.Stack, { direction: 'row', spacing: 2 },
191
+ filesLoaded.includes(x.id) ? react_1.default.createElement(Done_1.default, { sx: { fill: '#06d6a0' } }) : react_1.default.createElement(material_1.CircularProgress, { size: 22, sx: { color: 'black' } }),
192
+ react_1.default.createElement(PictureAsPdf_1.default, { color: 'error' }),
193
+ react_1.default.createElement(material_1.Typography, { fontWeight: 600 }, x.name))),
194
+ react_1.default.createElement(material_1.Box, null, filesLoaded.includes(x.id) && (react_1.default.createElement(material_1.Button, { variant: 'contained', size: 'small', sx: { textTransform: 'none', backgroundColor: '#d1495b', '&:hover': { backgroundColor: '#c1121f' } }, onClick: (e) => deleteFile(e, x.id), startIcon: react_1.default.createElement(Delete_1.default, null) }, "Remover"))))))))),
195
+ errorMsg && (react_1.default.createElement(react_1.default.Fragment, null,
196
+ react_1.default.createElement(material_1.Typography, { variant: 'caption', color: '#e53935', fontWeight: 600, fontSize: 14, paddingTop: 2 }, errorMsg),
197
+ react_1.default.createElement("br", null))),
198
+ (0, lodash_get_1.default)(context === null || context === void 0 ? void 0 : context.errors, name) && (react_1.default.createElement(material_1.Typography, { variant: 'caption', color: '#e53935', fontWeight: 600, fontSize: 14 }, "* O campo de arquivo \u00E9 obrigat\u00F3rio")))));
199
+ }
200
+ exports.default = FileUpload;