@necrolab/dashboard 0.4.220 → 0.5.1

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 (140) hide show
  1. package/.prettierrc +27 -1
  2. package/.vscode/extensions.json +1 -1
  3. package/README.md +64 -2
  4. package/artwork/image.png +0 -0
  5. package/backend/api.js +26 -24
  6. package/backend/auth.js +2 -2
  7. package/backend/batching.js +1 -1
  8. package/backend/endpoints.js +8 -11
  9. package/backend/index.js +2 -2
  10. package/backend/mock-data.js +27 -36
  11. package/backend/mock-src/classes/logger.js +5 -7
  12. package/backend/mock-src/classes/utils.js +3 -2
  13. package/backend/mock-src/ticketmaster.js +4 -4
  14. package/backend/validator.js +2 -2
  15. package/config/configs.json +0 -1
  16. package/dev-server.js +134 -0
  17. package/exit +209 -0
  18. package/index.html +78 -8
  19. package/index.js +1 -1
  20. package/jsconfig.json +16 -0
  21. package/package.json +39 -25
  22. package/postcss.config.js +1 -1
  23. package/postinstall.js +124 -20
  24. package/public/android-chrome-192x192.png +0 -0
  25. package/public/android-chrome-512x512.png +0 -0
  26. package/public/apple-touch-icon.png +0 -0
  27. package/public/favicon-16x16.png +0 -0
  28. package/public/favicon-32x32.png +0 -0
  29. package/public/favicon.ico +0 -0
  30. package/public/img/logo_trans.png +0 -0
  31. package/public/img/necro_logo.png +0 -0
  32. package/public/manifest.json +16 -10
  33. package/run +176 -9
  34. package/src/App.vue +498 -85
  35. package/src/assets/css/base/reset.scss +43 -0
  36. package/src/assets/css/base/scroll.scss +114 -0
  37. package/src/assets/css/base/typography.scss +37 -0
  38. package/src/assets/css/components/buttons.scss +216 -0
  39. package/src/assets/css/components/forms.scss +221 -0
  40. package/src/assets/css/components/modals.scss +13 -0
  41. package/src/assets/css/components/tables.scss +27 -0
  42. package/src/assets/css/components/toasts.scss +100 -0
  43. package/src/assets/css/main.scss +201 -122
  44. package/src/assets/img/background.svg +2 -2
  45. package/src/assets/img/background.svg.backup +11 -0
  46. package/src/assets/img/logo_trans.png +0 -0
  47. package/src/components/Auth/LoginForm.vue +62 -11
  48. package/src/components/Editors/Account/Account.vue +116 -40
  49. package/src/components/Editors/Account/AccountCreator.vue +88 -39
  50. package/src/components/Editors/Account/AccountView.vue +102 -34
  51. package/src/components/Editors/Account/CreateAccount.vue +80 -32
  52. package/src/components/Editors/Profile/CreateProfile.vue +269 -83
  53. package/src/components/Editors/Profile/Profile.vue +132 -47
  54. package/src/components/Editors/Profile/ProfileCountryChooser.vue +82 -20
  55. package/src/components/Editors/Profile/ProfileView.vue +89 -32
  56. package/src/components/Editors/TagLabel.vue +67 -6
  57. package/src/components/Editors/TagToggle.vue +7 -2
  58. package/src/components/Filter/Filter.vue +288 -71
  59. package/src/components/Filter/FilterPreview.vue +202 -31
  60. package/src/components/Filter/PriceSortToggle.vue +76 -6
  61. package/src/components/Table/Header.vue +1 -1
  62. package/src/components/Table/Row.vue +1 -1
  63. package/src/components/Table/Table.vue +19 -2
  64. package/src/components/Tasks/CheckStock.vue +6 -8
  65. package/src/components/Tasks/Controls/DesktopControls.vue +27 -17
  66. package/src/components/Tasks/Controls/MobileControls.vue +8 -45
  67. package/src/components/Tasks/CreateTaskAXS.vue +80 -72
  68. package/src/components/Tasks/CreateTaskTM.vue +95 -141
  69. package/src/components/Tasks/MassEdit.vue +4 -6
  70. package/src/components/Tasks/QuickSettings.vue +199 -30
  71. package/src/components/Tasks/ScrapeVenue.vue +5 -6
  72. package/src/components/Tasks/Stats.vue +50 -24
  73. package/src/components/Tasks/Task.vue +384 -179
  74. package/src/components/Tasks/TaskLabel.vue +2 -2
  75. package/src/components/Tasks/TaskView.vue +136 -48
  76. package/src/components/Tasks/Utilities.vue +25 -10
  77. package/src/components/Tasks/ViewTask.vue +321 -0
  78. package/src/components/icons/Bag.vue +1 -1
  79. package/src/components/icons/Check.vue +5 -0
  80. package/src/components/icons/Close.vue +21 -0
  81. package/src/components/icons/CloseX.vue +5 -0
  82. package/src/components/icons/Eye.vue +6 -0
  83. package/src/components/icons/Key.vue +21 -0
  84. package/src/components/icons/Loyalty.vue +1 -1
  85. package/src/components/icons/Mail.vue +2 -2
  86. package/src/components/icons/Pencil.vue +21 -0
  87. package/src/components/icons/Play.vue +2 -2
  88. package/src/components/icons/Profile.vue +18 -0
  89. package/src/components/icons/Reload.vue +4 -5
  90. package/src/components/icons/Sandclock.vue +2 -2
  91. package/src/components/icons/Sell.vue +21 -0
  92. package/src/components/icons/Spinner.vue +42 -0
  93. package/src/components/icons/SquareCheck.vue +18 -0
  94. package/src/components/icons/SquareUncheck.vue +18 -0
  95. package/src/components/icons/Stadium.vue +1 -1
  96. package/src/components/icons/Wildcard.vue +18 -0
  97. package/src/components/icons/index.js +26 -1
  98. package/src/components/ui/Modal.vue +107 -13
  99. package/src/components/ui/Navbar.vue +175 -40
  100. package/src/components/ui/ReconnectIndicator.vue +351 -55
  101. package/src/components/ui/Splash.vue +5 -35
  102. package/src/components/ui/controls/CountryChooser.vue +200 -62
  103. package/src/components/ui/controls/atomic/Checkbox.vue +119 -10
  104. package/src/components/ui/controls/atomic/Dropdown.vue +216 -39
  105. package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
  106. package/src/components/ui/controls/atomic/MultiDropdown.vue +300 -37
  107. package/src/components/ui/controls/atomic/Switch.vue +53 -25
  108. package/src/composables/useClickOutside.js +21 -0
  109. package/src/composables/useDropdownPosition.js +174 -0
  110. package/src/libs/Filter.js +60 -24
  111. package/src/registerServiceWorker.js +1 -1
  112. package/src/stores/connection.js +4 -4
  113. package/src/stores/sampleData.js +172 -199
  114. package/src/stores/ui.js +55 -20
  115. package/src/stores/utils.js +30 -4
  116. package/src/types/index.js +41 -0
  117. package/src/utils/debug.js +1 -0
  118. package/src/views/Accounts.vue +116 -50
  119. package/src/views/Console.vue +394 -79
  120. package/src/views/Editor.vue +1176 -123
  121. package/src/views/FilterBuilder.vue +528 -250
  122. package/src/views/Login.vue +76 -14
  123. package/src/views/Profiles.vue +119 -34
  124. package/src/views/Tasks.vue +266 -98
  125. package/static/offline.html +192 -50
  126. package/switch-branch.sh +41 -0
  127. package/tailwind.config.js +119 -27
  128. package/vite.config.js +73 -16
  129. package/workbox-config.cjs +63 -0
  130. package/ICONS.md +0 -21
  131. package/public/img/background.svg +0 -14
  132. package/public/img/logo.png +0 -0
  133. package/public/img/logo_icon.png +0 -0
  134. package/public/img/logo_icon_2.png +0 -0
  135. package/src/assets/css/_input.scss +0 -143
  136. package/src/assets/img/logo.png +0 -0
  137. package/src/assets/img/logo_icon.png +0 -0
  138. package/src/assets/img/logo_icon_2.png +0 -0
  139. package/vue.config.js +0 -32
  140. package/workbox-config.js +0 -7
