@agilemotion/oui-react-js 1.8.78 → 2.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.
Files changed (32) hide show
  1. package/README.TXT +10 -0
  2. package/dist/ApplicationManager.js +39 -2
  3. package/dist/BasicAppHome.js +4 -0
  4. package/dist/RestService.js +11 -2
  5. package/dist/RestUtils.js +11 -2
  6. package/dist/assets/jss/views/loginBasicStyle.js +5 -5
  7. package/dist/assets/jss/views/loginBasicStyle.jsx +5 -5
  8. package/dist/components/Button.js +47 -29
  9. package/dist/components/DocumentViewer.js +32 -19
  10. package/dist/components/Icon.js +3 -14
  11. package/dist/components/Toolbar.js +2 -2
  12. package/dist/components/Tree.js +237 -141
  13. package/dist/components/WordDocumentViewer.js +35 -7
  14. package/dist/components/dashboard/FoldingSideTabDashboard.js +10 -1
  15. package/dist/components/facialRecognition/FacialRegistration.js +15 -1
  16. package/dist/components/facialRecognition/FacialVerification.js +23 -2
  17. package/dist/components/form/FieldSet.js +8 -0
  18. package/dist/components/form/ImageEditor.js +64 -43
  19. package/dist/components/form/MultiFileUploadField.js +6 -5
  20. package/dist/components/form/RadioGroup.js +9 -1
  21. package/dist/components/form/Section.js +8 -2
  22. package/dist/components/form/TransferList.js +14 -10
  23. package/dist/components/form/UploadField.js +17 -4
  24. package/dist/components/layout/Layout.css +49 -1
  25. package/dist/components/layout/Layout.js +41 -1
  26. package/dist/components/layout/View.css +1 -1
  27. package/dist/components/navbars/PortalNavbar.js +5 -0
  28. package/dist/components/signatures/AgilitySignaturePanel.js +230 -22
  29. package/dist/components/signatures/DynamicSignatureDocumentContainer.js +487 -0
  30. package/dist/components/signatures/ImageSignatureInput.js +1 -2
  31. package/dist/event/EventType.js +3 -1
  32. package/package.json +2 -1
@@ -7,15 +7,18 @@ exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
9
9
  var _Icon = _interopRequireDefault(require("../Icon"));
10
- var _Utils = _interopRequireDefault(require("../../Utils"));
11
10
  var _Dialog = _interopRequireDefault(require("@mui/material/Dialog"));
12
11
  var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent"));
12
+ var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions"));
13
13
  var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
14
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
14
15
  var _SignatureInput = _interopRequireDefault(require("../signatures/SignatureInput"));
15
16
  var _htmlToImage = require("html-to-image");
16
17
  var _HtmlSignatureDocumentContainer = _interopRequireDefault(require("./HtmlSignatureDocumentContainer"));
17
18
  var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
18
19
  var _reactPromiseTracker = require("react-promise-tracker");
