@gnar-engine/cli 1.0.2 → 1.0.4

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 (161) hide show
  1. package/bootstrap/deploy.localdev.yml +18 -31
  2. package/bootstrap/secrets.localdev.yml +7 -12
  3. package/bootstrap/services/user/Dockerfile +1 -1
  4. package/install.sh +32 -0
  5. package/package.json +1 -1
  6. package/src/config.js +2 -1
  7. package/src/dev/dev.service.js +44 -16
  8. package/src/scaffolder/commands.js +11 -4
  9. package/src/scaffolder/scaffolder.handler.js +228 -55
  10. package/templates/service/Dockerfile.hbs +4 -1
  11. package/templates/service/package.json.hbs +14 -16
  12. package/templates/service/{app.js.hbs → src/app.js.hbs} +8 -4
  13. package/templates/service/{commands → src/commands}/{{serviceName}}.handler.js.hbs +1 -2
  14. package/{bootstrap/services/agent/src/config.js → templates/service/src/mongodb.config.js.hbs} +11 -18
  15. package/templates/service/{config.js.hbs → src/mysql.config.js.hbs} +6 -0
  16. package/{bootstrap/services/agent/src/schema/Agent.schema.js → templates/service/src/schema/{{serviceName}}.schema.js.hbs} +3 -3
  17. package/templates/service/src/services/mongodb.{{serviceName}}.service.js.hbs +70 -0
  18. package/bootstrap/services/agent/Dockerfile +0 -23
  19. package/bootstrap/services/agent/notes.md +0 -28
  20. package/bootstrap/services/agent/package.json +0 -16
  21. package/bootstrap/services/agent/src/app.js +0 -52
  22. package/bootstrap/services/agent/src/commands/agent.handler.js +0 -104
  23. package/bootstrap/services/agent/src/controllers/http.controller.js +0 -44
  24. package/bootstrap/services/agent/src/controllers/message.controller.js +0 -51
  25. package/bootstrap/services/agent/src/db/migrations/01-init.js +0 -50
  26. package/bootstrap/services/agent/src/db/migrations/02-agent-service-init.js +0 -36
  27. package/bootstrap/services/agent/src/policies/agent.policy.js +0 -13
  28. package/bootstrap/services/agent/src/services/agent.service.js +0 -259
  29. package/bootstrap/services/agent/src/services/chatgpt.service.js +0 -46
  30. package/bootstrap/services/agent/src/services/manifest.service.js +0 -21
  31. package/bootstrap/services/portal/Dockerfile +0 -23
  32. package/bootstrap/services/portal/Dockerfile.remote +0 -40
  33. package/bootstrap/services/portal/README.md +0 -22
  34. package/bootstrap/services/portal/nginx.conf +0 -12
  35. package/bootstrap/services/portal/package.json +0 -59
  36. package/bootstrap/services/portal/public/favicon.ico +0 -0
  37. package/bootstrap/services/portal/public/gnar-white.png +0 -0
  38. package/bootstrap/services/portal/public/gnarengine-logo-black.png +0 -0
  39. package/bootstrap/services/portal/public/index.html +0 -43
  40. package/bootstrap/services/portal/public/logo192.png +0 -0
  41. package/bootstrap/services/portal/public/logo512.png +0 -0
  42. package/bootstrap/services/portal/public/manifest.json +0 -25
  43. package/bootstrap/services/portal/public/robots.txt +0 -3
  44. package/bootstrap/services/portal/src/App.js +0 -56
  45. package/bootstrap/services/portal/src/assets/Logo_Anchord_Black.svg +0 -1
  46. package/bootstrap/services/portal/src/assets/Logo_Anchord_Black_Green.svg +0 -1
  47. package/bootstrap/services/portal/src/assets/Logo_Anchord_White_Green.svg +0 -1
  48. package/bootstrap/services/portal/src/assets/activity.svg +0 -3
  49. package/bootstrap/services/portal/src/assets/arrow.svg +0 -3
  50. package/bootstrap/services/portal/src/assets/bin-white.svg +0 -3
  51. package/bootstrap/services/portal/src/assets/bin.svg +0 -3
  52. package/bootstrap/services/portal/src/assets/check.svg +0 -3
  53. package/bootstrap/services/portal/src/assets/chevron.svg +0 -3
  54. package/bootstrap/services/portal/src/assets/contact.svg +0 -3
  55. package/bootstrap/services/portal/src/assets/dots-vertical.svg +0 -5
  56. package/bootstrap/services/portal/src/assets/eye-off.svg +0 -3
  57. package/bootstrap/services/portal/src/assets/eye.svg +0 -4
  58. package/bootstrap/services/portal/src/assets/gnar-engine-black.svg +0 -47
  59. package/bootstrap/services/portal/src/assets/gnar-engine-white.svg +0 -47
  60. package/bootstrap/services/portal/src/assets/gnar_engine.svg +0 -3
  61. package/bootstrap/services/portal/src/assets/gnarengine-logo-black.png +0 -0
  62. package/bootstrap/services/portal/src/assets/home.svg +0 -3
  63. package/bootstrap/services/portal/src/assets/link.svg +0 -3
  64. package/bootstrap/services/portal/src/assets/lock.svg +0 -3
  65. package/bootstrap/services/portal/src/assets/package.svg +0 -4
  66. package/bootstrap/services/portal/src/assets/raffle.svg +0 -3
  67. package/bootstrap/services/portal/src/assets/settings.svg +0 -4
  68. package/bootstrap/services/portal/src/assets/shopping-bag.svg +0 -3
  69. package/bootstrap/services/portal/src/assets/user-black.svg +0 -3
  70. package/bootstrap/services/portal/src/assets/user.svg +0 -3
  71. package/bootstrap/services/portal/src/assets/users.svg +0 -3
  72. package/bootstrap/services/portal/src/assets/wallet.svg +0 -3
  73. package/bootstrap/services/portal/src/css/style.css +0 -1007
  74. package/bootstrap/services/portal/src/data/data.js +0 -70
  75. package/bootstrap/services/portal/src/features/attributeFormRow/AttributeFormRow.jsx +0 -32
  76. package/bootstrap/services/portal/src/features/billingShipping/BillingShipping.jsx +0 -160
  77. package/bootstrap/services/portal/src/features/crud/crudEdit.less +0 -230
  78. package/bootstrap/services/portal/src/features/crud/crudList.less +0 -134
  79. package/bootstrap/services/portal/src/features/crud/crudPage.less +0 -31
  80. package/bootstrap/services/portal/src/features/crudContact/CrudContactList.jsx +0 -108
  81. package/bootstrap/services/portal/src/features/crudContact/CrudContactSingle.jsx +0 -243
  82. package/bootstrap/services/portal/src/features/crudOrder/CrudOrderList.jsx +0 -109
  83. package/bootstrap/services/portal/src/features/crudOrder/CrudOrderSingle.jsx +0 -315
  84. package/bootstrap/services/portal/src/features/crudProducts/CrudProductList.jsx +0 -104
  85. package/bootstrap/services/portal/src/features/crudProducts/CrudProductSingle.jsx +0 -388
  86. package/bootstrap/services/portal/src/features/crudRaffles/CrudRafflesList.jsx +0 -104
  87. package/bootstrap/services/portal/src/features/crudRaffles/CrudRafflesSingle.jsx +0 -208
  88. package/bootstrap/services/portal/src/features/crudSubscription/CrudSubscriptionList.jsx +0 -110
  89. package/bootstrap/services/portal/src/features/crudSubscription/CrudSubscriptionSingle.jsx +0 -261
  90. package/bootstrap/services/portal/src/features/crudUser/CrudUserList.jsx +0 -107
  91. package/bootstrap/services/portal/src/features/crudUser/CrudUserSingle.jsx +0 -402
  92. package/bootstrap/services/portal/src/features/inventoryFormRow/InventoryFormRow.jsx +0 -30
  93. package/bootstrap/services/portal/src/features/lineItems/LineItems.jsx +0 -113
  94. package/bootstrap/services/portal/src/features/loginForm/LoginForm.jsx +0 -56
  95. package/bootstrap/services/portal/src/features/loginForm/loginForm.less +0 -56
  96. package/bootstrap/services/portal/src/features/notes/Notes.jsx +0 -18
  97. package/bootstrap/services/portal/src/features/passwordReset/PasswordResetForm.jsx +0 -96
  98. package/bootstrap/services/portal/src/features/passwordReset/PasswordResetRequestForm.jsx +0 -74
  99. package/bootstrap/services/portal/src/features/priceFormRow/PriceFormRow.jsx +0 -102
  100. package/bootstrap/services/portal/src/features/priceFormRow/priceFormRow.less +0 -24
  101. package/bootstrap/services/portal/src/features/raffleEntriesList/RaffleEntriesList.jsx +0 -99
  102. package/bootstrap/services/portal/src/features/raffleProductFormRow/RaffleProductFormRow.jsx +0 -46
  103. package/bootstrap/services/portal/src/features/sidebar/Sidebar.jsx +0 -64
  104. package/bootstrap/services/portal/src/features/sidebar/sidebar.less +0 -49
  105. package/bootstrap/services/portal/src/features/skus/Skus.jsx +0 -109
  106. package/bootstrap/services/portal/src/features/subscriptionSchedule/SubscriptionSchedule.jsx +0 -44
  107. package/bootstrap/services/portal/src/features/taxonomyFormRow/TaxonomyFormRow.jsx +0 -32
  108. package/bootstrap/services/portal/src/features/user/User.jsx +0 -54
  109. package/bootstrap/services/portal/src/features/user/user.less +0 -57
  110. package/bootstrap/services/portal/src/includes/utilities.js +0 -259
  111. package/bootstrap/services/portal/src/index.js +0 -14
  112. package/bootstrap/services/portal/src/layouts/CrudLayout.jsx +0 -50
  113. package/bootstrap/services/portal/src/layouts/LoginLayout.jsx +0 -17
  114. package/bootstrap/services/portal/src/layouts/PortalLayout.jsx +0 -48
  115. package/bootstrap/services/portal/src/layouts/loginLayout.less +0 -33
  116. package/bootstrap/services/portal/src/layouts/portalLayout.less +0 -67
  117. package/bootstrap/services/portal/src/pages/contacts/Contacts.jsx +0 -199
  118. package/bootstrap/services/portal/src/pages/dashboard/Dashboard.jsx +0 -17
  119. package/bootstrap/services/portal/src/pages/integrations/Integrations.jsx +0 -10
  120. package/bootstrap/services/portal/src/pages/login/Login.jsx +0 -15
  121. package/bootstrap/services/portal/src/pages/login/login.less +0 -10
  122. package/bootstrap/services/portal/src/pages/orders/Orders.jsx +0 -199
  123. package/bootstrap/services/portal/src/pages/passwordReset/PasswordResetPage.jsx +0 -15
  124. package/bootstrap/services/portal/src/pages/passwordResetRequest/PasswordResetRequestPage.jsx +0 -15
  125. package/bootstrap/services/portal/src/pages/payments/Payments.jsx +0 -10
  126. package/bootstrap/services/portal/src/pages/portal/Portal.jsx +0 -43
  127. package/bootstrap/services/portal/src/pages/products/Products.jsx +0 -212
  128. package/bootstrap/services/portal/src/pages/raffleEntries/RaffleEntries.jsx +0 -124
  129. package/bootstrap/services/portal/src/pages/raffles/Raffles.jsx +0 -186
  130. package/bootstrap/services/portal/src/pages/reports/Reports.jsx +0 -10
  131. package/bootstrap/services/portal/src/pages/settings/Settings.jsx +0 -10
  132. package/bootstrap/services/portal/src/pages/subscriptions/Subscriptions.jsx +0 -199
  133. package/bootstrap/services/portal/src/pages/users/Users.jsx +0 -193
  134. package/bootstrap/services/portal/src/pages/users/users.less +0 -25
  135. package/bootstrap/services/portal/src/slices/authSlice.js +0 -71
  136. package/bootstrap/services/portal/src/store/configureStore.js +0 -12
  137. package/bootstrap/services/portal/src/styles/global.less +0 -159
  138. package/bootstrap/services/portal/src/styles/inputs.less +0 -157
  139. package/bootstrap/services/portal/src/styles/main.less +0 -26
  140. package/bootstrap/services/portal/src/ui/collapsible/Collapsible.jsx +0 -97
  141. package/bootstrap/services/portal/src/ui/collapsible/collapsible.less +0 -23
  142. package/bootstrap/services/portal/src/ui/customCheckbox/CustomCheckbox.jsx +0 -17
  143. package/bootstrap/services/portal/src/ui/customCheckbox/customCheckbox.less +0 -42
  144. package/bootstrap/services/portal/src/ui/customMultiSelect/CustomMultiSelect.jsx +0 -63
  145. package/bootstrap/services/portal/src/ui/customMultiSelect/CustomMultiSelectPeriod.jsx +0 -63
  146. package/bootstrap/services/portal/src/ui/customSelect/CustomSelect.jsx +0 -63
  147. package/bootstrap/services/portal/src/ui/customSelect/customSelect.less +0 -92
  148. package/bootstrap/services/portal/src/ui/goBack/GoBack.jsx +0 -19
  149. package/bootstrap/services/portal/src/ui/loader/Loader.jsx +0 -12
  150. package/bootstrap/services/portal/src/ui/pagination/Pagination.jsx +0 -23
  151. package/bootstrap/services/portal/src/ui/repeater/Repeater.jsx +0 -29
  152. package/bootstrap/services/portal/src/ui/saveButton/SaveButton.jsx +0 -69
  153. package/bootstrap/services/portal/src/ui/saveButton/saveButton.less +0 -0
  154. package/bootstrap/services/user/src/db/seeders/development/02-portal-admin-user.js +0 -27
  155. package/templates/service/schema/{{serviceName}}.schema.js.hbs +0 -14
  156. /package/templates/service/{controllers → src/controllers}/http.controller.js.hbs +0 -0
  157. /package/templates/service/{controllers → src/controllers}/message.controller.js.hbs +0 -0
  158. /package/templates/service/{db → src/mysql.db}/migrations/01-init.js.hbs +0 -0
  159. /package/templates/service/{db → src/mysql.db}/migrations/02-{{lowerCase serviceName}}-service-init.js.hbs +0 -0
  160. /package/templates/service/{policies → src/policies}/{{serviceName}}.policy.js.hbs +0 -0
  161. /package/templates/service/{services/{{serviceName}}.service.js.hbs → src/services/mysql.{{serviceName}}.service.js.hbs} +0 -0