@@ -1,76 +1,61 @@
1
1
  <template>
2
- <Modal class="overflow-y-scroll max-w-screen">
2
+ <Modal class="max-w-screen overflow-y-scroll">
3
3
  <template #header>
4
4
  Create Task
5
5
  <img src="@/assets/img/pencil.svg" class="ml-4" />
6
6
  </template>
7
7
 
8
- <!-- <div v-if="displayConfigSelector" class="w-3/12 input-wrapper z-inf2 mt-4">
9
- <div class="dropdown input-default p-2">
10
- <span class="flex justify-between items-center z-inf2 text-white">
11
- <span class="text-sm">Load config</span>
12
- <DownIcon class="absolute right-5" />
13
- </span>
14
- <div class="dropdown-content z-inf2">
15
- <div
16
- v-bind:key="opt.name"
17
- class="py-1 my-1 cursor-pointer"
18
- v-for="opt in addTaskConfigs"
19
- @click="useConfig(opt.config)"
20
- >
21
- <p>{{ opt.name }}</p>
22
- </div>
23
- </div>
24
- </div>
25
- </div> -->
26
-
27
8
  <!-- Task Form -->
28
- <div class="grid grid-cols-2 gap-x-4 gap-y-4 mt-4 mb-4">
9
+ <div class="form-grid mb-4 mt-4">
29
10
  <!-- Event ID -->