20
+ var _DynamicSignatureDocumentContainer = _interopRequireDefault(require("./DynamicSignatureDocumentContainer"));
21
+ var _ServiceCallActionHandler = _interopRequireDefault(require("../../event/ServiceCallActionHandler"));
19
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
23
  const status = response => {
21
24
  if (response.ok) {
@@ -38,8 +41,65 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
38
41
  const [refresher, setRefresher] = _react.default.useState(false);
39
42
  const [initialImage, setInitialImage] = _react.default.useState(null);
40
43
  const [systemSignatures, setSystemSignatures] = _react.default.useState(null);
44
+ const [pdf, setPdf] = _react.default.useState(null);
45
+ const [grabbedItem, setGrabbedItem] = _react.default.useState(null);
46
+ const [textDialogOpen, setTextDialogOpen] = _react.default.useState(false);
47
+ const [textDialogValue, setTextDialogValue] = _react.default.useState('');
48
+ const [resetConfirmOpen, setResetConfirmOpen] = _react.default.useState(false);
49
+ const [placementsChanged, setPlacementsChanged] = _react.default.useState(false);
50
+ const dynamicContainerRef = _react.default.useRef(null);
51
+ function processFileData(data, fileType) {
52
+ let file = {};
53
+ if (data.payloadBase64) {
54
+ file.base64 = data.payloadBase64;
55
+ } else if (data.url) {
56
+ file.base64 = data.url.replace('data:application/pdf;base64,', '').replace('data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,', '');
57
+ } else if (data.payload && typeof data.payload === 'string') {
58
+ file.base64 = data.payload.replace('data:application/pdf;base64,', '').replace('data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,', '');
59
+ }
60
+ file.name = data.name;
61
+ file.type = fileType;
62
+ setPdf(file);
63
+ }
41
64
  _react.default.useEffect(() => {
42
65
  fetchImages();
66
+ if (props.config.signaturePlacementStrategy === 'DYNAMIC') {
67
+ let actionConfig = {};
68
+ const contentRef = props.config.documents[0].contentBeingSignedRepositoryId;
69
+ const isCache = contentRef && contentRef.includes('::');
70
+ if (isCache) {
71
+ const [bucket, ...keyParts] = contentRef.split('::');
72
+ const key = keyParts.join('::');
73
+ actionConfig.service = {
74
+ type: "rest",
75
+ url: "/docs/api/v1/manager/cache/find",
76
+ method: "POST",
77
+ parameters: [{
78
+ httpParameterType: "REQUEST_BODY",
79
+ value: {
80
+ bucket,
81
+ key
82
+ }
83
+ }],
84
+ contentType: "application/json"
85
+ };
86
+ } else {
87
+ actionConfig.service = {
88
+ type: "rest",
89
+ url: "/docs/api/v1/manager/find",
90
+ method: "GET",
91
+ parameters: [{
92
+ httpParameterType: "PATH_VARIABLE",
93
+ value: contentRef || props.config.documents[0].originalDocumentRepositoryId
94
+ }]
95
+ };
96
+ }
97
+ _ServiceCallActionHandler.default.execute(actionConfig, null, null, 'agility-signature-panel', data => {
98
+ processFileData(data, data.type);
99
+ }, e => {
100
+ console.error(e);
101
+ }, () => {});
102
+ }
43
103
  }, []);
44
104
  const validate = () => {
45
105
  let signers = props.config.documents[0].signers;
@@ -57,23 +117,49 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
57
117
  };
58
118
  _react.default.useEffect(() => {
59
119
  let signers = props.config.documents[0].signers;
60
- for (const signer of signers) {
61
- if (signer.email === props.config.signatoryId) {
62
- let signingInputs = signer.signatureInputs;
63
- for (const signingInput of signingInputs) {
64
- if ('SIGN' === signingInput.inputType) {
65
- signingInput.value = signatureImage;
66
- } else if ('INITIAL' === signingInput.inputType) {
67
- signingInput.value = initialImage;
120
+ if (props.config.signaturePlacementStrategy === 'DYNAMIC') {
121
+ const dynamicPlacements = dynamicContainerRef.current ? dynamicContainerRef.current.getPlacements() : [];
122
+ if (dynamicPlacements.length > 0) {
123
+ props.valueChangeHandler({
124
+ signers,
125
+ dynamicPlacements
126
+ });
127
+ }
128
+ } else {
129
+ for (const signer of signers) {
130
+ if (signer.email === props.config.signatoryId) {
131
+ let signingInputs = signer.signatureInputs;
132
+ for (const signingInput of signingInputs) {
133
+ if ('SIGN' === signingInput.inputType) {
134
+ signingInput.value = signatureImage;
135
+ } else if ('INITIAL' === signingInput.inputType) {
136
+ signingInput.value = initialImage;
137
+ }
68
138
  }
69
139
  }
70
140
  }
141
+ if (validate()) {
142
+ props.valueChangeHandler({
143
+ signers
144
+ });
145
+ }
71
146
  }
72
- if (validate()) {
73
- props.valueChangeHandler(signers);
74
- }
75
- }, [initialImage, signatureImage, refresher]);
147
+ }, [initialImage, signatureImage, refresher, placementsChanged]);
76
148
  const showInput = mode => {
149
+ if (props.config.signaturePlacementStrategy === 'DYNAMIC') {
150
+ const existingImage = mode === 'SIGN' ? signatureImage || (systemSignatures === null || systemSignatures === void 0 ? void 0 : systemSignatures.signature) : initialImage || (systemSignatures === null || systemSignatures === void 0 ? void 0 : systemSignatures.initial);
151
+ if (existingImage) {
152
+ const dataUrl = typeof existingImage === 'object' ? existingImage.url : existingImage;
153
+ document.body.style.cursor = 'grabbing';
154
+ setGrabbedItem({
155
+ type: mode,
156
+ imageDataUrl: dataUrl,
157
+ width: mode === 'SIGN' ? 200 : 80,
158
+ height: 80
159
+ });
160
+ return;
161
+ }
162
+ }
77
163
  setInputMode(mode);
78
164
  setOpen(true);
79
165
  };
@@ -85,6 +171,54 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
85
171
  setInitialImage(dataUrl);
86
172
  }
87
173
  setOpen(false);
174
+ if (props.config.signaturePlacementStrategy === 'DYNAMIC') {
175
+ document.body.style.cursor = 'grabbing';
176
+ setGrabbedItem({
177
+ type: inputMode,
178
+ imageDataUrl: dataUrl,
179
+ width: inputMode === 'SIGN' ? 200 : 80,
180
+ height: 80
181
+ });
182
+ }
183
+ };
184
+ const grabText = () => {
185
+ setTextDialogOpen(true);
186
+ setTextDialogValue('');
187
+ };
188
+ const confirmText = () => {
189
+ if (!textDialogValue.trim()) return;
190
+ setTextDialogOpen(false);
191
+ document.body.style.cursor = 'grabbing';
192
+ setGrabbedItem({
193
+ type: 'TEXT',
194
+ content: textDialogValue.trim(),
195
+ width: 200,
196
+ height: 48
197
+ });
198
+ };
199
+ const grabDate = () => {
200
+ const today = new Date().toLocaleDateString('en-ZA', {
201
+ year: 'numeric',
202
+ month: 'long',
203
+ day: 'numeric'
204
+ });
205
+ document.body.style.cursor = 'grabbing';
206
+ setGrabbedItem({
207
+ type: 'DATE',
208
+ content: today,
209
+ width: 160,
210
+ height: 32
211
+ });
212
+ };
213
+ const confirmReset = () => {
214
+ setSignatureImage(null);
215
+ setInitialImage(null);
216
+ setGrabbedItem(null);
217
+ document.body.style.cursor = 'default';
218
+ if (dynamicContainerRef.current) {
219
+ dynamicContainerRef.current.clearPlacements();
220
+ }
221
+ setResetConfirmOpen(false);
88
222
  };
89
223
  const sign = (method, data) => {
90
224
  setSigning(true);
@@ -144,7 +278,7 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
144
278
  }, /*#__PURE__*/_react.default.createElement("div", {
145
279
  id: 'template',
146
280
  style: {
147
- font: 'italic 32px Brush Script MT, Brush Script Std, cursive',
281
+ font: 'italic 64px Brush Script MT, Brush Script Std, cursive',
148
282
  background: 'transparent',
149
283
  padding: '8px'
150
284
  }
@@ -182,9 +316,38 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
182
316
  setOpen(false);
183
317
  } else {
184
318
  sign(mode, data);
319
+ setOpen(false);
185
320
  }
186
321
  }
187
- }))), /*#__PURE__*/_react.default.createElement("div", {
322
+ }))), /*#__PURE__*/_react.default.createElement(_Dialog.default, {
323
+ open: textDialogOpen,
324
+ maxWidth: "sm",
325
+ fullWidth: true,
326
+ onClose: () => setTextDialogOpen(false)
327
+ }, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, "Enter Text"), /*#__PURE__*/_react.default.createElement(_DialogContent.default, null, /*#__PURE__*/_react.default.createElement(_TextField.default, {
328
+ autoFocus: true,
329
+ fullWidth: true,
330
+ margin: "dense",
331
+ label: "Text",
332
+ value: textDialogValue,
333
+ onChange: e => setTextDialogValue(e.target.value),
334
+ onKeyDown: e => {
335
+ if (e.key === 'Enter') confirmText();
336
+ }
337
+ })), /*#__PURE__*/_react.default.createElement(_DialogActions.default, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
338
+ onClick: () => setTextDialogOpen(false)
339
+ }, "Cancel"), /*#__PURE__*/_react.default.createElement(_Button.default, {
340
+ onClick: confirmText,
341
+ disabled: !textDialogValue.trim()
342
+ }, "Grab"))), /*#__PURE__*/_react.default.createElement(_Dialog.default, {
343
+ open: resetConfirmOpen,
344
+ onClose: () => setResetConfirmOpen(false)
345
+ }, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, "Reset All"), /*#__PURE__*/_react.default.createElement(_DialogContent.default, null, "This action will clear all placed items and signature/initial images. Are you sure?"), /*#__PURE__*/_react.default.createElement(_DialogActions.default, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
346
+ onClick: () => setResetConfirmOpen(false)
347
+ }, "Cancel"), /*#__PURE__*/_react.default.createElement(_Button.default, {
348
+ onClick: confirmReset,
349
+ color: "error"
350
+ }, "Reset"))), /*#__PURE__*/_react.default.createElement("div", {
188
351
  className: "doc-container-toolbar",
189
352
  style: {
190
353
  height: '64px',
@@ -200,6 +363,7 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
200
363
  }, /*#__PURE__*/_react.default.createElement("div", {
201
364
  className: 'col-*-*'
202
365
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
366
+ color: 'success',
203
367
  variant: 'text',
204
368
  size: "large",
205
369
  style: {
@@ -214,6 +378,7 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
214
378
  color: 'rgba(0, 0, 0, 0.54)'
215
379
  })
216
380
  }, "INITIAL"), /*#__PURE__*/_react.default.createElement(_Button.default, {
381
+ color: 'success',
217
382
  variant: 'text',
218
383
  size: "large",
219
384
  style: {
@@ -224,10 +389,48 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
224
389
  showInput('SIGN');
225
390
  },
226
391
  startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
227
- id: 'SIGN',
392
+ id: 'SIGN'
393
+ })
394
+ }, "SIGN"), props.config.signaturePlacementStrategy === 'DYNAMIC' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
395
+ color: 'inherit',
396
+ variant: 'text',
397
+ size: "large",
398
+ style: {
399
+ width: '100px',
400
+ height: '48px'
401
+ },
402
+ onClick: grabText,
403
+ startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
404
+ id: 'EDIT',
228
405
  color: 'rgba(0, 0, 0, 0.54)'
