@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
package/src/views/Tasks.vue
CHANGED
|
@@ -1,105 +1,238 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
<div class="tasks-page">
|
|
3
|
+
<div class="flex items-center justify-between pb-2" style="padding-top: 1.5rem">
|
|
4
|
+
<div class="flex items-center justify-center gap-4">
|
|
5
|
+
<GearIcon
|
|
6
|
+
class="w-5 cursor-pointer smooth-hover"
|
|
7
|
+
@click="ui.toggleModal('quick-settings')"
|
|
8
|
+
/>
|
|
9
|
+
<h4 class="text-base font-semibold text-light-300">
|
|
10
|
+
Tasks
|
|
11
|
+
<span class="text-sm font-medium text-light-400 pl-1">{{ taskCount }}</span>
|
|
12
|
+
</h4>
|
|
13
|
+
</div>
|
|
14
|
+
<ul class="mobile-icons mobile-header-controls">
|
|
15
|
+
<li>
|
|
16
|
+
<button @click="ui.startTasks()"><PlayIcon class="w-4 h-4" /></button>
|
|
17
|
+
</li>
|
|
18
|
+
<li>
|
|
19
|
+
<button @click="ui.stopTasks()"><PauseIcon class="w-4 h-4" /></button>
|
|
20
|
+
</li>
|
|
21
|
+
<li>
|
|
22
|
+
<button
|
|
23
|
+
class="text-sm"
|
|
24
|
+
:disabled="ui.disabledButtons['add-tasks']"
|
|
25
|
+
@click="ui.toggleModal('create-task')"
|
|
26
|
+
>
|
|
27
|
+
<PlusIcon class="w-4 h-4" />
|
|
28
|
+
</button>
|
|
29
|
+
</li>
|
|
30
|
+
<li>
|
|
31
|
+
<button @click="ui.deleteTasks()"><TrashIcon class="h-3.5 w-3.5" /></button>
|
|
32
|
+
</li>
|
|
33
|
+
</ul>
|
|
34
|
+
</div>
|
|
27
35
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
36
|
+
<div class="controls-wrapper">
|
|
37
|
+
<div class="controls-wrapper lg:mb-3">
|
|
38
|
+
<DesktopControls
|
|
39
|
+
class="desktop-controls-hide"
|
|
40
|
+
@stopAll="ui.stopTasks()"
|
|
41
|
+
@startAll="ui.startTasks()"
|
|
42
|
+
@deleteAll="ui.deleteTasks()"
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<!-- Mobile: Stats + Filter on same row -->
|
|
47
|
+
<div class="flex md:hidden items-center justify-between gap-2 mb-1">
|
|
48
|
+
<Stats class="stats-component flex-1" />
|
|
49
|
+
<PriceSortToggle
|
|
50
|
+
class="min-w-20 max-w-28 flex-shrink-0 h-8"
|
|
51
|
+
:options="['All', 'Checkout']"
|
|
52
|
+
:darker="true"
|
|
53
|
+
:current="ui.taskFilter"
|
|
54
|
+
@change="(e) => ui.setTaskFilter(e)"
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Desktop: Event Dropdown + Search + Filter + Stats on ONE row -->
|
|
59
|
+
<div class="hidden md:flex items-center gap-2 lg:mb-2 mb-1">
|
|
60
|
+
<div
|
|
61
|
+
v-if="uniqEventIds.length > 1"
|
|
62
|
+
class="w-52 flex-shrink-0"
|
|
63
|
+
>
|
|
64
|
+
<Dropdown
|
|
65
|
+
:onClick="(f) => ui.setCurrentEvent(f)"
|
|
66
|
+
default="All events"
|
|
67
|
+
:chosen="ui.currentEvent"
|
|
68
|
+
:options="uniqEventIds"
|
|
69
|
+
:allowDefault="true"
|
|
70
|
+
class="input-default w-full hover:bg-dark-400 event-dropdown"
|
|
71
|
+
rightAmount="right-2"
|
|
72
|
+
/>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="w-52 flex-shrink-0">
|
|
75
|
+
<div class="input-default flex items-center">
|
|
76
|
+
<input
|
|
77
|
+
v-model="taskSearchQuery"
|
|
78
|
+
type="text"
|
|
79
|
+
placeholder="Search tasks..."
|
|
80
|
+
class="h-full w-full bg-transparent text-sm text-white outline-none"
|
|
47
81
|
/>
|
|
82
|
+
<span v-if="taskSearchQuery" class="ml-2 text-xs text-light-500">{{ filteredTaskCount }}</span>
|
|
83
|
+
</div>
|
|
48
84
|
</div>
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
<PriceSortToggle
|
|
86
|
+
class="min-w-24 max-w-28 flex-shrink-0"
|
|
87
|
+
:options="['All', 'Checkout']"
|
|
88
|
+
:darker="true"
|
|
89
|
+
:current="ui.taskFilter"
|
|
90
|
+
@change="(e) => ui.setTaskFilter(e)"
|
|
91
|
+
/>
|
|
92
|
+
<Stats class="stats-component ml-auto" />
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<!-- Mobile: Event Dropdown + Search stacked -->
|
|
96
|
+
<div class="flex md:hidden flex-col gap-2 mb-1">
|
|
97
|
+
<div
|
|
98
|
+
v-if="uniqEventIds.length > 1"
|
|
99
|
+
class="w-full"
|
|
100
|
+
>
|
|
101
|
+
<Dropdown
|
|
102
|
+
:onClick="(f) => ui.setCurrentEvent(f)"
|
|
103
|
+
default="All events"
|
|
104
|
+
:chosen="ui.currentEvent"
|
|
105
|
+
:options="uniqEventIds"
|
|
106
|
+
:allowDefault="true"
|
|
107
|
+
class="input-default w-full hover:bg-dark-400 event-dropdown"
|
|
108
|
+
rightAmount="right-2"
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="w-full">
|
|
112
|
+
<div class="input-default flex items-center">
|
|
113
|
+
<input
|
|
114
|
+
v-model="taskSearchQuery"
|
|
115
|
+
type="text"
|
|
116
|
+
placeholder="Search tasks..."
|
|
117
|
+
class="h-full w-full bg-transparent text-sm text-white outline-none"
|
|
118
|
+
/>
|
|
119
|
+
<span v-if="taskSearchQuery" class="ml-2 text-xs text-light-500">{{ filteredTaskCount }}</span>
|
|
120
|
+
</div>
|
|
74
121
|
</div>
|
|
122
|
+
</div>
|
|
75
123
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
<Utilities />
|
|
80
|
-
<!-- Modal -->
|
|
81
|
-
<transition-group name="fade" mode="out-in">
|
|
82
|
-
<CreateTaskTM v-if="ui.currentModule == 'TM' && activeModal === 'create-task'" @new="ui.addNewTask" />
|
|
83
|
-
<CreateTaskAXS v-if="ui.currentModule == 'AXS' && activeModal === 'create-task'" @new="ui.addNewTask" />
|
|
84
|
-
|
|
85
|
-
<!-- TODO: make the same changes as above -->
|
|
86
|
-
<CheckStock v-if="activeModal === 'check-stock'" />
|
|
87
|
-
<ScrapeVenue v-if="activeModal === 'scrape-venue'" />
|
|
88
|
-
<MassEditPresaleCode v-if="activeModal === 'mass-edit-presale-code'" />
|
|
89
|
-
<QuickSettings v-if="activeModal === 'quick-settings'" />
|
|
90
|
-
</transition-group>
|
|
124
|
+
<TaskView class="lg:mb-3 mb-2" :tasks="ui.tasks" :searchQuery="taskSearchQuery" />
|
|
125
|
+
|
|
126
|
+
<Utilities class="utilities-section" />
|
|
91
127
|
</div>
|
|
128
|
+
|
|
129
|
+
<transition-group name="fade">
|
|
130
|
+
<CreateTaskTM
|
|
131
|
+
v-if="ui.currentModule == 'TM' && activeModal === 'create-task'"
|
|
132
|
+
@new="ui.addNewTask"
|
|
133
|
+
/>
|
|
134
|
+
<CreateTaskAXS
|
|
135
|
+
v-if="ui.currentModule == 'AXS' && activeModal === 'create-task'"
|
|
136
|
+
@new="ui.addNewTask"
|
|
137
|
+
/>
|
|
138
|
+
<CheckStock v-if="activeModal === 'check-stock'" />
|
|
139
|
+
<ScrapeVenue v-if="activeModal === 'scrape-venue'" />
|
|
140
|
+
<MassEditPresaleCode v-if="activeModal === 'mass-edit-presale-code'" />
|
|
141
|
+
<QuickSettings v-if="activeModal === 'quick-settings'" />
|
|
142
|
+
</transition-group>
|
|
143
|
+
</div>
|
|
92
144
|
</template>
|
|
93
145
|
<style lang="scss" scoped>
|
|
94
146
|
.custom-dropdown-content {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
147
|
+
top: 2.6rem !important;
|
|
148
|
+
left: -13px;
|
|
149
|
+
@apply border border-dark-650;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* ==========================================================================
|
|
153
|
+
TASKS PAGE RESPONSIVE LAYOUT - MOBILE FIRST
|
|
154
|
+
========================================================================== */
|
|
155
|
+
|
|
156
|
+
/* Default mobile layout */
|
|
157
|
+
.desktop-controls-hide {
|
|
158
|
+
display: none;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.mobile-header-controls {
|
|
162
|
+
display: flex;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* Event dropdown base styling */
|
|
166
|
+
.event-dropdown {
|
|
167
|
+
min-width: 0;
|
|
168
|
+
/* Match PriceSortToggle height instead of input-default */
|
|
169
|
+
height: 40px !important;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.event-dropdown .dropdown-value {
|
|
173
|
+
max-width: 100%;
|
|
174
|
+
overflow: hidden;
|
|
175
|
+
text-overflow: ellipsis;
|
|
176
|
+
white-space: nowrap;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* Small mobile screens (portrait) */
|
|
180
|
+
@media (max-width: 480px) and (orientation: portrait) {
|
|
181
|
+
.event-dropdown {
|
|
182
|
+
height: 40px !important; /* Match PriceSortToggle height exactly */
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.event-dropdown .dropdown-value {
|
|
186
|
+
max-width: calc(100vw - 140px);
|
|
187
|
+
font-size: 0.875rem;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.event-dropdown .dropdown-display {
|
|
191
|
+
padding-right: 2rem;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* Extra small screens */
|
|
196
|
+
@media (max-width: 375px) and (orientation: portrait) {
|
|
197
|
+
.event-dropdown {
|
|
198
|
+
height: 40px !important; /* Maintain 40px height to match PriceSortToggle */
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.event-dropdown .dropdown-value {
|
|
202
|
+
max-width: calc(100vw - 120px);
|
|
203
|
+
font-size: 0.8rem;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* Mobile landscape - hide non-essential elements */
|
|
208
|
+
@media (max-height: 500px) and (orientation: landscape) {
|
|
209
|
+
.stats-component,
|
|
210
|
+
.utilities-section,
|
|
211
|
+
.filter-controls {
|
|
212
|
+
display: none;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.pb-2 {
|
|
216
|
+
padding-top: 1rem !important;
|
|
217
|
+
padding-bottom: 0.25rem;
|
|
218
|
+
margin-bottom: 0.25rem;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Tablet and small desktop - show desktop controls */
|
|
223
|
+
@media (min-width: 650px) {
|
|
224
|
+
.desktop-controls-hide {
|
|
225
|
+
display: flex;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.mobile-header-controls {
|
|
229
|
+
display: none;
|
|
230
|
+
}
|
|
98
231
|
}
|
|
99
232
|
</style>
|
|
100
233
|
<script setup>
|
|
101
|
-
import { computed } from "vue";
|
|
102
|
-
import {
|
|
234
|
+
import { computed, onMounted, ref } from "vue";
|
|
235
|
+
import { DesktopControls } from "@/components/Tasks/Controls";
|
|
103
236
|
import TaskView from "@/components/Tasks/TaskView.vue";
|
|
104
237
|
import Utilities from "@/components/Tasks/Utilities.vue";
|
|
105
238
|
import CreateTaskTM from "@/components/Tasks/CreateTaskTM.vue";
|
|
@@ -110,22 +243,57 @@ import MassEditPresaleCode from "@/components/Tasks/MassEdit.vue";
|
|
|
110
243
|
import Dropdown from "@/components/ui/controls/atomic/Dropdown.vue";
|
|
111
244
|
import Stats from "@/components/Tasks/Stats.vue";
|
|
112
245
|
import { useUIStore } from "@/stores/ui";
|
|
113
|
-
import { TrashIcon, GearIcon } from "@/components/icons";
|
|
246
|
+
import { TrashIcon, GearIcon, PlusIcon, PlayIcon, PauseIcon } from "@/components/icons";
|
|
114
247
|
import QuickSettings from "@/components/Tasks/QuickSettings.vue";
|
|
115
248
|
import PriceSortToggle from "@/components/Filter/PriceSortToggle.vue";
|
|
249
|
+
|
|
116
250
|
const ui = useUIStore();
|
|
117
251
|
const activeModal = computed(() => ui.activeModal);
|
|
118
252
|
const taskCount = computed(() => Object.keys(ui.getSelectedTasks()).length);
|
|
119
253
|
ui.refreshQueueStats();
|
|
120
254
|
|
|
255
|
+
const taskSearchQuery = ref('');
|
|
256
|
+
|
|
257
|
+
const filteredTaskCount = computed(() => {
|
|
258
|
+
if (!taskSearchQuery.value.trim()) return '';
|
|
259
|
+
|
|
260
|
+
const searchLower = taskSearchQuery.value.toLowerCase().trim();
|
|
261
|
+
let count = 0;
|
|
262
|
+
|
|
263
|
+
Object.values(ui.tasks).forEach(task => {
|
|
264
|
+
if (task.hidden) return;
|
|
265
|
+
|
|
266
|
+
const searchableText = [
|
|
267
|
+
task.eventId,
|
|
268
|
+
task.eventName,
|
|
269
|
+
task.eventVenue,
|
|
270
|
+
task.email,
|
|
271
|
+
task.taskId,
|
|
272
|
+
task.status,
|
|
273
|
+
task.profileName,
|
|
274
|
+
task.presaleCode,
|
|
275
|
+
task.reservedTicketsList
|
|
276
|
+
].filter(Boolean).join(' ').toLowerCase();
|
|
277
|
+
|
|
278
|
+
if (searchableText.includes(searchLower)) count++;
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
return count;
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
// Ensure "All events" is always selected on page load
|
|
285
|
+
onMounted(() => {
|
|
286
|
+
ui.setCurrentEvent("");
|
|
287
|
+
});
|
|
288
|
+
|
|
121
289
|
const uniqEventIds = computed(() => {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
290
|
+
const ids = [
|
|
291
|
+
...new Set(
|
|
292
|
+
Object.values(ui.tasks)
|
|
293
|
+
.filter((t) => t.siteId === ui.currentCountry.siteId && !t.eventId?.includes("@"))
|
|
294
|
+
.map((v) => `${v.eventName} (${v.eventId})`)
|
|
295
|
+
),
|
|
296
|
+
];
|
|
297
|
+
return ids;
|
|
130
298
|
});
|
|
131
299
|
</script>
|