argous 1.2.225 → 1.2.227

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 (38) hide show
  1. package/dist/actions/index.d.ts +4 -0
  2. package/dist/actions/index.js +5 -1
  3. package/dist/components/Programa/Programa.js +18 -29
  4. package/dist/reducers/argous.d.ts +8 -0
  5. package/dist/reducers/argous.js +4 -1
  6. package/dist/types.d.ts +8 -2
  7. package/lib/actions/index.ts +4 -0
  8. package/lib/components/Programa/Programa.js +18 -23
  9. package/lib/reducers/argous.ts +7 -1
  10. package/lib/types.d.ts +8 -2
  11. package/package.json +1 -1
  12. package/dist/components/Programa/Annotations/Annotation.d.ts +0 -19
  13. package/dist/components/Programa/Annotations/Annotation.js +0 -317
  14. package/dist/components/Programa/Annotations/AnnotationsList.d.ts +0 -3
  15. package/dist/components/Programa/Annotations/AnnotationsList.js +0 -50
  16. package/dist/components/Programa/Annotations/Input/FileInput.d.ts +0 -6
  17. package/dist/components/Programa/Annotations/Input/FileInput.js +0 -147
  18. package/dist/components/Programa/Annotations/Input/Input.d.ts +0 -3
  19. package/dist/components/Programa/Annotations/Input/Input.js +0 -218
  20. package/dist/components/Programa/Annotations/Input/PrivacySelection.d.ts +0 -7
  21. package/dist/components/Programa/Annotations/Input/PrivacySelection.js +0 -65
  22. package/dist/components/Programa/Annotations/Input/ReplyInformation.d.ts +0 -5
  23. package/dist/components/Programa/Annotations/Input/ReplyInformation.js +0 -78
  24. package/dist/components/Programa/Annotations/Input/UsersAutocomplete.d.ts +0 -7
  25. package/dist/components/Programa/Annotations/Input/UsersAutocomplete.js +0 -139
  26. package/dist/components/Programa/Annotations/index.d.ts +0 -23
  27. package/dist/components/Programa/Annotations/index.js +0 -195
  28. package/dist/components/Programa/Annotations/utils.d.ts +0 -18
  29. package/dist/components/Programa/Annotations/utils.js +0 -46
  30. package/lib/components/Programa/Annotations/Annotation.js +0 -275
  31. package/lib/components/Programa/Annotations/AnnotationsList.js +0 -30
  32. package/lib/components/Programa/Annotations/Input/FileInput.js +0 -96
  33. package/lib/components/Programa/Annotations/Input/Input.js +0 -190
  34. package/lib/components/Programa/Annotations/Input/PrivacySelection.js +0 -72
  35. package/lib/components/Programa/Annotations/Input/ReplyInformation.js +0 -86
  36. package/lib/components/Programa/Annotations/Input/UsersAutocomplete.js +0 -122
  37. package/lib/components/Programa/Annotations/index.js +0 -136
  38. package/lib/components/Programa/Annotations/utils.js +0 -30