30
11
  <div class="input-wrapper">
31
- <label class="label-override mb-2"
32
- >Event ID
12
+ <label class="label-override mb-2">
13
+ Event ID
33
14
  <StadiumIcon />
34
15
  </label>
35
- <div class="input-default">
36
- <input placeholder="827474" v-model="task.eventId" />
37
- <span class="text-red-400 my-auto mr-2 mt-3">* </span>
16
+ <div class="input-default required">
17
+ <input placeholder="827474" v-model="task.eventId" required />
38
18
  </div>
39
19
  </div>
40
20
  <!-- Email -->
41
21
  <div class="input-wrapper">
42
- <label class="label-override mb-2"
43
- >Email
22
+ <label class="label-override mb-2">
23
+ Email
44
24
  <MailIcon />
45
25
  </label>
46
26
  <div class="input-default">
47
- <input placeholder="Email" v-model="task.email" />
27
+ <input
28
+ placeholder="Email"
29
+ v-model="task.email"
30
+ autocomplete="off"
31
+ data-form-type="other"
32
+ name="axs_email_not_for_auth" />
48
33
  </div>
49
34
  </div>
50
35
  <!-- Proxy -->
51
36
  <div class="input-wrapper">
52
- <label class="label-override mb-2"
53
- >Proxy
37
+ <label class="label-override mb-2">
38
+ Proxy
54
39
  <CameraIcon />
55
40
  </label>
56
41
  <div class="input-default">
57
- <input placeholder="Proxy" v-model="task.proxy" />
42
+ <input placeholder="Proxy" v-model="task.proxy" autocomplete="off" />
58
43
  </div>
59
44
  </div>
60
45
  <!-- Presale Code -->
61
46
  <div class="input-wrapper">
62
- <label class="label-override mb-2"
63
- >Presale Code
47
+ <label class="label-override mb-2">
48
+ Presale Code
64
49
  <AwardIcon />
65
50
  </label>
66
51
  <div class="input-default">
67
- <input placeholder="Code" v-model="task.presaleCode" maxlength="15" />
52
+ <input placeholder="Code" v-model="task.presaleCode" maxlength="15" autocomplete="off" />
68
53
  </div>
69
54
  </div>
70
55
  <!-- Ticket Quantity -->
71
56
  <div class="input-wrapper">
72
- <label class="label-override mb-2"
73
- >Ticket Quantity
57
+ <label class="label-override mb-2">
58
+ Ticket Quantity
74
59
  <BagIcon />
75
60
  </label>
76
61
  <div class="input-default">
@@ -87,7 +72,10 @@
87
72
  </div>
88
73
  <!-- Ticket Quantity -->
89
74
  <div class="input-wrapper">
90
- <label class="label-override mb-2">Amount <span class="ml-2" style="height: 18px">#</span></label>
75
+ <label class="label-override mb-2">
76
+ Amount
77
+ <span class="ml-2 h-[18px]">#</span>
78
+ </label>
91
79
  <div class="input-default">
92
80
  <input placeholder="20" min="1" type="number" pattern="\d*" v-model="task.taskQuantity" />
93
81
  <div class="input-incrementer">
@@ -102,27 +90,26 @@
102
90
  </div>
103
91
 
104
92
  <!-- Profile Tag(s) -->
105
- <div class="input-wrapper" style="z-index: 50 !important">
106
- <label class="label-override mb-2"
107
- >Profile Tag(s)
93
+ <div class="input-wrapper relative-positioned z-tooltip">
94
+ <label class="label-override mb-2">
95
+ Profile Tag(s)
108
96
  <TagIcon />