229
406
  })
230
- }, "SIGN")))), /*#__PURE__*/_react.default.createElement("div", {
407
+ }, "TEXT"), /*#__PURE__*/_react.default.createElement(_Button.default, {
408
+ color: 'inherit',
409
+ variant: 'text',
410
+ size: "large",
411
+ style: {
412
+ width: '100px',
413
+ height: '48px'
414
+ },
415
+ onClick: grabDate,
416
+ startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
417
+ id: 'CALENDAR',
418
+ color: 'rgba(0, 0, 0, 0.54)'
419
+ })
420
+ }, "DATE"), /*#__PURE__*/_react.default.createElement(_Button.default, {
421
+ color: 'error',
422
+ variant: 'text',
423
+ size: "large",
424
+ style: {
425
+ width: '100px',
426
+ height: '48px'
427
+ },
428
+ onClick: () => setResetConfirmOpen(true),
429
+ startIcon: /*#__PURE__*/_react.default.createElement(_Icon.default, {
430
+ id: 'CLEAR',
431
+ color: 'rgba(0, 0, 0, 0.54)'
432
+ })
433
+ }, "RESET"))))), /*#__PURE__*/_react.default.createElement("div", {
231
434
  className: "doc-container-body",
232
435
  style: {
233
436
  flex: 1,
@@ -243,10 +446,15 @@ const AgilitySignaturePanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_rea
243
446
  signatureImage: signatureImage,
244
447
  initialImage: initialImage,
245
448
  refresher: refresher
246
- }) : /*#__PURE__*/_react.default.createElement("div", {
247
- style: {
248
- padding: '32px'
249
- }
250
- }, "Unsupported signature placement strategy")));
449
+ }) : /*#__PURE__*/_react.default.createElement(_DynamicSignatureDocumentContainer.default, {
450
+ ref: dynamicContainerRef,
451
+ file: pdf,
452
+ grabbedItem: grabbedItem,
453
+ onDrop: () => {
454
+ setGrabbedItem(null);
455
+ setPlacementsChanged(prev => !prev);
456
+ },
457
+ onPlacementsChange: () => setPlacementsChanged(prev => !prev)
458
+ })));
251
459
  }));
252
460
  var _default = exports.default = AgilitySignaturePanel;