@@ -1,195 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || function (mod) {
26
- if (mod && mod.__esModule) return mod;
27
- var result = {};
28
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
- __setModuleDefault(result, mod);
30
- return result;
31
- };
32
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
33
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34
- return new (P || (P = Promise))(function (resolve, reject) {
35
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
36
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
37
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38
- step((generator = generator.apply(thisArg, _arguments || [])).next());
39
- });
40
- };
41
- var __generator = (this && this.__generator) || function (thisArg, body) {
42
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
43
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
44
- function verb(n) { return function (v) { return step([n, v]); }; }
45
- function step(op) {
46
- if (f) throw new TypeError("Generator is already executing.");
47
- while (_) try {
48
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
49
- if (y = 0, t) op = [op[0] & 2, t.value];
50
- switch (op[0]) {
51
- case 0: case 1: t = op; break;
52
- case 4: _.label++; return { value: op[1], done: false };
53
- case 5: _.label++; y = op[1]; op = [0]; continue;
54
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
55
- default:
56
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
57
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
58
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
59
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
60
- if (t[2]) _.ops.pop();
61
- _.trys.pop(); continue;
62
- }
63
- op = body.call(thisArg, _);
64
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
65
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
66
- }
67
- };
68
- var __importDefault = (this && this.__importDefault) || function (mod) {
69
- return (mod && mod.__esModule) ? mod : { "default": mod };
70
- };
71
- Object.defineProperty(exports, "__esModule", { value: true });
72
- exports.AnnotationsContext = void 0;
73
- var AnnotationsList_1 = __importDefault(require("./AnnotationsList"));
74
- var Input_1 = __importDefault(require("./Input/Input"));
75
- var utils_1 = require("./utils");
76
- var api_1 = require("../../../api");
77
- var utils_2 = require("../../../utils");
78
- var core_1 = require("@material-ui/core");
79
- var react_1 = __importStar(require("react"));
80
- var use_immer_1 = require("use-immer");
81
- var useStyles = core_1.makeStyles(function () { return ({
82
- dialogContainer: {
83
- display: 'flex',
84
- flexDirection: 'column',
85
- gap: utils_1.MEDIUM_SIZE,
86
- padding: utils_1.MEDIUM_SIZE,
87
- overflowY: 'auto'
88
- },
89
- dialogHeader: {
90
- display: 'flex',
91
- alignItems: 'flex-start',
92
- justifyContent: 'space-between',
93
- gap: utils_1.MEDIUM_SIZE,
94
- '&>h6': {
95
- lineHeight: 1
96
- }
97
- },
98
- dialogHeaderActions: {
99
- position: 'relative',
100
- '&>button': {
101
- zIndex: 1,
102
- padding: utils_1.EXTRA_SMALL_SIZE
103
- }
104
- },
105
- dialogHeaderLoading: {
106
- position: 'absolute',
107
- inset: 0,
108
- zIndex: 0
109
- }
110
- }); });
111
- var initialStateLoading = {
112
- main: false,
113
- save: false,
114
- file: false
115
- };
116
- var initialStateList = {
117
- annotations: []
118
- };
119
- var initialState = {
120
- selectedAnnotation: [],
121
- list: initialStateList,
122
- loading: initialStateLoading,
123
- printScreen: {}
124
- };
125
- var reducer = function (state, _a) {
126
- if (state === void 0) { state = initialState; }
127
- var type = _a.type, property = _a.property, field = _a.field, value = _a.value;
128
- switch (type) {
129
- default:
130
- if (type && property && field)
131
- state[type][property][field] = value;
132
- else if (type && field)
133
- state[type][field] = value;
134
- else if (field)
135
- state[field] = value;
136
- break;
137
- }
138
- };
139
- exports.AnnotationsContext = react_1.createContext(initialState);
140
- var Annotations = function (_a) {
141
- var open = _a.open, proceed = _a.proceed, onClose = _a.onClose, code = _a.code, pgTitle = _a.pgTitle, annotationParameters = _a.annotationParameters, openAnnotationParameters = _a.openAnnotationParameters;
142
- var classes = useStyles();
143
- var loggedUser = utils_2.useStore().usuarioLogado;
144
- var dialogRef = react_1.useRef(null);
145
- var _b = use_immer_1.useImmerReducer(reducer, initialState), state = _b[0], dispatch = _b[1];
146
- var loading = state.loading, list = state.list;
147
- var handleDialogClose = react_1.useCallback(function (event) {
148
- (proceed) && proceed();
149
- (onClose) && onClose(event);
150
- }, [proceed, onClose]);
151
- var getAnnotations = react_1.useCallback(function (code) { return __awaiter(void 0, void 0, void 0, function () {
152
- var response;
153
- return __generator(this, function (_a) {
154
- switch (_a.label) {
155
- case 0:
156
- dispatch({ type: 'loading', field: 'main', value: true });
157
- return [4 /*yield*/, api_1.getProgramAnnotations({ pgCode: code, ctrlPgn: {} })];
158
- case 1:
159
- response = _a.sent();
160
- (response === null || response === void 0 ? void 0 : response.status) && dispatch({ type: 'list', field: 'annotations', value: ((response === null || response === void 0 ? void 0 : response.list) || []) });
161
- dispatch({ type: 'loading', field: 'main', value: false });
162
- return [2 /*return*/];
163
- }
164
- });
165
- }); }, [dispatch]);
166
- react_1.useEffect(function () { return getAnnotations(code); }, [code, getAnnotations]);
167
- var scrollDialogToBottom = function (event) {
168
- if (!dialogRef.current)
169
- return;
170
- dialogRef.current.children[2].children[0].scroll({ top: dialogRef.current.offsetHeight, behavior: 'smooth' });
171
- };
172
- var contextValues = react_1.useMemo(function () { return (__assign(__assign({}, state), { code: code,
173
- pgTitle: pgTitle,
174
- loggedUser: loggedUser,
175
- dialogRef: dialogRef,
176
- annotationParameters: annotationParameters,
177
- openAnnotationParameters: openAnnotationParameters,
178
- scrollDialogToBottom: scrollDialogToBottom,
179
- handleDialogClose: handleDialogClose,
180
- dispatch: dispatch })); }, [code, pgTitle, annotationParameters, openAnnotationParameters, loggedUser, state, handleDialogClose, dispatch]);
181
- return react_1.default.createElement(exports.AnnotationsContext.Provider, { value: contextValues },
182
- react_1.default.createElement(core_1.Dialog, __assign({}, { open: open }, { maxWidth: 'lg', disableRestoreFocus: true, disableEnforceFocus: true, ref: dialogRef, onClose: handleDialogClose }),
183
- react_1.default.createElement("div", { className: classes.dialogContainer },
184
- react_1.default.createElement("div", { className: classes.dialogHeader },
185
- react_1.default.createElement(core_1.Typography, { variant: 'h6' },
186
- "Anota\u00E7\u00F5es ",
187
- pgTitle),
188
- react_1.default.createElement("div", { className: classes.dialogHeaderActions },
189
- react_1.default.createElement(core_1.IconButton, { onClick: handleDialogClose },
190
- react_1.default.createElement(utils_1.CloseIcon, null)),
191
- (loading.main) && react_1.default.createElement(core_1.CircularProgress, { color: 'secondary', size: 34, className: classes.dialogHeaderLoading }))),
192
- (!!list.annotations.length) && react_1.default.createElement(AnnotationsList_1.default, null),
193
- react_1.default.createElement(Input_1.default, null))));
194
- };
195
- exports.default = Annotations;
@@ -1,18 +0,0 @@
1
- export const EXTRA_SMALL_SIZE: 5;
2
- export const SMALL_SIZE: number;
3
- export const MEDIUM_SIZE: number;
4
- export const LARGE_SIZE: number;
5
- export const AVATAR_SIZE: 33;
6
- export const UNIMED_GREEN_COLOR: "#00995D";
7
- export function LIGHT_GREY_COLOR(type: any): string;
8
- export function MEDIUM_GREY_COLOR(type: any): string;
9
- export function ViewedIcon(props: any): React.JSX.Element;
10
- export function AnswerIcon(props: any): React.JSX.Element;
11
- export function CloseIcon(props: any): React.JSX.Element;
12
- export const privacyTypeOptions: (string | import("react-icons/lib").IconType)[][];
13
- export namespace ELLIPSIS_TEXT_STYLE {
14
- const overflow: string;
15
- const whiteSpace: string;
16
- const textOverflow: string;
17
- }
18
- import React from "react";
@@ -1,46 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ELLIPSIS_TEXT_STYLE = exports.privacyTypeOptions = exports.CloseIcon = exports.AnswerIcon = exports.ViewedIcon = exports.MEDIUM_GREY_COLOR = exports.LIGHT_GREY_COLOR = exports.UNIMED_GREEN_COLOR = exports.AVATAR_SIZE = exports.LARGE_SIZE = exports.MEDIUM_SIZE = exports.SMALL_SIZE = exports.EXTRA_SMALL_SIZE = void 0;
18
- var react_1 = __importDefault(require("react"));
19
- var bs_1 = require("react-icons/bs");
20
- var io_1 = require("react-icons/io");
21
- var io5_1 = require("react-icons/io5");
22
- exports.EXTRA_SMALL_SIZE = 5;
23
- exports.SMALL_SIZE = (exports.EXTRA_SMALL_SIZE * 2);
24
- exports.MEDIUM_SIZE = (exports.SMALL_SIZE * 2);
25
- exports.LARGE_SIZE = (exports.MEDIUM_SIZE * 2);
26
- exports.AVATAR_SIZE = 33;
27
- exports.UNIMED_GREEN_COLOR = '#00995D';
28
- var LIGHT_GREY_COLOR = function (type) { return "rgba(" + ((type === 'light') ? '0, 0, 0' : '255, 255, 255') + ", .12)"; };
29
- exports.LIGHT_GREY_COLOR = LIGHT_GREY_COLOR;
30
- var MEDIUM_GREY_COLOR = function (type) { return "rgba(" + ((type === 'light') ? '0, 0, 0' : '255, 255, 255') + ", .6)"; };
31
- exports.MEDIUM_GREY_COLOR = MEDIUM_GREY_COLOR;
32
- var ViewedIcon = function (props) { return react_1.default.createElement(bs_1.BsCheck2All, __assign({}, props)); };
33
- exports.ViewedIcon = ViewedIcon;
34
- var AnswerIcon = function (props) { return react_1.default.createElement(io5_1.IoArrowUndoSharp, __assign({}, props)); };
35
- exports.AnswerIcon = AnswerIcon;
36
- var CloseIcon = function (props) { return react_1.default.createElement(io5_1.IoClose, __assign({}, props)); };
37
- exports.CloseIcon = CloseIcon;
38
- exports.privacyTypeOptions = [
39
- ['0', 'Público', io_1.IoMdGlobe],
40
- ['1', 'Privado', io5_1.IoLockClosed]
41
- ];
42
- exports.ELLIPSIS_TEXT_STYLE = {
43
- overflow: 'hidden',
44
- whiteSpace: 'nowrap',
45
- textOverflow: 'ellipsis'
46
- };
@@ -1,275 +0,0 @@
1
- import { AnnotationsContext } from '.';
2
- import { EXTRA_SMALL_SIZE, MEDIUM_SIZE, SMALL_SIZE, LIGHT_GREY_COLOR, MEDIUM_GREY_COLOR, AVATAR_SIZE, ViewedIcon, UNIMED_GREEN_COLOR, AnswerIcon } from './utils';
3
- import { getProgramAnnotations } from '../../../api';
4
- import { ArgousAvatar, IconsComponent, ModalVisualizacaoDocumentos } from '../../../components';
5
- import { useModal } from '../../../utils';
6
- import { Button, Divider, Grid, Typography, makeStyles } from '@material-ui/core';
7
- import moment from 'moment';
8
- import React, { useContext } from 'react';
9
-
10
-
11
- const ANSWER_USER_MIN_WIDTH = 159.78;
12
-
13
- const useStyles = makeStyles((theme) => ({
14
- annotationContainer: {
15
- padding: SMALL_SIZE,
16
- border: `2px solid ${LIGHT_GREY_COLOR(theme.palette.type)}`,
17
- '&:not(:last-child)': {
18
- marginBottom: MEDIUM_SIZE
19
- },
20
- '&:last-child': {
21
- borderBottom: 0
22
- }
23
- },
24
- annotationHeader: {
25
- display: 'flex',
26
- justifyContent: 'space-between',
27
- gap: SMALL_SIZE
28
- },
29
- annotationUser: {
30
- display: 'flex',
31
- gap: SMALL_SIZE,
32
- '&>div:nth-child(1)': {
33
- width: AVATAR_SIZE,
34
- height: AVATAR_SIZE
35
- },
36
- '&>div:nth-child(2)': {
37
- display: 'flex',
38
- justifyContent: 'center',
39
- flexDirection: 'column',
40
- gap: EXTRA_SMALL_SIZE,
41
- '&>h6': {
42
- lineHeight: 1
43
- },
44
- '&>p': {
45
- lineHeight: 1,
46
- fontSize: '.75rem',
47
- fontWeight: 500,
48
- color: MEDIUM_GREY_COLOR(theme.palette.type)
49
- }
50
- }
51
- },
52
- annotationBody: {
53
- '&>div:nth-child(1)': {
54
- padding: '10px 0',
55
- overflow: 'hidden'
56
- }
57
- },
58
- annotationFooter: {
59
- display: 'flex',
60
- gap: SMALL_SIZE,
61
- paddingTop: SMALL_SIZE,
62
- minHeight: 43
63
- },
64
- buttonsDiv: {
65
- display: 'flex',
66
- justifyContent: 'flex-end',
67
- gap: SMALL_SIZE
68
- },
69
- markedUsers: {
70
- display: 'flex',
71
- flexWrap: 'wrap',
72
- gap: SMALL_SIZE
73
- },
74
- markedUser: {
75
- position: 'relative',
76
- '&>div:nth-child(1)': {
77
- width: AVATAR_SIZE,
78
- height: AVATAR_SIZE
79
- }
80
- },
81
- avatarViewedIcon: {
82
- position: 'absolute',
83
- bottom: -2,
84
- right: -8,
85
- width: 18,
86
- height: 18,
87
- color: UNIMED_GREEN_COLOR
88
- },
89
- answer: {
90
- alignItems: 'flex-start',
91
- padding: SMALL_SIZE,
92
- gap: SMALL_SIZE
93
- },
94
- answerUserDiv: {
95
- display: 'flex',
96
- gap: SMALL_SIZE,
97
- minWidth: ANSWER_USER_MIN_WIDTH,
98
- '&>div:nth-child(1)': {
99
- position: 'relative',
100
- '&>div:nth-child(1)': {
101
- width: AVATAR_SIZE,
102
- height: AVATAR_SIZE
103
- }
104
- },
105
- '&>div:nth-child(2)': {
106
- display: 'flex',
107
- justifyContent: 'center',
108
- flexDirection: 'column',
109
- gap: EXTRA_SMALL_SIZE,
110
- '&>h6': {
111
- lineHeight: 1
112
- },
113
- '&>p': {
114
- lineHeight: 1,
115
- fontSize: '.75rem',
116
- fontWeight: 500,
117
- color: MEDIUM_GREY_COLOR(theme.palette.type)
118
- }
119
- }
120
- },
121
- avatarAnswerIcon: {
122
- position: 'absolute',
123
- top: -2,
124
- left: -8,
125
- width: 18,
126
- height: 18,
127
- color: UNIMED_GREEN_COLOR
128
- },
129
- answerTextDiv: {
130
- width: '100%',
131
- maxWidth: '100%',
132
- [theme.breakpoints.up('sm')]: {
133
- maxWidth: `calc(100% - ${ANSWER_USER_MIN_WIDTH}px - ${SMALL_SIZE}px)`
134
- }
135
- },
136
- divider: {
137
- height: 2
138
- }
139
- }));
140
-
141
-
142
- export const ANNOTATION_ID_INDEX = 0;
143
- export const ANNOTATION_PARENT_ID_INDEX = 1;
144
- export const ANNOTATION_USER_INDEX = 2;
145
- export const ANNOTATION_PROGRAM_CODE_INDEX = 3;
146
- export const ANNOTATION_PARAMETERS_INDEX = 4;
147
- export const ANNOTATION_DATE_INDEX = 5;
148
- export const ANNOTATION_TEXT_INDEX = 6;
149
- export const ANNOTATION_DOCUMENT_ID_INDEX = 7;
150
- export const ANNOTATION_ANSWERS_INDEX = 8;
151
- export const ANNOTATION_MARKED_USERS_INDEX = 9;
152
- export const ANNOTATION_PRIVACY_TYPE_INDEX = 10;
153
- export const ANNOTATION_CODE_INDEX = 11;
154
- export const ANNOTATION_DOCUMENT_MIME_TYPE_INDEX = 12;
155
- export const ANNOTATION_DOCUMENT_URL_INDEX = 13;
156
-
157
-
158
- const Annotation = ({ annotation }) => {
159
-
160
- const classes = useStyles();
161
- const { createModal } = useModal();
162
- const fileView = createModal(ModalVisualizacaoDocumentos);
163
- const { openAnnotationParameters, handleDialogClose, scrollDialogToBottom, dispatch } = useContext(AnnotationsContext);
164
-
165
- const user = { id: (annotation[ANNOTATION_USER_INDEX]?.[0] || -1), name: (annotation[ANNOTATION_USER_INDEX]?.[1] || '') };
166
- const date = (annotation[ANNOTATION_DATE_INDEX]) ? moment(annotation[ANNOTATION_DATE_INDEX]).format('DD/MM/YYYY HH:mm:ss') : '';
167
- const text = annotation[ANNOTATION_TEXT_INDEX];
168
- const answers = (annotation[ANNOTATION_ANSWERS_INDEX] || []);
169
- const markedUsers = (annotation[ANNOTATION_MARKED_USERS_INDEX] || []);
170
- const annotationParameters = (annotation[ANNOTATION_PARAMETERS_INDEX] || {});
171
- const file = {
172
- id: annotation[ANNOTATION_DOCUMENT_ID_INDEX],
173
- type: annotation[ANNOTATION_DOCUMENT_MIME_TYPE_INDEX],
174
- url: annotation[ANNOTATION_DOCUMENT_URL_INDEX]
175
- };
176
-
177
- const reply = (event) => {
178
- dispatch({ field: 'selectedAnnotation', value: annotation });
179
- setTimeout(() => scrollDialogToBottom(event), 0);
180
- };
181
-
182
- const access = (event) => {
183
- (openAnnotationParameters && (typeof openAnnotationParameters === 'function')) && openAnnotationParameters(event, annotationParameters);
184
- handleDialogClose();
185
- };
186
-
187
- const handleFileClick = async (event) => {
188
- const response = await getProgramAnnotations({ snToken: true });
189
- if (response?.status) {
190
- await fileView({ nome: 'Documento da anotação', linkPronto: file.url, tokenSistema: response?.token });
191
- }
192
- };
193
-
194
-
195
- return <div className={classes.annotationContainer}>
196
- <div className={classes.annotationHeader}>
197
- <div className={classes.annotationUser}>
198
- <ArgousAvatar alt={`${user.name} avatar`} idUsuario={user.id} nome={user.name} />
199
- <div>
200
- <Typography variant='subtitle2'>{user.name}</Typography>
201
- <Typography variant='body2'>{date}</Typography>
202
- </div>
203
- </div>
204
- <div>
205
- {(file.id) && <IconsComponent mimeType={file.type} height={AVATAR_SIZE} onClick={handleFileClick} style={{ cursor: 'pointer' }} />}
206
- </div>
207
- </div>
208
- <div className={classes.annotationBody}>
209
- <div>
210
- <Typography variant='body2'>{text}</Typography>
211
- </div>
212
- <div>
213
- {answers.map((answer, answerIndex) => <Answer key={`answer-${answerIndex}`} {...{ answer }} />)}
214
- </div>
215
- </div>
216
- <Divider className={classes.divider} />
217
- <Grid container justifyContent={(markedUsers.length) ? 'space-between' : 'flex-end'} className={classes.annotationFooter}>
218
- {(!!markedUsers.length) && (
219
- <Grid item xs={12} sm='auto' className={classes.markedUsers}>
220
- {markedUsers.map((user, userIndex) => <MarkedUser key={`marked-user-${user?.idUsuario}`} {...{ user }} />)}
221
- </Grid>
222
- )}
223
- <Grid item xs={12} sm='auto' className={classes.buttonsDiv}>
224
- <Button fullWidth variant='outlined' size='small' onClick={access}>Acessar</Button>
225
- <Button fullWidth color='primary' variant='contained' size='small' onClick={reply}>Responder</Button>
226
- </Grid>
227
- </Grid>
228
- </div>;
229
- };
230
-
231
-
232
- export default Annotation;
233
-
234
-
235
- const Answer = ({ answer }) => {
236
-
237
- const classes = useStyles();
238
- const user = { id: (answer?.usuario?.[0] || -1), name: (answer?.usuario?.[1] || '') };
239
- const date = (answer?.dtAnotacao) ? moment(answer?.dtAnotacao).format('DD/MM/YYYY HH:mm:ss') : '';
240
- const text = answer?.dsAnotacao;
241
-
242
-
243
- return <div>
244
- <Divider className={classes.divider} />
245
- <Grid container className={classes.answer}>
246
- <div className={classes.answerUserDiv}>
247
- <div>
248
- <ArgousAvatar alt={`${user.name} avatar`} idUsuario={user.id} nome={user.name} />
249
- <AnswerIcon className={classes.avatarAnswerIcon} />
250
- </div>
251
- <div>
252
- <Typography variant='subtitle2'>{user.name}</Typography>
253
- <Typography variant='body2'>{date}</Typography>
254
- </div>
255
- </div>
256
- <div className={classes.answerTextDiv}>
257
- <Typography variant='body2'>{text}</Typography>
258
- </div>
259
- </Grid>
260
- </div>;
261
- };
262
-
263
-
264
- const MarkedUser = (props) => {
265
-
266
- const classes = useStyles();
267
- const user = { id: (props?.user?.idUsuario || -1), name: (props?.user?.nmUsuario || '') };
268
- const viewDate = props?.user?.dtVisualizacao;
269
-
270
-
271
- return <div className={classes.markedUser}>
272
- <ArgousAvatar alt={`${user.name} avatar`} idUsuario={user.id} nome={user.name} />
273
- {(viewDate) && <ViewedIcon className={classes.avatarViewedIcon} />}
274
- </div>;
275
- };
@@ -1,30 +0,0 @@
1
- import { AnnotationsContext } from '.';
2
- import Annotation from './Annotation';
3
- import { LIGHT_GREY_COLOR } from './utils';
4
- import { useTheme } from '@material-ui/core';
5
- import React, { useContext } from 'react';
6
-
7
-
8
- const AnnotationsList = () => {
9
-
10
- const theme = useTheme();
11
- const { list } = useContext(AnnotationsContext);
12
-
13
-
14
- return (
15
- <div
16
- style={{
17
- maxHeight: '60vh',
18
- overflow: 'hidden auto',
19
- borderBottom: `2px solid ${LIGHT_GREY_COLOR(theme.palette.type)}`
20
- }}
21
- >
22
- {list.annotations.map((annotation, annotationIndex) => (
23
- <Annotation key={`annotation-${annotation?.[0]}`} {...{ annotation }} />
24
- ))}
25
- </div>
26
- );
27
- };
28
-
29
-
30
- export default AnnotationsList;
@@ -1,96 +0,0 @@
1
- import { AnnotationsContext } from '..';
2
- import { IconsComponent } from '../../../../components';
3
- import { printScreen as getPrintScreen } from '../../../../utils';
4
- import { CloseIcon, EXTRA_SMALL_SIZE, MEDIUM_SIZE, SMALL_SIZE, ELLIPSIS_TEXT_STYLE, LARGE_SIZE } from '../utils';
5
- import { Button, IconButton, Typography, makeStyles } from '@material-ui/core';
6
- import React, { useContext, useRef } from 'react';
7
- import { IoDocumentAttachOutline, IoImageOutline } from 'react-icons/io5';
8
-
9
-
10
- const useStyles = makeStyles({
11
- fileInputContainer: {
12
- width: '100%',
13
- display: 'flex',
14
- flexDirection: 'column',
15
- alignItems: 'flex-end',
16
- gap: SMALL_SIZE,
17
- '&>input': {
18
- display: 'none'
19
- }
20
- },
21
- fileInputButtonsDiv: {
22
- display: 'flex',
23
- alignItems: 'center',
24
- gap: SMALL_SIZE
25
- },
26
- file: {
27
- display: 'flex',
28
- alignItems: 'center',
29
- gap: EXTRA_SMALL_SIZE,
30
- maxWidth: '100%',
31
- '&>p': {
32
- ...ELLIPSIS_TEXT_STYLE
33
- }
34
- }
35
- });
36
-
37
-
38
- const FileInput = ({ file, onChange }) => {
39
-
40
- const classes = useStyles();
41
- const { printScreen, loading, dispatch } = useContext(AnnotationsContext);
42
- const inputRef = useRef(null);
43
- const canAddPrintScreen = !(file === printScreen?.file);
44
- const disabled = (loading.save || loading.file);
45
-
46
- const printScreenClick = async (event) => {
47
- dispatch({ type: 'loading', field: 'file', value: true });
48
-
49
- let file;
50
- if (printScreen?.file) file = printScreen?.file;
51
- else {
52
- const response = await getPrintScreen({ event });
53
- if (response?.status) {
54
- dispatch({ field: 'printScreen', value: response });
55
- file = response?.file;
56
- }
57
- }
58
-
59
- (file) && onChange(event, file);
60
- dispatch({ type: 'loading', field: 'file', value: false });
61
- };
62
-
63
-
64
- return <div className={classes.fileInputContainer}>
65
- <input ref={inputRef} type='file' onChange={e => (e?.target?.files?.length) && onChange(e, e.target.files[0])} />
66
- {(file) && <File {...{ file, disabled, classes }} onDelete={e => onChange(e, undefined)} />}
67
- <div className={classes.fileInputButtonsDiv}>
68
- <IconButton {...{ disabled }} onClick={() => (inputRef.current) && inputRef.current.click()} style={{ padding: EXTRA_SMALL_SIZE }}>
69
- <IoDocumentAttachOutline size={MEDIUM_SIZE} />
70
- </IconButton>
71
- {(canAddPrintScreen) && (
72
- <Button
73
- {...{ disabled }}
74
- size='small'
75
- variant='outlined'
76
- startIcon={<IoImageOutline />}
77
- onClick={printScreenClick}
78
- >
79
- Captura de tela
80
- </Button>
81
- )}
82
- </div>
83
- </div>;
84
- };
85
-
86
-
87
- export default FileInput;
88
-
89
-
90
- const File = ({ file, disabled, onDelete, classes }) => <div className={classes.file}>
91
- <IconsComponent fileName={file?.name} mimeType={file?.type} height={LARGE_SIZE} />
92
- <Typography>{file?.name}</Typography>
93
- <IconButton {...{ disabled }} size='small' onClick={e => (typeof onDelete === 'function') && onDelete(e)}>
94
- <CloseIcon />
95
- </IconButton>
96
- </div>;