@visns-studio/visns-components 4.7.2 → 4.7.3

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 (99) hide show
  1. package/package.json +13 -9
  2. package/src/components/cms/DataGrid.jsx +1461 -0
  3. package/src/components/cms/DropZone.jsx +349 -0
  4. package/src/components/cms/Field.jsx +802 -0
  5. package/src/components/cms/Form.jsx +476 -0
  6. package/src/components/cms/generic/CmsDetail.jsx +36 -0
  7. package/src/components/cms/generic/CmsIndex.jsx +73 -0
  8. package/src/components/cms/generic/CmsSort.jsx +125 -0
  9. package/src/components/cms/sorting/Item.jsx +115 -0
  10. package/src/components/cms/sorting/List.jsx +30 -0
  11. package/src/components/crm/AsyncSelect.jsx +125 -0
  12. package/src/components/crm/Autocomplete.jsx +174 -0
  13. package/src/components/crm/Breadcrumb.jsx +52 -0
  14. package/src/components/crm/Call.jsx +220 -0
  15. package/src/components/crm/DataGrid.jsx +2701 -0
  16. package/src/components/crm/Download.jsx +101 -0
  17. package/src/components/crm/Fetch.jsx +119 -0
  18. package/src/components/crm/Field.jsx +1557 -0
  19. package/src/components/crm/Form.jsx +1409 -0
  20. package/src/components/crm/Loader.jsx +29 -0
  21. package/src/components/crm/MultiSelect.jsx +78 -0
  22. package/src/components/crm/Navigation.jsx +619 -0
  23. package/src/components/crm/Notification.jsx +197 -0
  24. package/src/components/crm/QrCode.jsx +83 -0
  25. package/src/components/crm/Select.jsx +58 -0
  26. package/src/components/crm/SelectList.jsx +21 -0
  27. package/src/components/crm/TableFilter.jsx +198 -0
  28. package/src/components/crm/auth/Login.jsx +223 -0
  29. package/src/components/crm/auth/Profile.jsx +280 -0
  30. package/src/components/crm/auth/Reset.jsx +111 -0
  31. package/src/components/crm/auth/Verify.jsx +174 -0
  32. package/src/components/crm/auth/styles/Login.module.scss +243 -0
  33. package/src/components/crm/auth/styles/Profile.module.scss +222 -0
  34. package/src/components/crm/auth/styles/Reset.module.scss +216 -0
  35. package/src/components/crm/auth/styles/Verify.module.scss +216 -0
  36. package/src/components/crm/generic/AuditLog.jsx +108 -0
  37. package/src/components/crm/generic/AuditLogs.jsx +115 -0
  38. package/src/components/crm/generic/GenericAuth.jsx +166 -0
  39. package/src/components/crm/generic/GenericDashboard.jsx +42 -0
  40. package/src/components/crm/generic/GenericDetail.jsx +1499 -0
  41. package/src/components/crm/generic/GenericDynamic.jsx +915 -0
  42. package/src/components/crm/generic/GenericFormBuilder.jsx +1765 -0
  43. package/src/components/crm/generic/GenericIndex.jsx +376 -0
  44. package/src/components/crm/generic/GenericMain.jsx +129 -0
  45. package/src/components/crm/generic/GenericSort.jsx +188 -0
  46. package/src/components/crm/generic/NotificationList.jsx +64 -0
  47. package/src/components/crm/generic/styles/AuditLog.module.scss +147 -0
  48. package/src/components/crm/generic/styles/AuditLogs.module.scss +92 -0
  49. package/src/components/crm/generic/styles/GenericDetail.module.scss +634 -0
  50. package/src/components/crm/generic/styles/GenericDynamic.module.scss +932 -0
  51. package/src/components/crm/generic/styles/GenericFormBuilder.module.scss +944 -0
  52. package/src/components/crm/generic/styles/GenericIndex.module.scss +247 -0
  53. package/src/components/crm/generic/styles/GenericMain.module.scss +91 -0
  54. package/src/components/crm/generic/styles/GenericSort.module.scss +123 -0
  55. package/src/components/crm/generic/styles/NotificationList.module.scss +67 -0
  56. package/src/components/crm/sorting/Item.jsx +117 -0
  57. package/src/components/crm/sorting/List.jsx +32 -0
  58. package/src/components/crm/sorting/styles/Item.module.scss +68 -0
  59. package/src/components/crm/sorting/styles/List.module.scss +68 -0
  60. package/src/components/crm/styles/AsyncSelect.module.scss +8 -0
  61. package/src/components/crm/styles/Autocomplete.module.scss +44 -0
  62. package/src/components/crm/styles/DataGrid.module.scss +210 -0
  63. package/src/components/crm/styles/Field.module.scss +311 -0
  64. package/src/components/crm/styles/Form.module.scss +499 -0
  65. package/src/components/crm/styles/Loader.module.scss +94 -0
  66. package/src/components/crm/styles/MultiSelect.module.scss +8 -0
  67. package/src/components/crm/styles/Navigation.module.scss +978 -0
  68. package/src/components/crm/styles/Notification.module.scss +147 -0
  69. package/src/components/crm/styles/QrCode.module.scss +87 -0
  70. package/src/components/crm/styles/TableFilter.module.scss +52 -0
  71. package/src/components/styles/global.css +73 -0
  72. package/src/index.js +86 -0
  73. package/dist/104e5636d8ddb791614c.woff2 +0 -0
  74. package/dist/11fe6a83d647de5daf95.woff +0 -0
  75. package/dist/141e2a8c7836495afe2a.woff +0 -0
  76. package/dist/2ba5877f7079830b5383.woff +0 -0
  77. package/dist/2d6836f45b2037be41f3.woff +0 -0
  78. package/dist/399.0a0f3e0d21be1057d599.css +0 -8
  79. package/dist/399.b8f57fa3f8c0c10119e4.js +0 -1
  80. package/dist/47d566c3b1293dfd9d77.woff +0 -0
  81. package/dist/6282a13cbba671a71913.woff2 +0 -0
  82. package/dist/78266f551031aa9db127.woff +0 -0
  83. package/dist/7b7da89f1e3fdcbfe36c.woff2 +0 -0
  84. package/dist/7e78e8338af7efeda712.woff2 +0 -0
  85. package/dist/7fa387951673abf164b1.woff2 +0 -0
  86. package/dist/819d59862c2d0640aad8.woff +0 -0
  87. package/dist/b615e1a6c838ea059a56.woff +0 -0
  88. package/dist/b9b1aa739c660c4ce67c.woff2 +0 -0
  89. package/dist/c5f3640b11df9414facb.woff +0 -0
  90. package/dist/da26d162ff5af71d6590.woff2 +0 -0
  91. package/dist/dd5b2912dbf896310865.woff2 +0 -0
  92. package/dist/f282b331272463c1aa6c.woff2 +0 -0
  93. package/dist/index.css +0 -2902
  94. package/dist/index.js +0 -2
  95. package/dist/index.js.LICENSE.txt +0 -150
  96. package/dist/main.83b033670d64419bb497.css +0 -1
  97. package/dist/main.b1723d17cd2d3513ab62.js +0 -1
  98. package/dist/report.html +0 -39
  99. package/dist/runtime.33c276593b23f8035b8d.js +0 -1