109
97
  </label>
110
98
  <MultiDropdown
111
- class="w-full will-change-auto input-default"
99
+ class="input-default w-full will-change-auto"
112
100
  :onSelect="(v) => (task.profileTags = v)"
113
101
  default="Any"
114
102
  :options="
115
103
  profileTagsOptions.map((opt) => {
116
104
  return { label: opt, value: opt };
117
105
  })
118
- "
119
- />
106
+ " />
120
107
  </div>
121
108
 
122
109
  <!-- Account Tag -->
123
- <div class="input-wrapper">
124
- <label class="label-override mb-2"
125
- >Account Tag
110
+ <div class="input-wrapper relative-positioned z-dropdown">
111
+ <label class="label-override mb-2">
112
+ Account Tag
126
113
  <ScannerIcon />
127
114
  </label>
128
115
 
@@ -133,20 +120,22 @@
133
120
  :options="accountTagOptions"
134
121
  :allowDefault="false"
135
122
  :capitalize="true"
136
- class="input-default dropdown p-4 w-full"
137
- />
123
+ class="input-default dropdown w-full p-4" />
138
124
  </div>
139
125
 
140
126
  <div class="input-wrapper">
141
- <label class="label-override mb-2">Start Offset (Minutes)<ShieldIcon /></label>
127
+ <label class="label-override mb-2">
128
+ Start Offset (Minutes)
129
+ <ShieldIcon />
130
+ </label>
142
131
  <div class="input-default">
143
132
  <input placeholder="120" type="number" pattern="\d*" v-model="task.startOffset" />
144
133
  </div>
145
134
  </div>
146
135
 
147
136
  <div class="input-wrapper">
148
- <label class="label-override mb-2"
149
- >Promo ID
137
+ <label class="label-override mb-2">
138
+ Promo ID
150
139
  <AwardIcon />
151
140
  </label>
152
141
  <div class="input-default">
@@ -154,9 +143,9 @@
154
143
  </div>
155
144
  </div>
156
145
  </div>
157
- <div class="border border-light-300 mb-3" />
146
+ <div class="mb-3 border border-dark-650" />
158
147
  <!-- Task Switches -->
159
- <div class="grid grid-cols-4 gap-y-4 mb-4 justify-between task-switches">
148
+ <div class="task-switches mb-4 grid grid-cols-4 justify-between gap-y-4">
160
149
  <div class="switch-wrapper flex flex-col">
161
150
  <h4>
162
151
  <span class="hidden xs:block">Do Not Pay</span>
@@ -176,24 +165,25 @@
176
165
  <div class="switch-wrapper flex flex-col">
177
166
  <h4>
178
167
  <span class="hidden xs:block">Quick Queue</span>
179
- <span class="block xs:hidden">Quick Q.</span> <SkiIcon class="scale-90" />
168
+ <span class="block xs:hidden">Quick Q.</span>
169
+ <SkiIcon class="scale-90" />
180
170
  </h4>
181
171
  <Switch class="mx-auto" v-model="task.quickQueue" />
182
172
  </div>
183
173
  <div class="switch-wrapper flex flex-col">
184
174
  <h4>
185
- <span class="hidden xs:block">Manual</span>
175
+ Manual
176
+ <HandIcon />
186
177
  </h4>
187
178
  <Switch class="mx-auto" v-model="task.manual" />
188
179
  </div>
189
180
  </div>
190
181
 
191
182
  <!-- Task prefab -->
192
- <div class="border border-light-300 my-3" />
183
+ <div class="my-3 border border-dark-650" />
193
184
  <button
194
- class="button-default hover:opacity-70 active:opacity-50 bg-dark-400 w-48 text-xs mx-auto flex items-center justify-center gap-x-2"
195
- @click="createTask"
196
- >
185
+ class="button-default ml-auto mt-4 bg-dark-400"
186
+ @click="createTask">
197
187
  Create
198
188
  <EditIcon />
199
189
  </button>
@@ -202,6 +192,7 @@
202
192
 
203
193
  <script setup>
204
194
  import { ref, watch } from "vue";
195
+ import { countries } from "@/stores/countries";
205
196
  import Modal from "@/components/ui/Modal.vue";
206
197
  import Switch from "@/components/ui/controls/atomic/Switch.vue";
