@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.
- package/.prettierrc +27 -1
- package/.vscode/extensions.json +1 -1
- package/README.md +64 -2
- package/artwork/image.png +0 -0
- package/backend/api.js +26 -24
- package/backend/auth.js +2 -2
- package/backend/batching.js +1 -1
- package/backend/endpoints.js +8 -11
- package/backend/index.js +2 -2
- package/backend/mock-data.js +27 -36
- package/backend/mock-src/classes/logger.js +5 -7
- package/backend/mock-src/classes/utils.js +3 -2
- package/backend/mock-src/ticketmaster.js +4 -4
- package/backend/validator.js +2 -2
- package/config/configs.json +0 -1
- package/dev-server.js +134 -0
- package/exit +209 -0
- package/index.html +78 -8
- package/index.js +1 -1
- package/jsconfig.json +16 -0
- package/package.json +39 -25
- package/postcss.config.js +1 -1
- package/postinstall.js +124 -20
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/img/logo_trans.png +0 -0
- package/public/img/necro_logo.png +0 -0
- package/public/manifest.json +16 -10
- package/run +176 -9
- package/src/App.vue +498 -85
- package/src/assets/css/base/reset.scss +43 -0
- package/src/assets/css/base/scroll.scss +114 -0
- package/src/assets/css/base/typography.scss +37 -0
- package/src/assets/css/components/buttons.scss +216 -0
- package/src/assets/css/components/forms.scss +221 -0
- package/src/assets/css/components/modals.scss +13 -0
- package/src/assets/css/components/tables.scss +27 -0
- package/src/assets/css/components/toasts.scss +100 -0
- package/src/assets/css/main.scss +201 -122
- package/src/assets/img/background.svg +2 -2
- package/src/assets/img/background.svg.backup +11 -0
- package/src/assets/img/logo_trans.png +0 -0
- package/src/components/Auth/LoginForm.vue +62 -11
- package/src/components/Editors/Account/Account.vue +116 -40
- package/src/components/Editors/Account/AccountCreator.vue +88 -39
- package/src/components/Editors/Account/AccountView.vue +102 -34
- package/src/components/Editors/Account/CreateAccount.vue +80 -32
- package/src/components/Editors/Profile/CreateProfile.vue +269 -83
- package/src/components/Editors/Profile/Profile.vue +132 -47
- package/src/components/Editors/Profile/ProfileCountryChooser.vue +82 -20
- package/src/components/Editors/Profile/ProfileView.vue +89 -32
- package/src/components/Editors/TagLabel.vue +67 -6
- package/src/components/Editors/TagToggle.vue +7 -2
- package/src/components/Filter/Filter.vue +288 -71
- package/src/components/Filter/FilterPreview.vue +202 -31
- package/src/components/Filter/PriceSortToggle.vue +76 -6
- package/src/components/Table/Header.vue +1 -1
- package/src/components/Table/Row.vue +1 -1
- package/src/components/Table/Table.vue +19 -2
- package/src/components/Tasks/CheckStock.vue +6 -8
- package/src/components/Tasks/Controls/DesktopControls.vue +27 -17
- package/src/components/Tasks/Controls/MobileControls.vue +8 -45
- package/src/components/Tasks/CreateTaskAXS.vue +80 -72
- package/src/components/Tasks/CreateTaskTM.vue +95 -141
- package/src/components/Tasks/MassEdit.vue +4 -6
- package/src/components/Tasks/QuickSettings.vue +199 -30
- package/src/components/Tasks/ScrapeVenue.vue +5 -6
- package/src/components/Tasks/Stats.vue +50 -24
- package/src/components/Tasks/Task.vue +384 -179
- package/src/components/Tasks/TaskLabel.vue +2 -2
- package/src/components/Tasks/TaskView.vue +136 -48
- package/src/components/Tasks/Utilities.vue +25 -10
- package/src/components/Tasks/ViewTask.vue +321 -0
- package/src/components/icons/Bag.vue +1 -1
- package/src/components/icons/Check.vue +5 -0
- package/src/components/icons/Close.vue +21 -0
- package/src/components/icons/CloseX.vue +5 -0
- package/src/components/icons/Eye.vue +6 -0
- package/src/components/icons/Key.vue +21 -0
- package/src/components/icons/Loyalty.vue +1 -1
- package/src/components/icons/Mail.vue +2 -2
- package/src/components/icons/Pencil.vue +21 -0
- package/src/components/icons/Play.vue +2 -2
- package/src/components/icons/Profile.vue +18 -0
- package/src/components/icons/Reload.vue +4 -5
- package/src/components/icons/Sandclock.vue +2 -2
- package/src/components/icons/Sell.vue +21 -0
- package/src/components/icons/Spinner.vue +42 -0
- package/src/components/icons/SquareCheck.vue +18 -0
- package/src/components/icons/SquareUncheck.vue +18 -0
- package/src/components/icons/Stadium.vue +1 -1
- package/src/components/icons/Wildcard.vue +18 -0
- package/src/components/icons/index.js +26 -1
- package/src/components/ui/Modal.vue +107 -13
- package/src/components/ui/Navbar.vue +175 -40
- package/src/components/ui/ReconnectIndicator.vue +351 -55
- package/src/components/ui/Splash.vue +5 -35
- package/src/components/ui/controls/CountryChooser.vue +200 -62
- package/src/components/ui/controls/atomic/Checkbox.vue +119 -10
- package/src/components/ui/controls/atomic/Dropdown.vue +216 -39
- package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
- package/src/components/ui/controls/atomic/MultiDropdown.vue +300 -37
- package/src/components/ui/controls/atomic/Switch.vue +53 -25
- package/src/composables/useClickOutside.js +21 -0
- package/src/composables/useDropdownPosition.js +174 -0
- package/src/libs/Filter.js +60 -24
- package/src/registerServiceWorker.js +1 -1
- package/src/stores/connection.js +4 -4
- package/src/stores/sampleData.js +172 -199
- package/src/stores/ui.js +55 -20
- package/src/stores/utils.js +30 -4
- package/src/types/index.js +41 -0
- package/src/utils/debug.js +1 -0
- package/src/views/Accounts.vue +116 -50
- package/src/views/Console.vue +394 -79
- package/src/views/Editor.vue +1176 -123
- package/src/views/FilterBuilder.vue +528 -250
- package/src/views/Login.vue +76 -14
- package/src/views/Profiles.vue +119 -34
- package/src/views/Tasks.vue +266 -98
- package/static/offline.html +192 -50
- package/switch-branch.sh +41 -0
- package/tailwind.config.js +119 -27
- package/vite.config.js +73 -16
- package/workbox-config.cjs +63 -0
- package/ICONS.md +0 -21
- package/public/img/background.svg +0 -14
- package/public/img/logo.png +0 -0
- package/public/img/logo_icon.png +0 -0
- package/public/img/logo_icon_2.png +0 -0
- package/src/assets/css/_input.scss +0 -143
- package/src/assets/img/logo.png +0 -0
- package/src/assets/img/logo_icon.png +0 -0
- package/src/assets/img/logo_icon_2.png +0 -0
- package/vue.config.js +0 -32
- package/workbox-config.js +0 -7
|
@@ -1,76 +1,61 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<Modal class="overflow-y-scroll
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
22
|
+
<label class="label-override mb-2">
|
|
23
|
+
Email
|
|
44
24
|
<MailIcon />
|
|
45
25
|
</label>
|
|
46
26
|
<div class="input-default">
|
|
47
|
-
<input
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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">
|
|
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
|
|
106
|
-
<label class="label-override mb-2"
|
|
107
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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">
|
|
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
|
-
|
|
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-
|
|
146
|
+
<div class="mb-3 border border-dark-650" />
|
|
158
147
|
<!-- Task Switches -->
|
|
159
|
-
<div class="grid grid-cols-4 gap-y-4
|
|
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>
|
|
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
|
-
|
|
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-
|
|
183
|
+
<div class="my-3 border border-dark-650" />
|
|
193
184
|
<button
|
|
194
|
-
class="button-default
|
|
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 {
|
|
221
|
+
import { firstUpper, parseAxsEventUrl, removeDuplicates } from "@/stores/utils";
|
|
231
222
|
|
|
232
223
|
const ui = useUIStore();
|
|
233
224
|
|
|
234
|
-
const accountTagOptions = ref(ui.profile.
|
|
225
|
+
const accountTagOptions = ref(ui.profile.tags);
|
|
235
226
|
const defaultTags = ["Amex", "Visa", "Master"];
|
|
236
227
|
|
|
237
|
-
const profileTagsOptions = ref(
|
|
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(
|
|
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: #
|
|
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: #
|
|
312
|
-
@apply
|
|
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: #
|
|
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:
|
|
351
|
+
fill: oklch(0.65 0 0) !important;
|
|
344
352
|
}
|
|
345
353
|
}
|
|
346
354
|
}
|