@@ -1,108 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import gnarEngine from '@gnar-engine/js-client';
3
- import CustomCheckbox from '../../ui/customCheckbox/CustomCheckbox';
4
-
5
- const CrudContactList = ({ setSelectedSingleItemId, setView, selectedContactIds, setSelectedContactIds, contacts, message}) => {
6
-
7
- const allSelected = contacts.length > 0 && selectedContactIds.size === contacts.length;
8
-
9
- const toggleContactSelection = (contactId) => {
10
- setSelectedContactIds(prev => {
11
- const newSet = new Set(prev);
12
- if (newSet.has(contactId)) {
13
- newSet.delete(contactId);
14
- } else {
15
- newSet.add(contactId);
16
- }
17
- return newSet;
18
- });
19
- };
20
-
21
-
22
- const toggleSelectAll = () => {
23
- if (allSelected) {
24
- setSelectedContactIds(new Set());
25
- } else {
26
- setSelectedContactIds(new Set(contacts.map(contact => contact.id)));
27
- }
28
- };
29
-
30
-
31
- const handleEditClick = (product) => {
32
- setSelectedSingleItemId(product.id);
33
- setView('single');
34
- };
35
-
36
- const columns = [
37
- { columnLabel: 'ID', dataKey: 'id' },,
38
- { columnLabel: 'First Name', dataKey: 'firstName' },
39
- { columnLabel: 'Last Name', dataKey: 'lastName' },
40
- { columnLabel: 'Email', dataKey: 'email' },
41
- { columnLabel: 'Date Added', dataKey: 'createdAt' }
42
- ];
43
-
44
-
45
- return (
46
- <div className="">
47
- <div className='pagination-labels-cont'>
48
- <div className='pagination-count'>
49
- Showing {contacts.length} of {contacts.length} contact{contacts.length !== 1 ? 's' : ''}
50
- </div>
51
- <div className="pagination-count">
52
- {selectedContactIds.size} of {contacts.length} user{contacts.length !== 1 ? 's' : ''} selected
53
- </div>
54
- </div>
55
- <div className='crud-list'>
56
- <table className='custom-table'>
57
- <thead>
58
- <tr>
59
- <th className="checkbox">
60
- <CustomCheckbox
61
- name="selectAll"
62
- checked={allSelected}
63
- setChecked={toggleSelectAll}
64
- />
65
- </th>
66
- {columns.map(column => (
67
- <th key={column.columnLabel}>{column.columnLabel}</th>
68
- ))}
69
- </tr>
70
- </thead>
71
-
72
- <tbody>
73
- {message ? (
74
- <tr>
75
- <td colSpan={columns.length + 1}>{message}</td>
76
- </tr>
77
- ) : (
78
- contacts.length > 0 ? (
79
- contacts.map(contact => (
80
- <tr key={contact.id} onClick={() => handleEditClick(contact)}>
81
- <td>
82
- <CustomCheckbox
83
- name={`checkbox-${contact.id}`}
84
- checked={selectedContactIds.has(contact.id)}
85
- setChecked={() => toggleContactSelection(contact.id)}
86
- />
87
- </td>
88
- {columns.map(column => (
89
- <td key={column.dataKey}>{contact[column.dataKey]}</td>
90
- ))}
91
- </tr>
92
- ))
93
- ) : (
94
- <tr>
95
- <td colSpan={columns.length + 1}>No contacts found</td>
96
- </tr>
97
- )
98
- )}
99
- </tbody>
100
- </table>
101
- </div>
102
- </div>
103
-
104
- );
105
-
106
- };
107
-
108
- export default CrudContactList;
@@ -1,243 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import gnarEngine from '@gnar-engine/js-client';
3
- import DatePicker from "react-datepicker";
4
- import SaveButton from "../../ui/saveButton/SaveButton";
5
-
6
- const CrudContactSingle = ({ loading, setLoading, contact, setView, refreshSelectedContact, setContact, fetchContacts, formatDate, setSelectedSingleItemId }) => {
7
-
8
- const [formData, setFormData] = useState({
9
- firstName: '',
10
- lastName: '',
11
- email: '',
12
- phone: '',
13
- dateOfBirth: '',
14
- marketingOptIn: false,
15
- });
16
- const [validationErrors, setValidationErrors] = useState([]);
17
-
18
-
19
- // Load contact details if editing
20
- useEffect(() => {
21
- if (contact) {
22
- setFormData({
23
- firstName: contact.firstName,
24
- lastName: contact.lastName,
25
- email: contact.email,
26
- phone: contact.phone,
27
- dateOfBirth: contact.dateOfBirth,
28
- marketingOptIn: contact.marketingOptIn || false,
29
- });
30
- }
31
- }, [contact]);
32
-
33
-
34
-
35
- const handleSubmit = async (e) => {
36
- e.preventDefault();
37
- setLoading('loading');
38
- setValidationErrors([]);
39
-
40
- try {
41
-
42
- if (contact) {
43
- const response = await gnarEngine.contacts.update(contact._id, formData);
44
- console.log('response:', response);
45
-
46
- setLoading('success');
47
- setTimeout(() => {
48
- setLoading(null);
49
- fetchContacts();
50
- refreshSelectedContact();
51
- }, 3000);
52
-
53
- refreshSelectedContact();
54
- } else {
55
-
56
- const response = await gnarEngine.contacts.createContact({
57
- contacts : [formData]
58
- });
59
- console.log('response:', response);
60
-
61
- if (response.error) {
62
- setValidationErrors(response.error);
63
- } else {
64
-
65
- setLoading('success');
66
- setTimeout(() => {
67
- setLoading(null);
68
- fetchContacts();
69
- setView('list');
70
- }, 3000);
71
-
72
- }
73
- }
74
- }
75
- catch (error) {
76
- console.error('Error updating contact:', error);
77
- setValidationErrors(['Error updating contact']);
78
- setTimeout(() => {
79
- setLoading(null);
80
- }, 3000);
81
- }
82
-
83
-
84
- }
85
-
86
- // handle delete user
87
- const handleDelete = async () => {
88
- if (window.confirm('Are you sure you want to delete this contact?')) {
89
- try {
90
- setLoading('loading');
91
-
92
- await gnarEngine.contacts.delete(contact._id);
93
-
94
- setLoading('success');
95
- setTimeout(() => {
96
- setLoading(null);
97
- }, 3000);
98
-
99
- refreshSelectedContact();
100
- setView('list');
101
-
102
- } catch (error) {
103
-
104
- setLoading('error');
105
- console.error('Error deleting contact:', error);
106
- }
107
- } else {
108
- console.log('Deletion canceled');
109
- }
110
- };
111
-
112
-
113
-
114
-
115
-
116
- return (
117
-
118
- <div className="single-edit contact">
119
- {validationErrors.length > 0 &&
120
- <div className="error-messages">
121
- {validationErrors.map((error, index) => {
122
- return <p key={index}>{error}</p>
123
- })}
124
- </div>
125
- }
126
-
127
- <div className='single-edit-header'>
128
- <div className='single-edit-header-left'>
129
- <h2>{contact ? 'Edit Contact' : 'Add New Contact'}</h2>
130
- </div>
131
- <div className='single-edit-header-right'>
132
- <div className="flex-row-buttons-cont">
133
- <button onClick={() => {
134
- setView('list');
135
- setContact(null);
136
- setSelectedSingleItemId(null);
137
- }} className="secondaryButton">
138
- Back
139
- </button>
140
- <button onClick={handleDelete} className="secondaryButton">Delete</button>
141
- <SaveButton
142
- save={handleSubmit}
143
- loading={loading}
144
- textCreate="Add Contact"
145
- textCreateLoading="Saving..."
146
- textCreateSuccess="Saved"
147
- textCreateError="Error"
148
- textUpdate="Save"
149
- textUpdateLoading="Updating..."
150
- textUpdateSuccess="Updated"
151
- textUpdateError="Error"
152
- isUpdating={!!contact}
153
- />
154
- </div>
155
- </div>
156
- </div>
157
- <div className="card">
158
- <div className='card-header'>
159
- <h2>Contact Details</h2>
160
- </div>
161
- <div className='card-content'>
162
- <form onSubmit={handleSubmit}>
163
- <div className="form-group">
164
- <label htmlFor="firstName">First Name</label>
165
- <input
166
- type="text"
167
- id="firstName"
168
- name="firstName"
169
- value={formData.firstName}
170
- onChange={(e) => setFormData({ ...formData, firstName: e.target.value })}
171
- />
172
- </div>
173
- <div className="form-group">
174
- <label htmlFor="lastName">Last Name</label>
175
- <input
176
- type="text"
177
- id="lastName"
178
- name="lastName"
179
- value={formData.lastName}
180
- onChange={(e) => setFormData({ ...formData, lastName: e.target.value })}
181
- />
182
- </div>
183
- <div className="form-group">
184
- <label htmlFor="email">Email</label>
185
- <input
186
- type="email"
187
- id="email"
188
- name="email"
189
- value={formData.email}
190
- onChange={(e) => setFormData({ ...formData, email: e.target.value })}
191
- />
192
- </div>
193
- <div className="form-group">
194
- <label htmlFor="phone">Phone</label>
195
- <input
196
- type="text"
197
- id="phone"
198
- name="phone"
199
- value={formData.phone}
200
- onChange={(e) => setFormData({ ...formData, phone: e.target.value })}
201
- />
202
- </div>
203
- <div className="form-group">
204
- <label htmlFor="dateOfBirth">Date of Birth (DD/MM/YYYY)</label>
205
- <DatePicker
206
- selected={formData.dateOfBirth ? new Date(formData.dateOfBirth) : null}
207
- onChange={(date) => {
208
- const formattedDate = date.toISOString().split('T')[0]; // Convert to YYYY-MM-DD format
209
- setFormData({ ...formData, dateOfBirth: formattedDate });
210
- }}
211
- dateFormat="dd/MM/yyyy"
212
- />
213
- </div>
214
- {/* marketingOptIn */}
215
- <div className="form-group">
216
- <label htmlFor="marketingOptIn">
217
- <input
218
- type="checkbox"
219
- id="marketingOptIn"
220
- name="marketingOptIn"
221
- checked={formData.marketingOptIn}
222
- onChange={(e) => setFormData({ ...formData, marketingOptIn: e.target.checked })}
223
- />
224
- Marketing Opt-In
225
- </label>
226
-
227
- </div>
228
- </form>
229
- <div>
230
- <p><strong>Date Added: </strong>{formatDate(contact?.createdAt)}</p>
231
- </div>
232
- </div>
233
-
234
-
235
-
236
- </div>
237
- </div>
238
-
239
- );
240
-
241
- };
242
-
243
- export default CrudContactSingle;
@@ -1,109 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import gnarEngine from '@gnar-engine/js-client';
3
- import CustomCheckbox from '../../ui/customCheckbox/CustomCheckbox';
4
-
5
- const CrudOrderList = ({ setSelectedSingleItemId, setView, selectedOrderIds, setSelectedOrderIds, orders, message }) => {
6
-
7
- const allSelected = orders.length > 0 && selectedOrderIds.size === orders.length;
8
-
9
- const toggleContactSelection = (orderId) => {
10
- setSelectedOrderIds(prev => {
11
- const newSet = new Set(prev);
12
- if (newSet.has(orderId)) {
13
- newSet.delete(orderId);
14
- } else {
15
- newSet.add(orderId);
16
- }
17
- return newSet;
18
- });
19
- };
20
-
21
-
22
- const toggleSelectAll = () => {
23
- if (allSelected) {
24
- setSelectedOrderIds(new Set());
25
- } else {
26
- setSelectedOrderIds(new Set(orders.map(order => order.id)));
27
- }
28
- };
29
-
30
- const handleEditClick = (product) => {
31
- setSelectedSingleItemId(product.id);
32
- setView('single');
33
- };
34
-
35
- const columns = [
36
- { columnLabel: 'Order', dataKey: 'id' },
37
- { columnLabel: 'Type', dataKey: 'type' },
38
- { columnLabel: 'First Name', dataKey: 'firstName' },
39
- { columnLabel: 'Last Name', dataKey: 'lastName' },
40
- { columnLabel: 'Status', dataKey: 'status' },
41
- { columnLabel: 'Total', dataKey: 'total' },
42
- { columnLabel: 'Date added', dataKey: 'createdAt' },
43
- ];
44
-
45
-
46
- return (
47
- <div className="">
48
- <div className='pagination-labels-cont'>
49
- <div className='pagination-count'>
50
- Showing {orders.length} of {orders.length} order{orders.length !== 1 ? 's' : ''}
51
- </div>
52
- <div className="pagination-count">
53
- {selectedOrderIds.size} of {orders.length} order{orders.length !== 1 ? 's' : ''} selected
54
- </div>
55
- </div>
56
- <div className='crud-list'>
57
- <table className='custom-table'>
58
- <thead>
59
- <tr>
60
- <th className="checkbox">
61
- <CustomCheckbox
62
- name="selectAll"
63
- checked={allSelected}
64
- setChecked={toggleSelectAll}
65
- />
66
- </th>
67
- {columns.map(column => (
68
- <th key={column.columnLabel}>{column.columnLabel}</th>
69
- ))}
70
- </tr>
71
- </thead>
72
-
73
- <tbody>
74
- {message ? (
75
- <tr>
76
- <td colSpan={columns.length + 1}>{message}</td>
77
- </tr>
78
- ) : (
79
- orders.length > 0 ? (
80
- orders.map(order => (
81
- <tr key={order.id} onClick={() => handleEditClick(order)}>
82
- <td>
83
- <CustomCheckbox
84
- name={`checkbox-${order.id}`}
85
- checked={selectedOrderIds.has(order.id)}
86
- setChecked={() => toggleContactSelection(order.id)}
87
- />
88
- </td>
89
- {columns.map(column => (
90
- <td key={column.dataKey}>{order[column.dataKey]}</td>
91
- ))}
92
- </tr>
93
- ))
94
- ) : (
95
- <tr>
96
- <td colSpan={columns.length + 1}>No orders found</td>
97
- </tr>
98
- )
99
- )}
100
- </tbody>
101
- </table>
102
- </div>
103
- </div>
104
-
105
- );
106
-
107
- };
108
-
109
- export default CrudOrderList;