@visns-studio/visns-components 1.0.5 → 1.0.7

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.
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useEffect } from "react";
2
2
  import CustomFetch from "../crm/visns-fetch";
3
- import Field from "./visns-field";
3
+ import Field from "../crm/visns-field";
4
4
  import slugify from "react-slugify";
5
5
  import moment from "moment";
6
6
  import Reveal from "react-reveal/Reveal";
package/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  /** CMS Components */
2
2
  import CmsForm from "./components/cms/visns-form";
3
3
  import DataGrid from "./components/cms/visns-data-grid";
4
- import Download from "./components/cms/visns-download";
5
4
  import DropZone from "./components/cms/visns-dropzone";
6
5
  import SortableList from "./components/cms/sorting/list";
7
6
 
package/package.json CHANGED
@@ -30,7 +30,7 @@
30
30
  "react-dom": ">=18.2.0"
31
31
  },
32
32
  "name": "@visns-studio/visns-components",
33
- "version": "1.0.5",
33
+ "version": "1.0.7",
34
34
  "description": "Various packages to assist in the development of our Custom Applications.",
35
35
  "main": "index.js",
36
36
  "devDependencies": {},
@@ -1,102 +0,0 @@
1
- import _ from 'lodash';
2
- import axios from 'axios';
3
- import { trackPromise } from 'react-promise-tracker';
4
-
5
- const CustomDownload = (
6
- url,
7
- method,
8
- formData,
9
- successCallback,
10
- errorCallback
11
- ) => {
12
- let baseUrl = '';
13
- let fileUpload = false;
14
- let body;
15
- let headers = {};
16
- let options = {};
17
-
18
- if (!_.isEmpty(formData)) {
19
- Object.keys(formData).forEach((item) => {
20
- if (formData[item] !== undefined) {
21
- if (formData[item] instanceof File && formData[item] !== null) {
22
- fileUpload = true;
23
- }
24
- }
25
- });
26
- }
27
-
28
- if (method.toUpperCase() === 'PUT' || method.toUpperCase() === 'PATCH') {
29
- if (fileUpload === false) {
30
- body = {
31
- ...body,
32
- _method: method,
33
- };
34
- }
35
- }
36
-
37
- if (fileUpload === false) {
38
- body = JSON.stringify(formData);
39
- headers = {
40
- ...headers,
41
- 'Content-Type': 'application/json',
42
- };
43
- } else {
44
- body = new FormData();
45
-
46
- headers = {
47
- ...headers,
48
- 'Content-Type': 'multipart/form-data',
49
- contentType: false,
50
- processData: false,
51
- };
52
-
53
- if (!_.isEmpty(formData)) {
54
- Object.keys(formData).forEach((item) => {
55
- body.append(item, formData[item]);
56
- });
57
- }
58
-
59
- if (
60
- method.toUpperCase() === 'PUT' ||
61
- method.toUpperCase() === 'PATCH'
62
- ) {
63
- if (fileUpload === false) {
64
- } else {
65
- body.append('_method', method);
66
- method = 'POST';
67
- }
68
- }
69
- }
70
-
71
- options = {
72
- method: method,
73
- data: body,
74
- headers: headers,
75
- url: baseUrl + url,
76
- responseType: 'blob',
77
- };
78
-
79
- trackPromise(
80
- axios(options).then(
81
- (result) => {
82
- successCallback(result.data);
83
- },
84
- (error) => {
85
- if (
86
- error.response.hasOwnProperty('data') &&
87
- error.response.data.hasOwnProperty('message') &&
88
- error.response.data.message !== ''
89
- ) {
90
- if (error.response.data.message === 'Unauthenticated.') {
91
- localStorage.clear();
92
- }
93
- errorCallback(error.response.data.message);
94
- } else {
95
- errorCallback(error);
96
- }
97
- }
98
- )
99
- );
100
- };
101
-
102
- export default CustomDownload;
@@ -1,696 +0,0 @@
1
- import React, { useState, useEffect, useRef } from "react";
2
- import CustomFetch from "../crm/visns-fetch";
3
- import Select from "../crm/visns-select";
4
- import MultiSelect from "../crm/visns-multi-select";
5
- import VisnsAutocomplete from "../crm/visns-autocomplete";
6
- import DatePicker from "react-datepicker";
7
- import _ from "lodash";
8
- import ReactQuill from "react-quill";
9
- import Toggle from "react-toggle";
10
- import NumberFormat from "react-number-format";
11
- import { motion } from "framer-motion";
12
- import "react-toggle/style.css";
13
- import "react-quill/dist/quill.snow.css";
14
- import "react-datepicker/dist/react-datepicker.css";
15
-
16
- function Field(props) {
17
- const inputFile = useRef(null);
18
- const [options, setOptions] = useState([]);
19
- const [dataOptions, setDataOptions] = useState([]);
20
- const [formItemStyle, setFormItemStyle] = useState({});
21
- const [formItemClass, setFormItemClass] = useState("formItem");
22
- const {
23
- settings,
24
- inputValue,
25
- inputClass,
26
- alertStateChange,
27
- onChange,
28
- onChangeFile,
29
- onChangeRicheditor,
30
- onChangeSelect,
31
- setFormData,
32
- uploadProgress,
33
- } = props;
34
-
35
- useEffect(() => {
36
- switch (settings.type) {
37
- case "hidden":
38
- setFormItemStyle({
39
- display: "none",
40
- });
41
- break;
42
- case "dropdown-ajax":
43
- let filter = {};
44
-
45
- if (
46
- settings.hasOwnProperty("where") &&
47
- settings.where.length > 0
48
- ) {
49
- filter = {
50
- where: settings.where,
51
- };
52
- }
53
-
54
- CustomFetch(
55
- settings.url,
56
- "POST",
57
- filter,
58
- function (result) {
59
- setOptions(result.data);
60
-
61
- let dataArray = [];
62
-
63
- result.data.forEach((a) => {
64
- let _tempObject = a;
65
-
66
- if (!_.isEmpty(_tempObject)) {
67
- let modifiedObject = {};
68
-
69
- Object.keys(_tempObject).forEach(function (c) {
70
- if (c !== "id" && c !== "label") {
71
- modifiedObject["data-" + c] =
72
- _tempObject[c];
73
- }
74
- });
75
-
76
- dataArray.push(modifiedObject);
77
- }
78
- });
79
-
80
- if (dataArray.length > 0) {
81
- setDataOptions(dataArray);
82
- }
83
- },
84
- function (error) {
85
- alertStateChange({
86
- show: true,
87
- alertClass: "dialog error",
88
- alertText: String(error),
89
- });
90
- }
91
- );
92
- break;
93
- case "multi-dropdown-ajax":
94
- let multiFilter = {};
95
-
96
- if (
97
- settings.hasOwnProperty("where") &&
98
- settings.where.length > 0
99
- ) {
100
- multiFilter = {
101
- where: settings.where,
102
- };
103
- }
104
-
105
- CustomFetch(
106
- settings.url,
107
- "POST",
108
- multiFilter,
109
- function (result) {
110
- setOptions(result.data);
111
-
112
- let dataArray = [];
113
-
114
- result.data.forEach((a) => {
115
- let _tempObject = a;
116
-
117
- if (!_.isEmpty(_tempObject)) {
118
- let modifiedObject = {};
119
-
120
- Object.keys(_tempObject).forEach(function (c) {
121
- if (c !== "id" && c !== "label") {
122
- modifiedObject["data-" + c] =
123
- _tempObject[c];
124
- }
125
- });
126
-
127
- dataArray.push(modifiedObject);
128
- }
129
- });
130
-
131
- if (dataArray.length > 0) {
132
- setDataOptions(dataArray);
133
- }
134
- },
135
- function (error) {
136
- alertStateChange({
137
- show: true,
138
- alertClass: "dialog error",
139
- alertText: String(error),
140
- });
141
- }
142
- );
143
- break;
144
- default:
145
- break;
146
- }
147
-
148
- if (settings.size === "full") {
149
- setFormItemClass("formItem fwItem");
150
- }
151
- }, [settings]);
152
-
153
- useEffect(() => {
154
- let filter = {};
155
-
156
- if (settings.hasOwnProperty("child")) {
157
- if (inputValue > 0) {
158
- filter = {
159
- where: [
160
- {
161
- id: settings.id,
162
- value: inputValue,
163
- },
164
- ],
165
- };
166
-
167
- CustomFetch(
168
- settings.child.url,
169
- "POST",
170
- filter,
171
- function (result) {
172
- childDropdownCallback({
173
- id: settings.child.id,
174
- data: result.data,
175
- });
176
- },
177
- function (error) {
178
- alertStateChange({
179
- show: true,
180
- alertClass: "dialog error",
181
- alertText: String(error),
182
- });
183
- }
184
- );
185
- }
186
- }
187
- }, [inputValue, settings]);
188
-
189
- useEffect(() => {
190
- if (settings.hasOwnProperty("options")) {
191
- if (settings.options.length > 0) {
192
- let dataArray = [];
193
-
194
- settings.options.forEach((a) => {
195
- let _tempObject = a;
196
-
197
- if (!_.isEmpty(_tempObject)) {
198
- let modifiedObject = {};
199
-
200
- Object.keys(_tempObject).forEach(function (c) {
201
- if (c !== "id" && c !== "label") {
202
- modifiedObject["data-" + c] = _tempObject[c];
203
- }
204
- });
205
-
206
- dataArray.push(modifiedObject);
207
- }
208
- });
209
-
210
- if (dataArray.length > 0) {
211
- setDataOptions(dataArray);
212
- }
213
- }
214
- }
215
- }, [settings.options, settings]);
216
-
217
- return (
218
- <div className={formItemClass} style={formItemStyle}>
219
- <label
220
- className={
221
- settings.type === "image"
222
- ? "fi__flabel"
223
- : settings.type === "richeditor"
224
- ? "fi__flabel"
225
- : "fi__label"
226
- }
227
- >
228
- {(() => {
229
- if (
230
- settings.type === "address" ||
231
- settings.type === "date" ||
232
- settings.type === "datetime" ||
233
- settings.type === "checkbox" ||
234
- settings.type === "multi-dropdown" ||
235
- settings.type === "multi-dropdown-ajax"
236
- ) {
237
- return (
238
- <span className="fi__span prefocus">
239
- {settings.label}{" "}
240
- {settings.required === true ? "*" : ""}
241
- </span>
242
- );
243
- }
244
- })()}
245
-
246
- {(() => {
247
- if (
248
- settings.type === "image" ||
249
- settings.type === "richeditor"
250
- ) {
251
- return (
252
- <>
253
- {settings.label}{" "}
254
- {settings.required === true ? "*" : ""}
255
- </>
256
- );
257
- }
258
- })()}
259
-
260
- {(() => {
261
- let htmlContainer;
262
- switch (settings.type) {
263
- case "text":
264
- htmlContainer = (
265
- <input
266
- type="text"
267
- name={settings.id}
268
- readOnly={
269
- settings.hasOwnProperty("readOnly")
270
- ? settings.readOnly
271
- : false
272
- }
273
- className={inputClass[settings.id]}
274
- placeholder=" "
275
- onChange={onChange}
276
- value={
277
- inputValue && inputValue !== "null"
278
- ? inputValue
279
- : ""
280
- }
281
- />
282
- );
283
- break;
284
- case "json":
285
- htmlContainer = (
286
- <input
287
- type="text"
288
- name={settings.id}
289
- data-jsonkey={settings.key}
290
- className={inputClass[settings.id]}
291
- placeholder=" "
292
- onChange={onChange}
293
- value={
294
- inputValue && inputValue !== "null"
295
- ? inputValue
296
- : ""
297
- }
298
- />
299
- );
300
- break;
301
- case "password":
302
- htmlContainer = (
303
- <input
304
- type="password"
305
- name={settings.id}
306
- className={inputClass[settings.id]}
307
- placeholder=" "
308
- onChange={onChange}
309
- value={
310
- inputValue && inputValue !== "null"
311
- ? inputValue
312
- : ""
313
- }
314
- />
315
- );
316
- break;
317
- case "phone":
318
- htmlContainer = (
319
- <NumberFormat
320
- name={settings.id}
321
- className={inputClass[settings.id]}
322
- onValueChange={(values) => {
323
- onChangeNumberFormat(
324
- values,
325
- settings.id
326
- );
327
- }}
328
- format="## #### ####"
329
- value={
330
- inputValue && inputValue !== "null"
331
- ? inputValue
332
- : ""
333
- }
334
- />
335
- );
336
- break;
337
- case "mobile":
338
- htmlContainer = (
339
- <NumberFormat
340
- className={inputClass[settings.id]}
341
- onValueChange={(values) => {
342
- onChangeNumberFormat(
343
- values,
344
- settings.id
345
- );
346
- }}
347
- format="#### ### ###"
348
- value={
349
- inputValue && inputValue !== "null"
350
- ? inputValue
351
- : ""
352
- }
353
- />
354
- );
355
- break;
356
- case "currency":
357
- htmlContainer = (
358
- <NumberFormat
359
- name={settings.id}
360
- className={inputClass[settings.id]}
361
- onValueChange={(values) => {
362
- onChangeNumberFormat(
363
- values,
364
- settings.id
365
- );
366
- }}
367
- thousandSeperate={true}
368
- prefix={"$"}
369
- value={
370
- inputValue && inputValue !== "null"
371
- ? inputValue
372
- : ""
373
- }
374
- />
375
- );
376
- break;
377
- case "textarea":
378
- htmlContainer = (
379
- <textarea
380
- name={settings.id}
381
- className={inputClass[settings.id]}
382
- onChange={onChange}
383
- value={
384
- inputValue && inputValue !== "null"
385
- ? inputValue
386
- : ""
387
- }
388
- style={{ height: "200px" }}
389
- ></textarea>
390
- );
391
- break;
392
- case "address":
393
- htmlContainer = (
394
- <VisnsAutocomplete
395
- onSelect={(place) =>
396
- autocompleteCallback(place)
397
- }
398
- field={settings.id}
399
- setFormData={setFormData}
400
- api="pk.eyJ1IjoidmlzbnMtc3R1ZGlvIiwiYSI6ImNrbGlraW5vZDBhMDYycHBsdmk5b3ljbGQifQ.ZGUBk0PWac5GahUeVHdTpg"
401
- inputValue={inputValue}
402
- />
403
- );
404
- break;
405
- case "dropdown":
406
- htmlContainer = (
407
- <Select
408
- settings={settings}
409
- className={inputClass[settings.id]}
410
- onChange={onChange}
411
- inputValue={
412
- inputValue === null ? "" : inputValue
413
- }
414
- options={settings.options}
415
- dataOptions={dataOptions}
416
- />
417
- );
418
- break;
419
- case "dropdown-ajax":
420
- htmlContainer = (
421
- <Select
422
- settings={settings}
423
- className={inputClass[settings.id]}
424
- onChange={onChange}
425
- inputValue={
426
- inputValue === null ? "" : inputValue
427
- }
428
- options={options}
429
- dataOptions={dataOptions}
430
- />
431
- );
432
- break;
433
- case "multi-dropdown":
434
- htmlContainer = (
435
- <MultiSelect
436
- settings={settings}
437
- className={inputClass[settings.id]}
438
- onChange={onChangeSelect}
439
- inputValue={
440
- inputValue === null ? "" : inputValue
441
- }
442
- options={settings.options}
443
- dataOptions={dataOptions}
444
- />
445
- );
446
- break;
447
- case "multi-dropdown-ajax":
448
- htmlContainer = (
449
- <MultiSelect
450
- settings={settings}
451
- className={inputClass[settings.id]}
452
- onChange={onChangeSelect}
453
- inputValue={
454
- inputValue === null ? "" : inputValue
455
- }
456
- options={options}
457
- dataOptions={dataOptions}
458
- />
459
- );
460
- break;
461
- case "file":
462
- htmlContainer = (
463
- <input
464
- type="file"
465
- name={settings.id}
466
- className={inputClass[settings.id]}
467
- onChange={onChangeFile}
468
- />
469
- );
470
- break;
471
-
472
- case "line-break":
473
- htmlContainer = (
474
- <div className="formbreak">
475
- <span>
476
- {settings.label}{" "}
477
- {settings.required === true ? "*" : ""}
478
- </span>
479
- </div>
480
- );
481
- break;
482
- case "checkbox":
483
- htmlContainer = (
484
- <input
485
- type="checkbox"
486
- name={settings.id}
487
- className={inputClass[settings.id]}
488
- placeholder=" "
489
- onChange={onChange}
490
- value={inputValue || ""}
491
- />
492
- );
493
- break;
494
- default:
495
- htmlContainer = "";
496
- break;
497
- }
498
-
499
- return htmlContainer;
500
- })()}
501
-
502
- {(() => {
503
- if (
504
- settings.type !== "address" &&
505
- settings.type !== "date" &&
506
- settings.type !== "datetime" &&
507
- settings.type !== "line-break" &&
508
- settings.type !== "checkbox" &&
509
- settings.type !== "multi-dropdown" &&
510
- settings.type !== "multi-dropdown-ajax" &&
511
- settings.type !== "toggle" &&
512
- settings.type !== "richeditor" &&
513
- settings.type !== "image"
514
- ) {
515
- return (
516
- <span className="fi__span">
517
- {settings.label}{" "}
518
- {settings.required === true ? "*" : ""}
519
- </span>
520
- );
521
- }
522
- })()}
523
- </label>
524
-
525
- {(() => {
526
- let htmlContainer;
527
- switch (settings.type) {
528
- case "date":
529
- htmlContainer = (
530
- <DatePicker
531
- dateFormat={
532
- settings.format
533
- ? settings.format
534
- : "dd-MM-yyyy"
535
- }
536
- className={inputClass[settings.id]}
537
- selected={inputValue || ""}
538
- showMonthDropdown
539
- showYearDropdown
540
- dropdownMode="select"
541
- onChange={(date) =>
542
- onChangeDate(date, settings.id)
543
- }
544
- />
545
- );
546
- break;
547
- case "datetime":
548
- htmlContainer = (
549
- <DatePicker
550
- dateFormat={
551
- settings.format
552
- ? settings.format
553
- : "dd-MM-yyyy hh:mm aa"
554
- }
555
- showTimeSelect
556
- className={inputClass[settings.id]}
557
- selected={inputValue || null}
558
- showMonthDropdown
559
- showYearDropdown
560
- dropdownMode="select"
561
- onChange={(date) =>
562
- onChangeDate(date, settings.id)
563
- }
564
- shouldCloseOnSelect={true}
565
- />
566
- );
567
- break;
568
- case "time":
569
- htmlContainer = (
570
- <DatePicker
571
- dateFormat={
572
- settings.format
573
- ? settings.format
574
- : "hh:mm aa"
575
- }
576
- showTimeSelect
577
- showTimeSelectOnly
578
- timeIntervals={15}
579
- timeCaption="Time"
580
- className={inputClass[settings.id]}
581
- selected={inputValue || ""}
582
- onChange={(date) =>
583
- onChangeDate(date, settings.id)
584
- }
585
- shouldCloseOnSelect={true}
586
- />
587
- );
588
- break;
589
- case "toggle":
590
- htmlContainer = (
591
- <div>
592
- <Toggle
593
- name={settings.id}
594
- data-show={
595
- settings.show
596
- ? JSON.stringify(settings.show)
597
- : ""
598
- }
599
- checked={
600
- inputValue !== undefined
601
- ? inputValue === ""
602
- ? false
603
- : inputValue === "on"
604
- ? false
605
- : inputValue
606
- : false
607
- }
608
- onChange={onChangeToggle}
609
- />
610
- <span className="fi__toggletxt">
611
- {settings.label}{" "}
612
- {settings.required === true ? "*" : ""}
613
- </span>
614
- </div>
615
- );
616
- break;
617
- case "richeditor":
618
- htmlContainer = (
619
- <ReactQuill
620
- theme="snow"
621
- name={settings.id}
622
- onChange={(value) => {
623
- onChangeRicheditor(value, settings.id);
624
- }}
625
- value={inputValue || ""}
626
- />
627
- );
628
- break;
629
- case "image":
630
- htmlContainer = (
631
- <>
632
- <motion.div
633
- className="progress__bar"
634
- initial={{ width: "0%" }}
635
- animate={{
636
- width:
637
- uploadProgress[settings.id] + "%",
638
- }}
639
- transition={{
640
- duration: 3,
641
- ease: [0.165, 0.84, 0.44, 1.0],
642
- }}
643
- />
644
- <input
645
- type="file"
646
- name={settings.id}
647
- className={inputClass[settings.id]}
648
- onChange={onChangeFile}
649
- ref={inputFile}
650
- style={{ display: "none" }}
651
- />
652
- <div
653
- onClick={() => {
654
- inputFile.current.click();
655
- }}
656
- >
657
- {inputValue && inputValue !== "" ? (
658
- <>
659
- {inputValue.file_url &&
660
- inputValue.file_url !== "" ? (
661
- <img
662
- src={inputValue.file_url}
663
- width="200"
664
- />
665
- ) : (
666
- <img
667
- src={URL.createObjectURL(
668
- inputValue
669
- )}
670
- width="200"
671
- />
672
- )}
673
- </>
674
- ) : (
675
- <div className="imageupload">
676
- <span>
677
- Click here to upload an image
678
- </span>
679
- </div>
680
- )}
681
- </div>
682
- </>
683
- );
684
- break;
685
- default:
686
- htmlContainer = "";
687
- break;
688
- }
689
-
690
- return htmlContainer;
691
- })()}
692
- </div>
693
- );
694
- }
695
-
696
- export default Field;