@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,157 +0,0 @@
1
- input[type="text"],
2
- input[type="password"],
3
- input[type="email"],
4
- input[type="number"] {
5
- width: 100%;
6
- padding: 6px 10px;
7
- margin: 10px 0;
8
- border: 1px solid @grey-mid-1;
9
- background: @white;
10
- border-radius: 25px;
11
- box-sizing: border-box;
12
- font-size: 14px;
13
- color: @dark-1;
14
- }
15
- input:focus {
16
- outline: none;
17
- border: 1px solid @green-1;
18
- }
19
- textarea {
20
- font-family: 'Roboto', sans-serif;
21
- width: 100%;
22
- padding: 10px;
23
- margin: 10px 0;
24
- border: 1px solid @grey-mid-1;
25
- background: @white;
26
- border-radius: 4px;
27
- box-sizing: border-box;
28
- font-size: 14px;
29
- color: @dark-1;
30
- }
31
-
32
- button,
33
- .mainButton {
34
- padding: 6px 10px;
35
- margin: 10px 0;
36
- border: none;
37
- background: @green-1;
38
- color: @white;
39
- border-radius: 25px;
40
- font-size: 14px;
41
- cursor: pointer;
42
- transition-duration: 0.4s;
43
- width: 150px;
44
- border: 1px solid @green-1;
45
- text-decoration: none;
46
- max-height: 40px;
47
-
48
- &.wide {
49
- width: 215px
50
- }
51
- }
52
- button:hover,
53
- .mainButton:hover {
54
- opacity: 0.9;
55
- cursor: pointer;
56
- }
57
- .secondaryButton {
58
- padding: 6px 10px;
59
- margin: 10px 0;
60
- border: none;
61
- background: @dark-grey-1;
62
- color: @white;
63
- border-radius: 25px;
64
- font-size: 14px;
65
- cursor: pointer;
66
- transition-duration: 0.4s;
67
- width: 150px;
68
- border: 1px solid @dark-grey-1;
69
- text-decoration: none;
70
- max-height: 40px;
71
-
72
- &.wide {
73
- width: 215px
74
- }
75
- }
76
- .secondaryButton:hover {
77
- opacity: 0.9;
78
- cursor: pointer;
79
- }
80
- .button-cont {
81
- width: 100%;
82
- display: inline-block;
83
-
84
- &.right {
85
- text-align: right;
86
- }
87
- }
88
- .arrowButton {
89
- width: 30px;
90
- height: 30px;
91
- background: @green-1;
92
- color: @white;
93
- border: none;
94
- border-radius: 50%;
95
- cursor: pointer;
96
- }
97
- button.bin-icon {
98
- background: none;
99
- border: none;
100
- width: 30px;
101
- height: 30px;
102
-
103
- &.white {
104
- padding-right: 50px;
105
- }
106
- }
107
- .pdfButton {
108
- display: inline-block;
109
- text-align: center;
110
- line-height: 1.2em;
111
- box-sizing: border-box;
112
- }
113
-
114
- button.success::after {
115
- content: '✔';
116
- color: @dark-1;
117
- margin-left: 8px;
118
- font-size: 14px;
119
- }
120
-
121
- button.error::after {
122
- content: '✘';
123
- color: @red-1;
124
- margin-left: 8px;
125
- font-size: 16px;
126
- }
127
-
128
- button.grey-btn {
129
- color: @green-1;
130
- border: 1px solid @grey-mid-1;
131
- background: @grey-light-1;
132
- }
133
-
134
- .date-selector-cont {
135
- width: 100%;
136
- display: inline-block;
137
- }
138
- .react-datepicker-wrapper {
139
- width: 300px;
140
- margin-bottom: 10px;
141
-
142
- .react-datepicker__input-container {
143
- width: 100%;
144
- }
145
- }
146
- .text-button {
147
- background: none;
148
- border: none;
149
- color: @green-1;
150
- padding: 0px;
151
- width: auto !important;
152
-
153
- &:hover {
154
- cursor: pointer;
155
- opacity: 0.8;
156
- }
157
- }
@@ -1,26 +0,0 @@
1
-
2
- // GLOBAL
3
- @import "global.less";
4
- @import "inputs.less";
5
-
6
- // LAYOUTS
7
- @import "../layouts/loginLayout.less";
8
- @import "../layouts/portalLayout.less";
9
-
10
- // PAGES
11
- @import "../pages/login/login.less";
12
- @import "../pages/users/users.less";
13
-
14
- // FEATURES
15
- @import "../features/loginForm/loginForm.less";
16
- @import "../features/sidebar/sidebar.less";
17
- @import "../features/user/user.less";
18
- @import "../features/crud/crudList.less";
19
- @import "../features/crud/crudEdit.less";
20
- @import "../features/crud/crudPage.less";
21
- @import "../features/priceFormRow/priceFormRow.less";
22
-
23
- // COMPONENTS
24
- @import "../ui/collapsible/collapsible.less";
25
- @import "../ui/customCheckbox/customCheckbox.less";
26
- @import "../ui/customSelect/customSelect.less";
@@ -1,97 +0,0 @@
1
- import React, {useEffect, useState, useRef} from "react";
2
-
3
-
4
- export default function Collapsible({children, title, open, classNames}) {
5
-
6
- const [isOpen, setIsOpen] = useState(open);
7
- const [contentHeight, setContentHeight] = useState("0px");
8
- const collapsibleContentInner = useRef(null);
9
-
10
- classNames += " collapsible";
11
-
12
- function handleCollapsibleToggle() {
13
- setIsOpen(!isOpen);
14
- }
15
-
16
- const handleSetContentHeight = () => {
17
-
18
- if (!collapsibleContentInner.current) {
19
- return;
20
- }
21
-
22
- const content = collapsibleContentInner.current;
23
- const newContentHeight = content.scrollHeight + "px";
24
-
25
- if (isOpen) {
26
- setContentHeight(newContentHeight);
27
- }
28
- else {
29
- setContentHeight("0px");
30
- }
31
-
32
- }
33
-
34
- const preSetContentHeight = () => {
35
-
36
- if (!collapsibleContentInner.current) {
37
- return;
38
- }
39
-
40
- const content = collapsibleContentInner.current;
41
- const newContentHeight = content.scrollHeight + "px";
42
-
43
- setContentHeight(newContentHeight);
44
- }
45
-
46
- const unsetMaxHeight = () => {
47
- setContentHeight("none");
48
- }
49
-
50
- // handle toggle
51
- useEffect(() => {
52
-
53
- // closing
54
- if (!isOpen) {
55
- preSetContentHeight();
56
- }
57
-
58
- // opening
59
- if (isOpen) {
60
- handleSetContentHeight();
61
- setTimeout(() => {
62
- unsetMaxHeight();
63
- }, (300));
64
- }
65
-
66
- }, [isOpen]);
67
-
68
- // handle content height change
69
- useEffect(() => {
70
-
71
- if (!isOpen) {
72
- setTimeout(() => {
73
- handleSetContentHeight();
74
- }, (0));
75
- }
76
-
77
- }, [contentHeight]);
78
-
79
- useEffect(() => {
80
- handleSetContentHeight();
81
- }, []);
82
-
83
-
84
- return (
85
- <div className={`collapsible-cont ${classNames}`}>
86
- <div className={`collapsible-header ${isOpen ? "open" : ""}`} onClick={handleCollapsibleToggle}>
87
- <h3>{title}</h3>
88
- <span>{isOpen ? "-" : "+"}</span>
89
- </div>
90
- <div className={`collapsible-content ${isOpen ? "collapsible-content-open" : ""}`} style={{ maxHeight: contentHeight }}>
91
- <div className="collapsible-content-inner" ref={collapsibleContentInner}>
92
- {children}
93
- </div>
94
- </div>
95
- </div>
96
- );
97
- }
@@ -1,23 +0,0 @@
1
- .collapsible-header {
2
- display: flex;
3
- justify-content: space-between;
4
-
5
- h3 {
6
- margin: 0px;
7
- }
8
-
9
- &:hover {
10
- cursor: pointer;
11
- }
12
- }
13
-
14
- .collapsible-content {
15
- overflow: hidden;
16
- transition-duration: 0.5s;
17
- }
18
- .collapsible-content-open {
19
- margin-top: 30px;
20
- }
21
- .collapsible-content-inner ul {
22
- margin: 0px;
23
- }
@@ -1,17 +0,0 @@
1
- import React from "react";
2
-
3
-
4
- const CustomCheckbox = ({name, label, checked, setChecked}) => {
5
-
6
- return (
7
- <div
8
- className={`custom-checkbox ${checked && 'checked'}`}
9
- onClick={(e) => e.stopPropagation()}
10
- >
11
- <input type="checkbox" id={name} name={name} checked={checked} onChange={() => setChecked(!checked)} />
12
- <label htmlFor={name}>{label}</label>
13
- </div>
14
- )
15
- }
16
-
17
- export default CustomCheckbox;
@@ -1,42 +0,0 @@
1
- .custom-checkbox {
2
- position: relative;
3
- margin-top: 15px;
4
- margin-bottom: 10px;
5
-
6
- input {
7
- opacity: 0;
8
- position: absolute;
9
- left: 0px;
10
- min-width: 18px;
11
- min-height: 18px;
12
-
13
- &:hover {
14
- cursor: pointer;
15
- }
16
- }
17
- label {
18
- padding-left: 20px;
19
- transition-duration: 0.1s;
20
- box-sizing: border-box;
21
-
22
- &:hover {
23
- cursor: pointer;
24
- opacity: 0.8;
25
- }
26
- }
27
-
28
- &:before {
29
- content: '';
30
- min-width: 18px;
31
- min-height: 18px;
32
- background: #F6F8F9;
33
- border: 1px solid #E4E4E4;
34
- border-radius: 6px;
35
- position: absolute;
36
- left: 0px;
37
- }
38
- &.checked:before {
39
- content: '';
40
- background: #F6F8F9 url('../assets/check.svg') no-repeat center center;
41
- }
42
- }
@@ -1,63 +0,0 @@
1
- import React, { useState } from "react";
2
-
3
- const CustomMultiSelect = ({placeholder, name, options, labelKey, icon = null, setSelectedOption, selectedOptions}) => {
4
-
5
- const [isOpen, setIsOpen] = useState(false);
6
- const [isClosing, setIsClosing] = useState(false);
7
-
8
- // Close dropdown
9
- const closeDropdown = () => {
10
- setIsClosing(true);
11
- setIsOpen(false);
12
- setTimeout(() => {
13
- setIsClosing(false);
14
- }, 300);
15
- };
16
-
17
- // Open dropdown
18
- const openDropdown = () => {
19
- setIsOpen(true);
20
- setIsClosing(false);
21
- };
22
-
23
- // Handle click for opening and closing
24
- const handleClick = () => {
25
- if (!isOpen) {
26
- openDropdown();
27
- } else {
28
- closeDropdown();
29
- }
30
- };
31
-
32
- return (
33
- <>
34
- {placeholder && name && setSelectedOption &&
35
- <div className={`custom-select ${isOpen && "open"} ${isClosing ? "closing" : ""}`}>
36
- <div className="custom-select-input" id={name} name={name} onClick={handleClick}>
37
- {icon && <img src={icon} alt="icon" />}
38
- {selectedOptions && selectedOptions.length >= 1 && selectedOptions[0] && selectedOptions[0][labelKey] ? (
39
- selectedOptions.map((selectedOption, index) => (
40
- <span>{selectedOption[labelKey]} {index + 1 !== selectedOptions.length && ', '}</span>
41
- ))
42
- ) : (
43
- <span>{placeholder}</span>
44
- )}
45
- </div>
46
- {isOpen && (
47
- <div className="custom-select-options" onMouseLeave={closeDropdown}>
48
- <div className="custom-select-options-inner">
49
- {options && options.map((option, index) => (
50
- <div key={index} className="custom-select-option" onClick={() => {setSelectedOption(option)}}>
51
- <span>{option[labelKey]}</span>
52
- </div>
53
- ))}
54
- </div>
55
- </div>
56
- )}
57
- </div>
58
- }
59
- </>
60
- )
61
- }
62
-
63
- export default CustomMultiSelect;
@@ -1,63 +0,0 @@
1
- import React, {useState, useEffect, useRef} from "react";
2
-
3
- const CustomMultiSelectPeriod = ({placeholder, name, options, icon = null, setSelectedOption, selectedOptions}) => {
4
-
5
- const [isOpen, setIsOpen] = useState(false);
6
- const [isClosing, setIsClosing] = useState(false);
7
-
8
- // Close dropdown
9
- const closeDropdown = () => {
10
- setIsClosing(true);
11
- setIsOpen(false);
12
- setTimeout(() => {
13
- setIsClosing(false);
14
- }, 300);
15
- };
16
-
17
- // Open dropdown
18
- const openDropdown = () => {
19
- setIsOpen(true);
20
- setIsClosing(false);
21
- };
22
-
23
- // Handle click for opening and closing
24
- const handleClick = () => {
25
- if (!isOpen) {
26
- openDropdown();
27
- } else {
28
- closeDropdown();
29
- }
30
- };
31
-
32
- return (
33
- <>
34
- {placeholder && name && options && setSelectedOption && selectedOptions &&
35
- <div className={`custom-select ${isOpen && "open"} ${isClosing ? "closing" : ""}`}>
36
- <div className="custom-select-input" id={name} name={name} onClick={handleClick}>
37
- {icon && <img src={icon} alt="icon" />}
38
- {selectedOptions.length >= 1 && selectedOptions[0] && selectedOptions[0].period_name ? (
39
- selectedOptions.map((selectedPeriod, index) => (
40
- <span>{selectedPeriod.period_name} {selectedPeriod.calendar_year} {index + 1 !== selectedOptions.length && ', '}</span>
41
- ))
42
- ) : (
43
- <span>{placeholder}</span>
44
- )}
45
- </div>
46
- {isOpen && (
47
- <div className="custom-select-options" onMouseLeave={closeDropdown}>
48
- <div className="custom-select-options-inner">
49
- {options.map((period, index) => (
50
- <div key={index} className="custom-select-option" onClick={() => {setSelectedOption(period)}}>
51
- <span>{period.period_name} {period.calendar_year}</span>
52
- </div>
53
- ))}
54
- </div>
55
- </div>
56
- )}
57
- </div>
58
- }
59
- </>
60
- )
61
- }
62
-
63
- export default CustomMultiSelectPeriod;
@@ -1,63 +0,0 @@
1
- import React, { useState } from "react";
2
-
3
- const CustomSelect = ({placeholder, name, options, labelKey, icon = null, setSelectedOption, selectedOption}) => {
4
-
5
- const [isOpen, setIsOpen] = useState(false);
6
- const [isClosing, setIsClosing] = useState(false);
7
-
8
- // Close dropdown
9
- const closeDropdown = () => {
10
- setIsClosing(true);
11
- setIsOpen(false);
12
- setTimeout(() => {
13
- setIsClosing(false);
14
- }, 300);
15
- };
16
-
17
- // Open dropdown
18
- const openDropdown = () => {
19
- setIsOpen(true);
20
- setIsClosing(false);
21
- };
22
-
23
- // Handle click for opening and closing
24
- const handleClick = () => {
25
- if (!isOpen) {
26
- openDropdown();
27
- } else {
28
- closeDropdown();
29
- }
30
- };
31
-
32
- return (
33
- <>
34
- {placeholder && name && options && labelKey && setSelectedOption &&
35
- <div className={`custom-select ${isOpen && "open"} ${isClosing ? "closing" : ""}`}>
36
- <div className="custom-select-input" id={name} name={name} onClick={handleClick}>
37
- {icon && <img src={icon} alt="icon" />}
38
- {selectedOption && selectedOption[labelKey] ? (
39
- <span>{selectedOption[labelKey]}</span>
40
- ) : (
41
- <span>{placeholder}</span>
42
- )}
43
- </div>
44
- {isOpen && (
45
- <div className="custom-select-options" onMouseLeave={closeDropdown} >
46
- <div className="custom-select-options-inner">
47
- {options.map((option, index) => {
48
- return (
49
- <div key={index} className="custom-select-option" onClick={() => {setSelectedOption(option); setIsOpen(false)}}>
50
- {option[labelKey]}
51
- </div>
52
- )
53
- })}
54
- </div>
55
- </div>
56
- )}
57
- </div>
58
- }
59
- </>
60
- )
61
- }
62
-
63
- export default CustomSelect;
@@ -1,92 +0,0 @@
1
- @select-box-options-height: 200px;
2
-
3
- .custom-select {
4
- max-width: 215px;
5
- min-width: 215px;
6
- position: relative;
7
-
8
- .custom-select-input {
9
- position: relative;
10
- width: 100%;
11
- padding: 6px 10px;
12
- margin: 10px 0;
13
- border: 1px solid @grey-mid-1;
14
- background: @white;
15
- border-radius: 25px;
16
- box-sizing: border-box;
17
- font-size: 15px;
18
- color: @dark-1;
19
- z-index: 3;
20
-
21
- &:hover {
22
- cursor: pointer;
23
- }
24
-
25
- &:after {
26
- content: url('../assets/chevron.svg');
27
- transition-duration: 0.1s;
28
- position: absolute;
29
- right: 8px;
30
- top: 5px;
31
- transform-origin: center;
32
- height: 20px;
33
- }
34
- }
35
-
36
- .custom-select-options {
37
- position: absolute;
38
- width: 100%;
39
- top: 10px;
40
- left: 0px;
41
- max-height: @select-box-options-height;
42
- height: 0px !important;
43
- overflow: hidden;
44
- background: @white;
45
- border: 1px solid @grey-mid-1;
46
- box-sizing: border-box;
47
- border-radius: 15px;
48
- z-index: 2;
49
- transition-duration: 0.3s;
50
-
51
- .custom-select-options-inner {
52
- min-height: @select-box-options-height;
53
- max-height: @select-box-options-height;
54
- overflow-y: auto;
55
- }
56
-
57
- .custom-select-option:first-child {
58
- margin-top: 30px;
59
- }
60
-
61
- .custom-select-option {
62
- padding: 10px;
63
- opacity: 0.8;
64
- transition-duration: 0.1s;
65
- color: @dark-1;
66
- font-size: 15px;
67
-
68
- &:hover {
69
- opacity: 1;
70
- cursor: pointer;
71
- color: @orange-1;
72
- }
73
- }
74
- }
75
-
76
- &.open {
77
- z-index: 5;
78
-
79
- .custom-select-options {
80
- height: 400px !important;
81
- }
82
- .custom-select-input {
83
- &:after {
84
- transform: rotate(180deg);
85
- }
86
- }
87
- }
88
-
89
- &.closing {
90
- z-index: 5;
91
- }
92
- }
@@ -1,19 +0,0 @@
1
- import React from "react";
2
- import { Link, useNavigate } from "react-router-dom";
3
-
4
-
5
- export default function GoBack({text}) {
6
-
7
- const navigate = useNavigate();
8
-
9
- function handleGoBack() {
10
- navigate(-1);
11
- }
12
-
13
- return (
14
- <a onClick={handleGoBack}>
15
- <img className="cross" src={require('../../assets/x.svg').default} alt="back" />
16
- {text}
17
- </a>
18
- )
19
- }
@@ -1,12 +0,0 @@
1
- import React from 'react';
2
-
3
- function Loader() {
4
-
5
- return (
6
- <div className="loader">
7
- <div className="loader__spinner">Loading...</div>
8
- </div>
9
- );
10
- }
11
-
12
- export default Loader;