207
198
  import {
@@ -227,15 +218,16 @@ import {
227
218
  import { useUIStore } from "@/stores/ui";
228
219
  import Dropdown from "@/components/ui/controls/atomic/Dropdown.vue";
229
220
  import MultiDropdown from "@/components/ui/controls/atomic/MultiDropdown.vue";
230
- import { isEU, removeDuplicates } from "@/stores/utils";
221
+ import { firstUpper, parseAxsEventUrl, removeDuplicates } from "@/stores/utils";
231
222
 
232
223
  const ui = useUIStore();
233
224
 
234
- const accountTagOptions = ref(ui.profile.accountTags);
225
+ const accountTagOptions = ref(ui.profile.tags);
235
226
  const defaultTags = ["Amex", "Visa", "Master"];
236
227
 
237
- const profileTagsOptions = ref(removeDuplicates(["Any", ...defaultTags, ...ui.profile.profileTags]));
238
-
228
+ const profileTagsOptions = ref(
229
+ removeDuplicates(["Any", ...defaultTags, ...ui.profile.profileTags.map((x) => firstUpper(x))])
230
+ );
239
231
  const baseTask = ref({
240
232
  selected: false,
241
233
  taskId: "",
@@ -261,7 +253,7 @@ const baseTask = ref({
261
253
  const task = ref(ui.modalData[`task_${ui.currentCountry.siteId}`] || baseTask);
262
254
 
263
255
  function createTask() {
264
- ui.logger.Info("Created new task", task.value);
256
+ ui.logger.Info("Created new task", task.value.taskId);
265
257
  const eventIds = task.value.eventId.split(",").map((t) => t.trim());
266
258
  const presaleCodes = task.value.presaleCode ? task.value.presaleCode.split(",").map((t) => t.trim()) : [undefined];
267
259
  eventIds.forEach((eventId) => {
@@ -284,12 +276,28 @@ watch(
284
276
  }
285
277
  );
286
278
 
287
- watch(() => task.value, (ui.modalData[`task_${ui.currentCountry.siteId}`] = task.value));
279
+ watch(
280
+ () => task.value,
281
+ () => (ui.modalData[`task_${ui.currentCountry.siteId}`] = task.value),
282
+ { deep: true }
283
+ );
288
284
 
289
285
  watch(
290
286
  () => task.value.eventId,
291
287
  (url) => {
292
288
  ui.logger.Info("URL changed", url);
289
+ if (!url.includes("https://")) return;
290
+ try {
291
+ const parsed = parseAxsEventUrl(url);
292
+ const country = countries.AXS.find((c) => c.siteId === parsed.siteId);
293
+ if (country) ui.setCurrentCountry(country, false, ui.currentModule);
294
+
295
+ task.value.eventId = parsed.eventId;
296
+ debugger;
297
+ if (parsed.promoId) task.value.promoId = parsed.promoId;
298
+ } catch (ex) {
299
+ ui.logger.Error("Could not parse url (2)", ex);
300
+ }
293
301
  }
294
302
  );
295
303
 
@@ -299,7 +307,7 @@ watch(
299
307
  <style lang="scss" scoped>
300
308
  .label-override {
301
309
  @apply flex;
302
- color: #6e7084 !important;
310
+ color: #e1e1e4 !important;
303
311
 
304
312
  img {
305
313
  @apply ml-2;
@@ -308,8 +316,8 @@ watch(
308
316
 
309
317
  .task-switches {
310
318
  h4 {
311
- color: #6e7084;
312
- @apply text-xs text-center flex items-center gap-x-2 mx-auto;
319
+ color: #e1e1e4;
320
+ @apply mx-auto flex items-center gap-x-2 text-center text-xs;
313
321
  }
314
322
 
315
323
  .switch-wrapper {
@@ -325,13 +333,13 @@ watch(
325
333
  }
326
334
  }
327
335
  </style>
328
- <style lang="scss">
336
+ <style lang="scss" scoped>
329
337
  .label-override {
330
338
  svg {
331
339
  @apply ml-2;
332
340
 
333
341
  path {
334
- fill: #6e7084 !important;
342
+ fill: #e1e1e4 !important;
335
343
  }
336
344
  }
337
345
  @apply flex items-center;
@@ -340,7 +348,7 @@ watch(
340
348
  .switch-wrapper {
341
349
  svg {
342
350
  path {
343
- fill: #6e7084 !important;
351
+ fill: oklch(0.65 0 0) !important;
344
352
  }
345
353
  }
346
354
  }