@@ -0,0 +1,247 @@
1
+ .grid__row {
2
+ width: 100%;
3
+ display: flex;
4
+ align-items: flex-start;
5
+ flex-wrap: nowrap;
6
+ height: auto;
7
+ gap: 1rem;
8
+ }
9
+
10
+ .grid__three {
11
+ width: 33%;
12
+ background: var(--item-color);
13
+ border-radius: var(--br);
14
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
15
+ box-sizing: border-box;
16
+ overflow: visible;
17
+ position: relative;
18
+ padding: 20px;
19
+ margin: 8px 0;
20
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
21
+ }
22
+
23
+ .grid__half {
24
+ width: 50%;
25
+ background: var(--item-color);
26
+ border-radius: 6px;
27
+ border: 1px solid #dadce0;
28
+ box-sizing: border-box;
29
+ overflow: visible;
30
+ position: relative;
31
+ padding: 20px;
32
+ margin: 8px 0;
33
+ box-shadow: 0 4px 0 rgba(var(--primary-color), 0.05);
34
+ }
35
+
36
+ .grid__full {
37
+ width: 100%;
38
+ background: var(--item-color);
39
+ border-radius: var(--br);
40
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
41
+ box-sizing: border-box;
42
+ overflow: visible;
43
+ position: relative;
44
+ padding: 2px;
45
+ margin: 8px 0;
46
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
47
+ }
48
+
49
+ .grid__dashfull {
50
+ width: 100%;
51
+ background: var(--item-color);
52
+ border-radius: 6px;
53
+ border: 1px solid #dadce0;
54
+ box-sizing: border-box;
55
+ overflow: visible;
56
+ position: relative;
57
+ padding: 20px;
58
+ margin: 8px 0;
59
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
60
+ }
61
+
62
+ .grid__subrow {
63
+ width: 100%;
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ height: auto;
67
+ gap: 0.5rem;
68
+ }
69
+
70
+ .grid__subnav {
71
+ flex: 1;
72
+ background: rgba(var(--item-color-rgb), 1.01);
73
+ border-radius: var(--br);
74
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
75
+ box-sizing: border-box;
76
+ padding: 5px;
77
+ margin: 8px 0;
78
+ height: auto;
79
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
80
+ }
81
+
82
+ .grid__subnav > ul {
83
+ width: 100%;
84
+ list-style: none;
85
+ padding: 0;
86
+ margin: 0;
87
+ display: flex;
88
+ flex-wrap: wrap;
89
+ }
90
+
91
+ .grid__subnav > ul li {
92
+ width: 100%;
93
+ margin-bottom: 3px;
94
+ }
95
+
96
+ .grid__subnav > ul li a {
97
+ width: 100%;
98
+ padding: 8px 20px;
99
+ box-sizing: border-box;
100
+ display: block;
101
+ text-decoration: none;
102
+ background: rgba(var(--primary-color-rgb), 0.05);
103
+ color: var(--primary-color);
104
+ border-radius: 5px;
105
+ transition: background 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
106
+ outline: none;
107
+ cursor: pointer;
108
+ }
109
+
110
+ .grid__subnav > ul li:hover a {
111
+ background: var(--primary-color);
112
+ color: var(--tertiary-color);
113
+ }
114
+
115
+ .grid__subnav > ul li .subactive {
116
+ font-weight: 700;
117
+ background: var(--primary-color);
118
+ color: var(--tertiary-color);
119
+ }
120
+
121
+ .grid__minheight {
122
+ min-height: 300px;
123
+ }
124
+
125
+ .noborder {
126
+ border: none !important;
127
+ }
128
+
129
+ .grid__subcontent {
130
+ flex: 0 1 80%;
131
+ background: var(--item-color);
132
+ border-radius: var(--br);
133
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
134
+ box-sizing: border-box;
135
+ padding: 2px;
136
+ margin: 8px 0;
137
+ height: auto;
138
+ position: relative;
139
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
140
+ }
141
+
142
+ .grid__subcontent h2 {
143
+ color: var(--primary-color);
144
+ font-size: 1.35em;
145
+ padding: 0;
146
+ margin: 0 0 30px 0;
147
+ }
148
+
149
+ .crmtitle {
150
+ border: none;
151
+ min-height: auto;
152
+ padding: 10px 20px;
153
+ margin: 0;
154
+ background: var(--tertiary-color);
155
+ border-radius: var(--br);
156
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
157
+ position: relative;
158
+ }
159
+
160
+ .crmtitle h1 {
161
+ font-weight: 700;
162
+ font-size: 1.45em;
163
+ margin: 0;
164
+ padding: 0.65rem 0;
165
+ }
166
+
167
+ .crmtitle h1 a {
168
+ text-decoration: none;
169
+ color: rgba(var(--secondary-color-rgb), 1.1);
170
+ font-weight: 300;
171
+ }
172
+
173
+ .crmtitle h1 svg {
174
+ color: rgba(var(--primary-color-rgb), 0.25);
175
+ position: relative;
176
+ top: 2px;
177
+ margin: 0 0.25rem;
178
+ }
179
+
180
+ .crmtitleSimple {
181
+ border: none;
182
+ min-height: auto;
183
+ padding: 0.65rem 1rem;
184
+ margin-bottom: 0.15rem;
185
+ background: var(--tertiary-color);
186
+ border-radius: var(--br);
187
+ box-sizing: border-box;
188
+ display: flex;
189
+ flex-wrap: nowrap;
190
+ justify-content: space-between;
191
+ align-items: center;
192
+
193
+ h1 {
194
+ font-size: 1.25rem;
195
+ margin: 0;
196
+ padding: 0;
197
+ }
198
+ }
199
+
200
+ .titleInfo {
201
+ position: absolute;
202
+ right: 2em;
203
+ top: 24px;
204
+ }
205
+
206
+ .titleInfo span {
207
+ font-size: 0.875em;
208
+ color: rgba(var(--paragraph-color-rgb), 0.65);
209
+ }
210
+
211
+ .btn {
212
+ width: max-content;
213
+ display: inline-block;
214
+ position: relative;
215
+ padding: 0.65rem 1rem;
216
+ cursor: pointer;
217
+ font-size: 1rem;
218
+ color: var(--tertiary-color);
219
+ text-decoration: none;
220
+ overflow: hidden;
221
+ background: var(--primary-color);
222
+ border: 1px solid rgba(var(--primary-color--rgb), 1.1);
223
+ border-radius: var(--br);
224
+ outline: none;
225
+ transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1) 0s;
226
+ font-size: 1.25em;
227
+ }
228
+
229
+ .btn:hover {
230
+ color: var(--primary-color);
231
+ background: var(--highlight-color);
232
+ border: 1px solid rgba(var(--highlight-color-rgb), 1.05);
233
+ }
234
+
235
+ .polActions {
236
+ position: fixed;
237
+ bottom: 15px;
238
+ right: 20px;
239
+ width: auto;
240
+ }
241
+
242
+ .polActions button {
243
+ display: block;
244
+ float: left;
245
+ padding: 0.35em 1em;
246
+ margin: 0 0.15em;
247
+ }
@@ -0,0 +1,91 @@
1
+ .header {
2
+ background: var(--primary-color);
3
+ color: var(--primary-color);
4
+ position: fixed;
5
+ top: 0;
6
+ width: 100%;
7
+ z-index: 995;
8
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
9
+ }
10
+
11
+ .headerAlternate {
12
+ background: white;
13
+ color: var(--paragraph-color);
14
+ position: fixed;
15
+ top: 0;
16
+ width: 100%;
17
+ z-index: 995;
18
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
19
+ }
20
+
21
+ .content {
22
+ display: flex;
23
+ flex: 1;
24
+ flex-direction: column;
25
+ background: var(--bg);
26
+
27
+ .content-header {
28
+ background: rgba(var(--tertiary-color-rgb), 1.1);
29
+ border-bottom: 1px solid rgba(0, 0, 0, 0.14);
30
+ box-sizing: border-box;
31
+ padding: 1em;
32
+ height: 52.5px;
33
+ box-shadow: 1px 0px 0px rgba(255, 255, 255, 0.5);
34
+ display: flex;
35
+ flex-wrap: nowrap;
36
+ justify-content: space-between;
37
+ }
38
+
39
+ .content-title {
40
+ width: 40%;
41
+
42
+ h1 {
43
+ padding: 0;
44
+ margin: 0;
45
+ font-size: 1em;
46
+ line-height: 1.25;
47
+ text-transform: uppercase;
48
+ color: var(--primary-color);
49
+ letter-spacing: -0.025em;
50
+ }
51
+ }
52
+
53
+ .content-actions {
54
+ width: 40%;
55
+
56
+ ul {
57
+ display: flex;
58
+ padding: 0;
59
+ margin: 0;
60
+ list-style: none;
61
+ justify-content: flex-end;
62
+
63
+ li {
64
+ padding: 0 10px;
65
+ text-align: center;
66
+
67
+ i {
68
+ font-size: 1.25em;
69
+ }
70
+
71
+ a {
72
+ text-decoration: none;
73
+ color: var(--paragraph-color);
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ .content-main {
80
+ background: var(--bg);
81
+ flex: 1;
82
+ }
83
+ }
84
+
85
+ .padding {
86
+ padding: 5em 1em 1em 1em;
87
+ }
88
+
89
+ .paddingSimple {
90
+ padding: 1rem;
91
+ }
@@ -0,0 +1,123 @@
1
+ .grid {
2
+ width: 100%;
3
+ display: flex;
4
+ align-items: flex-start;
5
+ flex-wrap: nowrap;
6
+ height: auto;
7
+ gap: 1rem;
8
+ }
9
+
10
+ .grid__row {
11
+ width: 100%;
12
+ display: flex;
13
+ align-items: flex-start;
14
+ flex-wrap: nowrap;
15
+ height: auto;
16
+ gap: 1rem;
17
+ }
18
+
19
+ .grid__full {
20
+ width: 100%;
21
+ background: var(--item-color);
22
+ border-radius: var(--br);
23
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
24
+ box-sizing: border-box;
25
+ overflow: visible;
26
+ position: relative;
27
+ padding: 2px;
28
+ margin: 8px 0;
29
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
30
+ }
31
+
32
+ .crmtitle {
33
+ border: none;
34
+ min-height: auto;
35
+ padding: 5px 20px;
36
+ margin: 0;
37
+ background: var(--tertiary-color);
38
+ border-radius: var(--br);
39
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
40
+ position: relative;
41
+ display: flex;
42
+ align-items: center;
43
+
44
+ h1 {
45
+ font-weight: 700;
46
+ font-size: 1.15em;
47
+ margin: 0;
48
+ padding: 0.65rem 0;
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 0.25rem;
52
+
53
+ a {
54
+ text-decoration: none;
55
+ color: rgba(var(--secondary-color-rgb), 1.1);
56
+ }
57
+
58
+ svg {
59
+ color: rgba(var(--primary-color-rgb), 0.25);
60
+ position: relative;
61
+ top: 0;
62
+ margin: 0 0.5rem;
63
+ max-width: 15px;
64
+ }
65
+ }
66
+ }
67
+
68
+ .dragitem {
69
+ list-style: none;
70
+ display: flex;
71
+ justify-content: center;
72
+ align-items: center;
73
+ flex-wrap: wrap;
74
+ border-radius: 5px;
75
+ border: 1px solid rgba(var(--primary-color-rgb), 0.2);
76
+ box-shadow: 0px 0px 20px rgba(var(--primary-color-rgb), 0.25);
77
+ padding: 1.25rem;
78
+ box-sizing: border-box;
79
+ cursor: grab;
80
+ list-style: none;
81
+ color: var(--paragraph-color);
82
+
83
+ svg {
84
+ width: 100%;
85
+ max-width: 18px;
86
+ position: absolute;
87
+ left: 5px;
88
+ top: 5px;
89
+ }
90
+
91
+ .pencil-edit {
92
+ width: 100%;
93
+ max-width: 18px;
94
+ position: absolute;
95
+ left: 5px;
96
+ top: 30px;
97
+ }
98
+
99
+ .trash-delete {
100
+ width: 100%;
101
+ max-width: 18px;
102
+ position: absolute;
103
+ left: 5px;
104
+ top: 60px;
105
+ }
106
+
107
+ .sortimg {
108
+ width: 50px;
109
+ position: relative;
110
+ height: 50px;
111
+ margin-left: auto;
112
+ border-radius: 5px;
113
+ overflow: hidden;
114
+
115
+ img {
116
+ display: block;
117
+ object-fit: cover;
118
+ height: 100%;
119
+ width: 100%;
120
+ overflow: hidden;
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,67 @@
1
+ .grid {
2
+ width: 100%;
3
+ display: flex;
4
+ align-items: flex-start;
5
+ flex-wrap: nowrap;
6
+ height: auto;
7
+ gap: 1rem;
8
+ }
9
+
10
+ .grid__row {
11
+ width: 100%;
12
+ display: flex;
13
+ align-items: flex-start;
14
+ flex-wrap: nowrap;
15
+ height: auto;
16
+ gap: 1rem;
17
+ }
18
+
19
+ .grid__full {
20
+ width: 100%;
21
+ background: var(--item-color);
22
+ border-radius: var(--br);
23
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
24
+ box-sizing: border-box;
25
+ overflow: visible;
26
+ position: relative;
27
+ padding: 2px;
28
+ margin: 8px 0;
29
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
30
+ }
31
+
32
+ .crmtitle {
33
+ border: none;
34
+ min-height: auto;
35
+ padding: 5px 20px;
36
+ margin: 0;
37
+ background: var(--primary-color);
38
+ border-radius: var(--br);
39
+ border: 1px solid rgba(var(--item-color-rgb), 1.15);
40
+ position: relative;
41
+ display: flex;
42
+ align-items: center;
43
+
44
+ h1 {
45
+ color: var(--background-color);
46
+ font-weight: 700;
47
+ font-size: 1.15em;
48
+ margin: 0;
49
+ padding: 0.65rem 0;
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 0.25rem;
53
+
54
+ a {
55
+ text-decoration: none;
56
+ color: var(--secondary-color);
57
+ }
58
+
59
+ svg {
60
+ color: rgba(var(--tertiary-color-rgb), 0.5);
61
+ position: relative;
62
+ top: 0;
63
+ margin: 0 0.5rem;
64
+ max-width: 15px;
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,117 @@
1
+ import React from 'react';
2
+ import { SortableElement, sortableHandle } from 'react-sortable-hoc';
3
+ import { ChevronVertical, Pencil, TrashCan } from 'akar-icons';
4
+
5
+ import styles from './styles/Item.module.scss';
6
+
7
+ const DragHandle = sortableHandle(() => (
8
+ <ChevronVertical className="drag-handle" strokeWidth={1} size={26} />
9
+ ));
10
+
11
+ // Utility function to truncate text
12
+ const truncateText = (text, maxLength) => {
13
+ if (text && text.length > maxLength) {
14
+ return `${text.substring(0, maxLength)}...`;
15
+ }
16
+ return text;
17
+ };
18
+
19
+ const SortableItem = ({
20
+ containerIndex,
21
+ handleClick,
22
+ handleEdit,
23
+ handleDelete,
24
+ showImage,
25
+ value,
26
+ }) => {
27
+ const renderImage = (d) => {
28
+ let htmlContainer = '';
29
+
30
+ if (showImage) {
31
+ const imageUrl = d.image_url || d.file_url;
32
+ htmlContainer = imageUrl ? (
33
+ <div className={styles.sortimg}>
34
+ <img src={imageUrl} alt="" />
35
+ </div>
36
+ ) : (
37
+ <div className={styles.sortimg}>
38
+ {/* Placeholder image */}
39
+ <img
40
+ src="data:image/png;base64,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"
41
+ alt="Placeholder"
42
+ />
43
+ </div>
44
+ );
45
+ }
46
+
47
+ return htmlContainer;
48
+ };
49
+
50
+ const renderEditButton = () => {
51
+ if (!handleEdit) return null;
52
+
53
+ if (showImage) {
54
+ if (
55
+ value.hasOwnProperty('file_title') &&
56
+ value.hasOwnProperty('file_description')
57
+ ) {
58
+ return <EditButton />;
59
+ }
60
+ return null;
61
+ }
62
+
63
+ return <EditButton />;
64
+ };
65
+
66
+ const EditButton = () => (
67
+ <Pencil
68
+ className={styles['pencil-edit']}
69
+ strokeWidth={1}
70
+ size={26}
71
+ onClick={(e) => {
72
+ e.preventDefault();
73
+ e.stopPropagation();
74
+ handleEdit(value);
75
+ }}
76
+ />
77
+ );
78
+
79
+ return (
80
+ <li
81
+ onClick={(e) => {
82
+ e.preventDefault();
83
+ if (handleClick) {
84
+ handleClick(containerIndex);
85
+ }
86
+ }}
87
+ >
88
+ <DragHandle />
89
+ {truncateText(
90
+ value.label || value.file_title || value.file_name,
91
+ 30
92
+ )}
93
+
94
+ {renderImage(value)}
95
+
96
+ {renderEditButton()}
97
+
98
+ {handleDelete && (
99
+ <TrashCan
100
+ className={styles['trash-delete']}
101
+ strokeWidth={1}
102
+ size={26}
103
+ onClick={(e) => {
104
+ e.preventDefault();
105
+ e.stopPropagation();
106
+ handleDelete(
107
+ value.id || containerIndex,
108
+ value.label || value.file_name
109
+ );
110
+ }}
111
+ />
112
+ )}
113
+ </li>
114
+ );
115
+ };
116
+
117
+ export default SortableElement(SortableItem);
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import VisnsSortableItem from './Item';
3
+ import { SortableContainer } from 'react-sortable-hoc';
4
+
5
+ import styles from './styles/List.module.scss';
6
+
7
+ const SortableList = ({
8
+ handleClick,
9
+ handleDelete,
10
+ handleEdit,
11
+ items,
12
+ showImage,
13
+ }) => {
14
+ return (
15
+ <ul className={styles.sortlist}>
16
+ {items.map((value, index) => (
17
+ <VisnsSortableItem
18
+ key={`item-${index}`}
19
+ containerIndex={index}
20
+ index={index}
21
+ handleClick={handleClick}
22
+ handleDelete={handleDelete}
23
+ handleEdit={handleEdit}
24
+ showImage={showImage}
25
+ value={value}
26
+ />
27
+ ))}
28
+ </ul>
29
+ );
30
+ };
31
+
32
+ export default SortableContainer(SortableList);