@mbpockets/shared-ui 0.2.0 → 0.2.5
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/dist/EventPage/editMode/index.cjs.map +1 -1
- package/dist/EventPage/editMode/index.d.cts +1 -1
- package/dist/EventPage/editMode/index.d.ts +1 -1
- package/dist/EventPage/editMode/index.mjs.map +1 -1
- package/dist/EventPage/editMode.cjs.map +1 -1
- package/dist/EventPage/editMode.d.cts +1 -1
- package/dist/EventPage/editMode.d.ts +1 -1
- package/dist/EventPage/editMode.mjs.map +1 -1
- package/dist/EventPage/index.cjs +121 -63
- package/dist/EventPage/index.cjs.map +1 -1
- package/dist/EventPage/index.d.cts +1 -1
- package/dist/EventPage/index.d.ts +1 -1
- package/dist/EventPage/index.mjs +121 -63
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +121 -63
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.d.cts +4 -4
- package/dist/EventPage.d.ts +4 -4
- package/dist/EventPage.mjs +121 -63
- package/dist/EventPage.mjs.map +1 -1
- package/dist/PlayerPage/index.cjs +12 -8
- package/dist/PlayerPage/index.cjs.map +1 -1
- package/dist/PlayerPage/index.mjs +12 -8
- package/dist/PlayerPage/index.mjs.map +1 -1
- package/dist/PlayerPage.cjs +12 -8
- package/dist/PlayerPage.cjs.map +1 -1
- package/dist/PlayerPage.mjs +12 -8
- package/dist/PlayerPage.mjs.map +1 -1
- package/dist/ProfilePage/index.cjs +12 -8
- package/dist/ProfilePage/index.cjs.map +1 -1
- package/dist/ProfilePage/index.mjs +12 -8
- package/dist/ProfilePage/index.mjs.map +1 -1
- package/dist/ProfilePage.cjs +12 -8
- package/dist/ProfilePage.cjs.map +1 -1
- package/dist/ProfilePage.mjs +12 -8
- package/dist/ProfilePage.mjs.map +1 -1
- package/dist/SearchPage/Filters/index.cjs +38 -18
- package/dist/SearchPage/Filters/index.cjs.map +1 -1
- package/dist/SearchPage/Filters/index.d.cts +2 -1
- package/dist/SearchPage/Filters/index.d.ts +2 -1
- package/dist/SearchPage/Filters/index.mjs +34 -17
- package/dist/SearchPage/Filters/index.mjs.map +1 -1
- package/dist/SearchPage/Filters.cjs +38 -18
- package/dist/SearchPage/Filters.cjs.map +1 -1
- package/dist/SearchPage/Filters.d.cts +13 -1
- package/dist/SearchPage/Filters.d.ts +13 -1
- package/dist/SearchPage/Filters.mjs +34 -17
- package/dist/SearchPage/Filters.mjs.map +1 -1
- package/dist/SearchPage/Results/index.cjs +87 -48
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +87 -48
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +87 -48
- package/dist/SearchPage/Results.cjs.map +1 -1
- package/dist/SearchPage/Results.d.cts +10 -3
- package/dist/SearchPage/Results.d.ts +10 -3
- package/dist/SearchPage/Results.mjs +87 -48
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +207 -99
- package/dist/SearchPage/index.cjs.map +1 -1
- package/dist/SearchPage/index.d.cts +2 -2
- package/dist/SearchPage/index.d.ts +2 -2
- package/dist/SearchPage/index.mjs +203 -98
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +207 -99
- package/dist/SearchPage.cjs.map +1 -1
- package/dist/SearchPage.d.cts +25 -3
- package/dist/SearchPage.d.ts +25 -3
- package/dist/SearchPage.mjs +203 -98
- package/dist/SearchPage.mjs.map +1 -1
- package/dist/TablePage/EditComponents/index.cjs +296 -0
- package/dist/TablePage/EditComponents/index.cjs.map +1 -0
- package/dist/TablePage/EditComponents/index.d.cts +3 -0
- package/dist/TablePage/EditComponents/index.d.ts +3 -0
- package/dist/TablePage/EditComponents/index.mjs +286 -0
- package/dist/TablePage/EditComponents/index.mjs.map +1 -0
- package/dist/TablePage/EditComponents.cjs +296 -0
- package/dist/TablePage/EditComponents.cjs.map +1 -0
- package/dist/TablePage/EditComponents.d.cts +21 -0
- package/dist/TablePage/EditComponents.d.ts +21 -0
- package/dist/TablePage/EditComponents.mjs +286 -0
- package/dist/TablePage/EditComponents.mjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.cjs +59 -58
- package/dist/TablePage/ModalProvider/index.cjs.map +1 -1
- package/dist/TablePage/ModalProvider/index.d.cts +1 -1
- package/dist/TablePage/ModalProvider/index.d.ts +1 -1
- package/dist/TablePage/ModalProvider/index.mjs +50 -59
- package/dist/TablePage/ModalProvider/index.mjs.map +1 -1
- package/dist/TablePage/ModalProvider.cjs +59 -58
- package/dist/TablePage/ModalProvider.cjs.map +1 -1
- package/dist/TablePage/ModalProvider.d.cts +7 -2
- package/dist/TablePage/ModalProvider.d.ts +7 -2
- package/dist/TablePage/ModalProvider.mjs +50 -59
- package/dist/TablePage/ModalProvider.mjs.map +1 -1
- package/dist/TablePage/index.cjs +555 -331
- package/dist/TablePage/index.cjs.map +1 -1
- package/dist/TablePage/index.d.cts +3 -2
- package/dist/TablePage/index.d.ts +3 -2
- package/dist/TablePage/index.mjs +539 -320
- package/dist/TablePage/index.mjs.map +1 -1
- package/dist/TablePage/players/index.cjs +24 -4
- package/dist/TablePage/players/index.cjs.map +1 -1
- package/dist/TablePage/players/index.mjs +24 -4
- package/dist/TablePage/players/index.mjs.map +1 -1
- package/dist/TablePage/players.cjs +24 -4
- package/dist/TablePage/players.cjs.map +1 -1
- package/dist/TablePage/players.mjs +24 -4
- package/dist/TablePage/players.mjs.map +1 -1
- package/dist/TablePage.cjs +555 -331
- package/dist/TablePage.cjs.map +1 -1
- package/dist/TablePage.d.cts +4 -1
- package/dist/TablePage.d.ts +4 -1
- package/dist/TablePage.mjs +539 -320
- package/dist/TablePage.mjs.map +1 -1
- package/dist/{index-D7WHhl3Q.d.ts → index-B23RQop0.d.ts} +12 -12
- package/dist/{index-DC0kK3aC.d.cts → index-Csj8S4A4.d.cts} +12 -12
- package/dist/index.cjs +889 -424
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.mjs +870 -421
- package/dist/index.mjs.map +1 -1
- package/dist/mocks/{EventDB.cjs → EventDetails.cjs} +203 -3
- package/dist/mocks/EventDetails.cjs.map +1 -0
- package/dist/mocks/EventDetails.d.cts +6 -0
- package/dist/mocks/EventDetails.d.ts +6 -0
- package/dist/mocks/{EventDB.mjs → EventDetails.mjs} +203 -3
- package/dist/mocks/EventDetails.mjs.map +1 -0
- package/dist/mocks/Tables.cjs +1 -1
- package/dist/mocks/Tables.cjs.map +1 -1
- package/dist/mocks/Tables.mjs +1 -1
- package/dist/mocks/Tables.mjs.map +1 -1
- package/dist/mocks/Tags.cjs +200 -0
- package/dist/mocks/Tags.cjs.map +1 -1
- package/dist/mocks/Tags.mjs +200 -0
- package/dist/mocks/Tags.mjs.map +1 -1
- package/dist/mocks/index.cjs +202 -2
- package/dist/mocks/index.cjs.map +1 -1
- package/dist/mocks/index.d.cts +1 -1
- package/dist/mocks/index.d.ts +1 -1
- package/dist/mocks/index.mjs +202 -2
- package/dist/mocks/index.mjs.map +1 -1
- package/dist/mocks.cjs +202 -2
- package/dist/mocks.cjs.map +1 -1
- package/dist/mocks.d.cts +1 -1
- package/dist/mocks.d.ts +1 -1
- package/dist/mocks.mjs +202 -2
- package/dist/mocks.mjs.map +1 -1
- package/dist/shared/index.cjs +327 -64
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.d.cts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.mjs +324 -64
- package/dist/shared/index.mjs.map +1 -1
- package/dist/shared.cjs +327 -64
- package/dist/shared.cjs.map +1 -1
- package/dist/shared.d.cts +25 -2
- package/dist/shared.d.ts +25 -2
- package/dist/shared.mjs +324 -64
- package/dist/shared.mjs.map +1 -1
- package/dist/types/event.d.cts +2 -3
- package/dist/types/event.d.ts +2 -3
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/search.d.cts +7 -1
- package/dist/types/search.d.ts +7 -1
- package/dist/types/tables.d.cts +1 -0
- package/dist/types/tables.d.ts +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.ts +2 -2
- package/package.json +9 -2
- package/dist/TablePage/ModalProvider/index.css +0 -49
- package/dist/TablePage/ModalProvider/index.css.map +0 -1
- package/dist/TablePage/ModalProvider.css +0 -49
- package/dist/TablePage/ModalProvider.css.map +0 -1
- package/dist/TablePage/index.css +0 -49
- package/dist/TablePage/index.css.map +0 -1
- package/dist/TablePage.css +0 -49
- package/dist/TablePage.css.map +0 -1
- package/dist/index.css +0 -49
- package/dist/index.css.map +0 -1
- package/dist/mocks/EventDB.cjs.map +0 -1
- package/dist/mocks/EventDB.d.cts +0 -6
- package/dist/mocks/EventDB.d.ts +0 -6
- package/dist/mocks/EventDB.mjs.map +0 -1
- package/dist/shared/Modal/index.cjs +0 -64
- package/dist/shared/Modal/index.cjs.map +0 -1
- package/dist/shared/Modal/index.css +0 -49
- package/dist/shared/Modal/index.css.map +0 -1
- package/dist/shared/Modal/index.d.cts +0 -2
- package/dist/shared/Modal/index.d.ts +0 -2
- package/dist/shared/Modal/index.mjs +0 -62
- package/dist/shared/Modal/index.mjs.map +0 -1
- package/dist/shared/Modal.cjs +0 -64
- package/dist/shared/Modal.cjs.map +0 -1
- package/dist/shared/Modal.css +0 -49
- package/dist/shared/Modal.css.map +0 -1
- package/dist/shared/Modal.d.cts +0 -9
- package/dist/shared/Modal.d.ts +0 -9
- package/dist/shared/Modal.mjs +0 -62
- package/dist/shared/Modal.mjs.map +0 -1
- package/dist/shared/index.css +0 -49
- package/dist/shared/index.css.map +0 -1
- package/dist/shared.css +0 -49
- package/dist/shared.css.map +0 -1
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
|
+
import { DistanceOption } from '../types/search';
|
|
2
3
|
import { Tag } from '../types/tag';
|
|
3
4
|
|
|
5
|
+
interface DistanceFilterProps {
|
|
6
|
+
distances: DistanceOption[];
|
|
7
|
+
selectedDistance?: number;
|
|
8
|
+
onChange: (distance: number) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Component for filtering search results by distance
|
|
12
|
+
* //todo add JSDoc for this
|
|
13
|
+
*/
|
|
14
|
+
declare const DistanceFilter: React__default.FC<DistanceFilterProps>;
|
|
15
|
+
|
|
4
16
|
interface ExpiredTablesFilterProps {
|
|
5
17
|
includeExpiredTables: boolean;
|
|
6
18
|
onChange: (include: boolean) => void;
|
|
@@ -63,4 +75,4 @@ interface TypeFilterProps {
|
|
|
63
75
|
*/
|
|
64
76
|
declare const TypeFilter: React__default.FC<TypeFilterProps>;
|
|
65
77
|
|
|
66
|
-
export { ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter };
|
|
78
|
+
export { DistanceFilter, ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import Typography3 from '@mui/material/Typography';
|
|
3
|
+
import FormControl from '@mui/material/FormControl';
|
|
4
|
+
import Select from '@mui/material/Select';
|
|
5
|
+
import MenuItem from '@mui/material/MenuItem';
|
|
6
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
7
|
import FormControlLabel from '@mui/material/FormControlLabel';
|
|
3
8
|
import Checkbox from '@mui/material/Checkbox';
|
|
4
9
|
import Box from '@mui/material/Box';
|
|
5
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
|
-
import Typography2 from '@mui/material/Typography';
|
|
7
|
-
import FormControl from '@mui/material/FormControl';
|
|
8
10
|
import RadioGroup from '@mui/material/RadioGroup';
|
|
9
11
|
import Radio from '@mui/material/Radio';
|
|
10
12
|
import React, { useEffect } from 'react';
|
|
@@ -14,6 +16,24 @@ import Popper from '@mui/material/Popper';
|
|
|
14
16
|
import Divider from '@mui/material/Divider';
|
|
15
17
|
import FormGroup from '@mui/material/FormGroup';
|
|
16
18
|
|
|
19
|
+
var DistanceFilter = ({ distances, selectedDistance, onChange }) => {
|
|
20
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
21
|
+
/* @__PURE__ */ jsx(Typography3, { variant: "h6", gutterBottom: true, children: "Distance" }),
|
|
22
|
+
/* @__PURE__ */ jsx(FormControl, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxs(
|
|
23
|
+
Select,
|
|
24
|
+
{
|
|
25
|
+
value: selectedDistance !== void 0 ? selectedDistance : "",
|
|
26
|
+
onChange: (e) => onChange(Number(e.target.value)),
|
|
27
|
+
displayEmpty: true,
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsx(MenuItem, { value: "", children: /* @__PURE__ */ jsx("em", { children: "Any Distance" }) }),
|
|
30
|
+
distances.map((option) => /* @__PURE__ */ jsx(MenuItem, { value: option.value, children: option.display }, option.value))
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
) })
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
36
|
+
var DistanceFilter_default = DistanceFilter;
|
|
17
37
|
var ExpiredTablesFilter = ({
|
|
18
38
|
includeExpiredTables,
|
|
19
39
|
onChange
|
|
@@ -47,7 +67,7 @@ var SortOptions = ({
|
|
|
47
67
|
onChange == null ? void 0 : onChange(event.target.value);
|
|
48
68
|
};
|
|
49
69
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
50
|
-
/* @__PURE__ */ jsx(
|
|
70
|
+
/* @__PURE__ */ jsx(Typography3, { variant: "h6", gutterBottom: true, children: "Sort By" }),
|
|
51
71
|
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(RadioGroup, { defaultValue, onChange: handleSortChange, children: SORT_OPTIONS.map((option) => /* @__PURE__ */ jsx(
|
|
52
72
|
FormControlLabel,
|
|
53
73
|
{
|
|
@@ -114,13 +134,13 @@ var TagsFilter = ({
|
|
|
114
134
|
shouldHaveAtLeastOne: ""
|
|
115
135
|
});
|
|
116
136
|
const tagOptions = React.useMemo(() => {
|
|
137
|
+
var _a;
|
|
117
138
|
console.log("available tags: " + JSON.stringify(Tags));
|
|
118
139
|
console.log(!Tags);
|
|
119
|
-
|
|
120
|
-
return Tags.map((tag) => ({
|
|
140
|
+
return (_a = Tags == null ? void 0 : Tags.map((tag) => ({
|
|
121
141
|
value: tag.id,
|
|
122
142
|
label: tag.label
|
|
123
|
-
}));
|
|
143
|
+
}))) != null ? _a : [];
|
|
124
144
|
}, [Tags]);
|
|
125
145
|
const handleTagChange = (tagId, category) => {
|
|
126
146
|
let newTags = [];
|
|
@@ -148,8 +168,7 @@ var TagsFilter = ({
|
|
|
148
168
|
};
|
|
149
169
|
const renderSelectedTags = (selectedTags, category) => {
|
|
150
170
|
const tagValues = [];
|
|
151
|
-
|
|
152
|
-
Tags.forEach((tag) => {
|
|
171
|
+
Tags == null ? void 0 : Tags.forEach((tag) => {
|
|
153
172
|
if (selectedTags.includes(tag.id)) {
|
|
154
173
|
tagValues.push(tag);
|
|
155
174
|
}
|
|
@@ -169,7 +188,7 @@ var TagsFilter = ({
|
|
|
169
188
|
const createTagSelector = (category, label) => {
|
|
170
189
|
const selectedTags = category === "mustHave" ? mustHaveTags : category === "mustNotHave" ? mustNotHaveTags : shouldHaveAtLeastOneTags;
|
|
171
190
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
172
|
-
/* @__PURE__ */ jsx(
|
|
191
|
+
/* @__PURE__ */ jsx(Typography3, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
|
|
173
192
|
renderSelectedTags(selectedTags, category),
|
|
174
193
|
/* @__PURE__ */ jsx(
|
|
175
194
|
Autocomplete,
|
|
@@ -222,7 +241,7 @@ var TagsFilter = ({
|
|
|
222
241
|
] });
|
|
223
242
|
};
|
|
224
243
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
225
|
-
/* @__PURE__ */ jsx(
|
|
244
|
+
/* @__PURE__ */ jsx(Typography3, { variant: "h6", gutterBottom: true, children: "Tags" }),
|
|
226
245
|
createTagSelector("mustHave", "Must Have Tags"),
|
|
227
246
|
/* @__PURE__ */ jsx(Divider, { sx: { my: 2 } }),
|
|
228
247
|
createTagSelector("mustNotHave", "Must Not Have Tags"),
|
|
@@ -284,7 +303,7 @@ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
|
|
|
284
303
|
}
|
|
285
304
|
};
|
|
286
305
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
287
|
-
/* @__PURE__ */ jsx(
|
|
306
|
+
/* @__PURE__ */ jsx(Typography3, { variant: "h6", gutterBottom: true, children: "Text Search" }),
|
|
288
307
|
/* @__PURE__ */ jsxs(Box, { sx: { mb: 2 }, children: [
|
|
289
308
|
/* @__PURE__ */ jsx(
|
|
290
309
|
TextField,
|
|
@@ -328,7 +347,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
328
347
|
}
|
|
329
348
|
};
|
|
330
349
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
331
|
-
/* @__PURE__ */ jsx(
|
|
350
|
+
/* @__PURE__ */ jsx(Typography3, { variant: "h6", gutterBottom: true, children: "Type" }),
|
|
332
351
|
/* @__PURE__ */ jsx(FormGroup, { children: types.map((type) => /* @__PURE__ */ jsx(
|
|
333
352
|
FormControlLabel,
|
|
334
353
|
{
|
|
@@ -336,9 +355,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
336
355
|
Checkbox,
|
|
337
356
|
{
|
|
338
357
|
checked: selectedTypes.includes(type.id),
|
|
339
|
-
onChange: () => handleTypeChange(type.id)
|
|
340
|
-
disabled: type.id === "event",
|
|
341
|
-
title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
|
|
358
|
+
onChange: () => handleTypeChange(type.id)
|
|
342
359
|
}
|
|
343
360
|
),
|
|
344
361
|
label: type.label
|
|
@@ -349,6 +366,6 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
349
366
|
};
|
|
350
367
|
var TypeFilter_default = TypeFilter;
|
|
351
368
|
|
|
352
|
-
export { ExpiredTablesFilter_default as ExpiredTablesFilter, SortOptions_default as SortOptions, TagsFilter_default as TagsFilter, TextSearchCard_default as TextSearchCard, TypeFilter_default as TypeFilter };
|
|
369
|
+
export { DistanceFilter_default as DistanceFilter, ExpiredTablesFilter_default as ExpiredTablesFilter, SortOptions_default as SortOptions, TagsFilter_default as TagsFilter, TextSearchCard_default as TextSearchCard, TypeFilter_default as TypeFilter };
|
|
353
370
|
//# sourceMappingURL=Filters.mjs.map
|
|
354
371
|
//# sourceMappingURL=Filters.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/shared/Chip.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TextSearchCard.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["jsx","Typography","FormControlLabel","Fragment","jsxs","Box","React","TextField","Checkbox","useEffect"],"mappings":"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","file":"Filters.mjs","sourcesContent":["\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\"\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n \r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n if (!Tags || Tags.length === 0 || !Tags.map) return [];\r\n return Tags.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n }));\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n if (!Tags || Tags.length === 0 || !Tags.map) return null;\r\n Tags.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n disabled={type.id === 'event'}\n title={type.id === 'event' ? 'Coming soon! Currently only player and table search are supported.' : ''}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/SearchPage/Filters/DistanceFilter.tsx","../../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/shared/Chip.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TextSearchCard.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["Typography","jsx","jsxs","Fragment","FormControl","FormControlLabel","Box","React","TextField","Checkbox","useEffect"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAM,iBAAgD,CAAC,EAAE,SAAA,EAAW,gBAAA,EAAkB,UAAS,KAAM;AACnG,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACA,WAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,UAAA,EAEtC,CAAA;AAAA,oBACA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAS,IAAA,EAAC,MAAK,OAAA,EAC1B,QAAA,kBAAA,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,gBAAA,KAAqB,MAAA,GAAY,gBAAA,GAAmB,EAAA;AAAA,QAC3D,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAChD,YAAA,EAAY,IAAA;AAAA,QAEZ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,YAAS,KAAA,EAAM,EAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,0BAAY,CAAA,EAClB,CAAA;AAAA,UACC,SAAA,CAAU,GAAA,CAAI,CAAC,MAAA,qBACd,GAAA,CAAC,QAAA,EAAA,EAA4B,KAAA,EAAO,MAAA,CAAO,KAAA,EACxC,QAAA,EAAA,MAAA,CAAO,OAAA,EAAA,EADK,MAAA,CAAO,KAEtB,CACD;AAAA;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,sBAAA,GAAQ;AClCf,IAAM,sBAA0D,CAAC;AAAA,EAC/D,oBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEC,IAAC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,IACb,QAAA,kBAAAA,GAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,yBACEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,oBAAA;AAAA,UACT,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,UAC1C,KAAA,EAAM;AAAA;AAAA,OACR;AAAA,MAEF,KAAA,EAAM;AAAA;AAAA,GACR,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,2BAAA,GAAQ;ACjBf,IAAM,YAAA,GAAe;AAAA,EACnB,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,EACtC,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EAChC,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,cAAA;AAC1B,CAAA;AAEA,IAAM,cAA0C,CAAC;AAAA,EAC/C,YAAA,GAAe,WAAA;AAAA,EACf;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAA+C;AACvE,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,MAAM,MAAA,CAAO,KAAA,CAAA;AAAA,EAC1B,CAAA;AAEA,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,IAACD,WAAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,SAAA,EAEtC,CAAA;AAAA,oBACAC,GAAAA,CAACG,WAAAA,EAAA,EACC,0BAAAH,GAAAA,CAAC,UAAA,EAAA,EAAW,YAAA,EAA4B,QAAA,EAAU,gBAAA,EAC/C,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,2BACjBA,GAAAA;AAAA,MAACI,gBAAAA;AAAA,MAAA;AAAA,QAEC,OAAO,MAAA,CAAO,EAAA;AAAA,QACd,OAAA,kBAASJ,GAAAA,CAAC,KAAA,EAAA,EAAM,CAAA;AAAA,QAChB,OAAO,MAAA,CAAO;AAAA,OAAA;AAAA,MAHT,MAAA,CAAO;AAAA,KAKf,GACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,mBAAA,GAAQ;AC9CA,SAAR,IAAA,CAAsB,EAAE,GAAA,EAAK,cAAA,EAAe,EAA2D;AAH9G,EAAA,IAAA,EAAA;AAIE,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,EAAA,GAAa,SAAA;AAC3B,EAAA,uBACIA,GAAAA,CAAAE,QAAAA,EAAA,EACA,QAAA,kBAAAD,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MAEG,SAAA,EAAU,iHAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,WAAA,EAAa,sBAAsB,KAAK,CAAA,YAAA,CAAA;AAAA,QACxC,UAAA,EAAY,CAAA,2CAAA,EAA8C,KAAK,CAAA,oCAAA,EAAuC,KAAK,CAAA,kBAAA,CAAA;AAAA,QAC3G,UAAA,EAAY,uBAAA;AAAA,QACZ,MAAA,EAAQ,gDAAgD,KAAK,CAAA,aAAA;AAAA,OAC/D;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,KAAA;AAAA,QACJ,kCACGD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,cAAA,CAAe,GAAA,CAAI,EAAE,CAAA;AAAA,YACpC,SAAA,EAAU,8GAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,UAAA,EAAY;AAAA,aACd;AAAA,YACH,QAAA,EAAA;AAAA;AAAA;AAED;AAAA,KAAA;AAAA,IApBC,GAAA,CAAI;AAAA,GAsBf,EACA,CAAA;AAGJ;ACFA,IAAM,aAAwC,CAAC;AAAA,EAC7C,QAAA;AAAA,EAAU,IAAA,EAAM,OAAO,EAAC;AAAA,EAAG;AAC7B,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,cAAc,eAAe,CAAA,GAAI,MAAM,QAAA,CAAA,CAAmB,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,QAAA,KAAY,EAAE,CAAA;AACpG,EAAA,MAAM,CAAC,iBAAiB,kBAAkB,CAAA,GAAI,MAAM,QAAA,CAAA,CAAmB,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,WAAA,KAAe,EAAE,CAAA;AAC7G,EAAA,MAAM,CAAC,0BAA0B,2BAA2B,CAAA,GAAI,MAAM,QAAA,CAAA,CAAmB,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,oBAAA,KAAwB,EAAE,CAAA;AAGxI,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,eAAA,CAAgB,mBAAA,CAAoB,QAAA,IAAY,EAAE,CAAA;AAClD,MAAA,kBAAA,CAAmB,mBAAA,CAAoB,WAAA,IAAe,EAAE,CAAA;AACxD,MAAA,2BAAA,CAA4B,mBAAA,CAAoB,oBAAA,IAAwB,EAAE,CAAA;AAAA,IAC5E;AAAA,EACF,CAAA,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAExB,EAAA,IAAA,GAAO,CAAC,CAAC,IAAA,GAAO,IAAA,GAAO,EAAC;AAExB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,MAAM,QAAA,CAAS;AAAA,IACnD,QAAA,EAAU,EAAA;AAAA,IACV,WAAA,EAAa,EAAA;AAAA,IACb,oBAAA,EAAsB;AAAA,GACvB,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,MAAM;AAzDzC,IAAA,IAAA,EAAA;AA0DI,IAAA,OAAA,CAAQ,GAAA,CAAI,kBAAA,GAAqB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAI,CAAA;AACjB,IAAA,OAAA,CAAO,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAI,CAAA,GAAA,MAAQ;AAAA,MACvB,OAAO,GAAA,CAAI,EAAA;AAAA,MACX,OAAO,GAAA,CAAI;AAAA,KACb,CAAA,CAAA,KAHO,YAGA,EAAC;AAAA,EACV,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,EAAe,QAAA,KAA0B;AAChE,IAAA,IAAI,UAAoB,EAAC;AAEzB,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,UAAA;AACH,QAAA,OAAA,GAAU,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,GACjC,YAAA,CAAa,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,KAAK,CAAA,GACtC,CAAC,GAAG,cAAc,KAAK,CAAA;AAC3B,QAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,OAAA,GAAU,eAAA,CAAgB,QAAA,CAAS,KAAK,CAAA,GACpC,eAAA,CAAgB,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,KAAK,CAAA,GACzC,CAAC,GAAG,iBAAiB,KAAK,CAAA;AAC9B,QAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,QAAA;AAAA,MACF,KAAK,sBAAA;AACH,QAAA,OAAA,GAAU,wBAAA,CAAyB,QAAA,CAAS,KAAK,CAAA,GAC7C,wBAAA,CAAyB,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,KAAK,CAAA,GAClD,CAAC,GAAG,0BAA0B,KAAK,CAAA;AACvC,QAAA,2BAAA,CAA4B,OAAO,CAAA;AACnC,QAAA;AAAA;AAGJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS;AAAA,QACP,QAAA,EAAU,QAAA,KAAa,UAAA,GAAa,OAAA,GAAU,YAAA;AAAA,QAC9C,WAAA,EAAa,QAAA,KAAa,aAAA,GAAgB,OAAA,GAAU,eAAA;AAAA,QACpD,oBAAA,EAAsB,QAAA,KAAa,sBAAA,GAAyB,OAAA,GAAU;AAAA,OACvE,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,kBAAA,GAAqB,CAAC,YAAA,EAAwB,QAAA,KAA0B;AAC5E,IAAA,MAAM,YAAmB,EAAC;AAE1B,IAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACrB,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA,EAAG;AACjC,QAAA,SAAA,CAAU,KAAK,GAAG,CAAA;AAAA,MACpB;AAAA,IACF,CAAA,CAAA;AAEA,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACEA,GAAAA,CAACK,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,SAAS,MAAA,EAAQ,QAAA,EAAU,QAAQ,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA,EAAE,EACzD,oBAAU,GAAA,CAAI,CAAC,wBACdL,GAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,GAAA;AAAA,QACA,cAAA,EAAgB,CAAC,KAAA,KAAU,eAAA,CAAgB,OAAO,QAAQ;AAAA,OAAA;AAAA,MAFrD,GAAA,CAAI;AAAA,KAIZ,CAAA,EACH,CAAA;AAAA,EAEJ,CAAA;AAGA,EAAA,MAAM,iBAAA,GAAoB,CAAC,QAAA,EAAuB,KAAA,KAAkB;AAClE,IAAA,MAAM,eACJ,QAAA,KAAa,UAAA,GACT,YAAA,GACA,QAAA,KAAa,gBACX,eAAA,GACA,wBAAA;AAER,IAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAACD,WAAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,YAAA,EAAY,IAAA,EAAC,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EACtD,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAEC,kBAAA,CAAmB,cAAc,QAAQ,CAAA;AAAA,sBAE1CC,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UAEC,OAAA,EAAS,UAAA;AAAA,UACT,aAAA,EAAe,CAAC,OAAA,EAAS,KAAA,KAAU;AAEjC,YAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AAGtC,YAAA,YAAA,CAAa,OAAA,CAAQ,CAAA,EAAA,KAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAC,CAAA;AAGhD,YAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,cAAA,YAAA,CAAa,OAAA,CAAQ,CAAA,EAAA,KAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,YAClD;AACA,YAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,cAAA,eAAA,CAAgB,OAAA,CAAQ,CAAA,EAAA,KAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,YACrD;AACA,YAAA,IAAI,aAAa,sBAAA,EAAwB;AACvC,cAAA,wBAAA,CAAyB,OAAA,CAAQ,CAAA,EAAA,KAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,YAC9D;AAEA,YAAA,OAAO,OAAA,CACJ,MAAA;AAAA,cACC,CAAC,MAAA;AAAA;AAAA,gBAEC,CAAC,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAAA,gBAE/B,MAAA,CAAO,MAAM,WAAA,EAAY,CAAE,SAAS,KAAA,CAAM,UAAA,CAAW,aAAa;AAAA;AAAA,aACtE,CACC,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,UACf,CAAA;AAAA,UACA,KAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,YAAY,QAAQ,CAAA;AAAA,UAChC,aAAA,EAAe,CAAC,KAAA,EAAO,aAAA,KAAkB;AAEvC,YAAA,IAAI,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AACpC,cAAA,cAAA,CAAe;AAAA,gBACb,GAAG,WAAA;AAAA,gBACH,CAAC,QAAQ,GAAG;AAAA,eACb,CAAA;AAAA,YACH;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAU,CAAC,KAAA,EAAO,QAAA,KAAa;AAC7B,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,eAAA,CAAgB,QAAA,CAAS,OAAO,QAAQ,CAAA;AAAA,YAC1C;AAEA,YAAA,cAAA,CAAe;AAAA,cACb,GAAG,WAAA;AAAA,cACH,CAAC,QAAQ,GAAG;AAAA,aACb,CAAA;AAAA,UACH,CAAA;AAAA,UACA,KAAA,EAAO,EAAE,MAAA,EAAQ,YAAA,EAAa;AAAA,UAC9B,WAAA,EAAa,CAAC,MAAA,qBAAWA,GAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,MAAA,EAAQ,KAAA,EAAO,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI;AAAA,SAAA;AAAA,QApDrE,GAAG,QAAQ,CAAA,CAAA,EAAI,YAAA,CAAa,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA;AAqD5C,KAAA,EACF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,IAACD,WAAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,MAAA,EAEtC,CAAA;AAAA,IAEC,iBAAA,CAAkB,YAAY,gBAAgB,CAAA;AAAA,oBAE/CC,GAAAA,CAAC,OAAA,EAAA,EAAQ,IAAI,EAAE,EAAA,EAAI,GAAE,EAAG,CAAA;AAAA,IAEvB,iBAAA,CAAkB,eAAe,oBAAoB,CAAA;AAAA,oBAEtDA,GAAAA,CAAC,OAAA,EAAA,EAAQ,IAAI,EAAE,EAAA,EAAI,GAAE,EAAG,CAAA;AAAA,IAEvB,iBAAA,CAAkB,wBAAwB,iCAAiC;AAAA,GAAA,EAC9E,CAAA;AAEJ,CAAA;AAGA,IAAM,YAAA,GAAe,CAAC,KAAA,KAAuB;AAC3C,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,SAAA,EAAW;AAAA,QACT;AAAA,UACE,IAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,QAAA,EAAU;AAAA;AAAA;AACZ,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,MAAA,EAAQ,CAAC,CAAA,EAAG,GAAG;AAAA;AAAA;AACjB;AACF,OACF;AAAA,MACA,SAAA,EAAU;AAAA;AAAA,GACZ;AAEJ,CAAA;AAEA,IAAO,kBAAA,GAAQ;ACjOf,IAAM,iBAAgD,CAAC,EAAE,QAAA,EAAU,aAAA,EAAe,mBAAkB,KAAM;AACxG,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAIM,MAAM,QAAA,CAAA,CAAiB,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAmB,UAAS,EAAE,CAAA;AAC/E,EAAA,MAAM,CAAC,WAAW,YAAY,CAAA,GAAIA,MAAM,QAAA,CAAA,CAAkB,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAmB,cAAa,KAAK,CAAA;AAG/F,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,QAAA,CAAS,iBAAA,CAAkB,SAAS,EAAE,CAAA;AACtC,MAAA,YAAA,CAAa,iBAAA,CAAkB,aAAa,KAAK,CAAA;AAAA,IACnD;AAAA,EACF,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAGtB,EAAA,MAAM,aAAa,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA,IAAK,aAAA,CAAc,SAAS,OAAO,CAAA;AAEpF,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAA2C;AACpE,IAAA,MAAM,QAAA,GAAW,EAAE,MAAA,CAAO,KAAA;AAC1B,IAAA,QAAA,CAAS,QAAQ,CAAA;AAEjB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,EAAE,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,CAAA;AAAA,IACzC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAA,KAA2C;AACxE,IAAA,MAAM,YAAA,GAAe,EAAE,MAAA,CAAO,OAAA;AAC9B,IAAA,YAAA,CAAa,YAAY,CAAA;AAEzB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,EAAE,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,CAAA;AAAA,IAC7C;AAAA,EACF,CAAA;AAEA,EAAA,uBACEL,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,IAACD,WAAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,aAAA,EAEtC,CAAA;AAAA,oBACAE,KAACI,GAAAA,EAAA,EAAI,IAAI,EAAE,EAAA,EAAI,GAAE,EACf,QAAA,EAAA;AAAA,sBAAAL,GAAAA;AAAA,QAACO,SAAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,KAAA,EAAM,iCAAA;AAAA,UACN,OAAA,EAAQ,UAAA;AAAA,UACR,KAAA,EAAO,KAAA;AAAA,UACP,QAAA,EAAU,iBAAA;AAAA,UACV,WAAA,EAAY,uBAAA;AAAA,UACZ,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA;AAAE;AAAA,OACd;AAAA,sBACAP,GAAAA;AAAA,QAACI,gBAAAA;AAAA,QAAA;AAAA,UACC,yBACEJ,GAAAA;AAAA,YAACQ,QAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,SAAA;AAAA,cACT,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UAEF,KAAA,EAAM;AAAA;AAAA;AACR,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,sBAAA,GAAQ;ACrEf,IAAM,UAAA,GAAwC,CAAC,EAAE,KAAA,EAAO,uBAAuB,EAAC,EAAG,UAAS,KAAM;AAChG,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIF,KAAAA,CAAM,SAAmB,oBAAoB,CAAA;AAGvF,EAAAG,UAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,oBAAoB,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAAmB;AAC3C,IAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,QAAA,CAAS,MAAM,IAClD,aAAA,CAAc,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,MAAM,CAAA,GACxC,CAAC,GAAG,eAAe,MAAM,CAAA;AAE7B,IAAA,gBAAA,CAAiB,gBAAgB,CAAA;AAEjC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,gBAAgB,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AAEA,EAAA,uBACER,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,IAACD,WAAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,MAAA,EAEtC,CAAA;AAAA,oBACAC,GAAAA,CAAC,SAAA,EAAA,EACE,gBAAM,GAAA,CAAI,CAAC,yBACVA,GAAAA;AAAA,MAACI,gBAAAA;AAAA,MAAA;AAAA,QAEC,yBACEJ,GAAAA;AAAA,UAACQ,QAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,aAAA,CAAc,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAAA,YACvC,QAAA,EAAU,MAAM,gBAAA,CAAiB,IAAA,CAAK,EAAE;AAAA;AAAA,SAC1C;AAAA,QAEF,OAAO,IAAA,CAAK;AAAA,OAAA;AAAA,MAPP,IAAA,CAAK;AAAA,KASb,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,kBAAA,GAAQ","file":"Filters.mjs","sourcesContent":["\"use client\";\r\n\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { DistanceOption } from '@/types/search';\r\n\r\ninterface DistanceFilterProps {\r\n distances: DistanceOption[];\r\n selectedDistance?: number;\r\n onChange: (distance: number) => void;\r\n}\r\n\r\n/**\r\n * Component for filtering search results by distance\r\n * //todo add JSDoc for this\r\n */\r\nconst DistanceFilter: React.FC<DistanceFilterProps> = ({ distances, selectedDistance, onChange }) => {\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Distance\r\n </Typography>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={selectedDistance !== undefined ? selectedDistance : ''}\r\n onChange={(e) => onChange(Number(e.target.value))}\r\n displayEmpty\r\n >\r\n <MenuItem value=\"\">\r\n <em>Any Distance</em>\r\n </MenuItem>\r\n {distances.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n {option.display}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </>\r\n );\r\n};\r\n\r\nexport default DistanceFilter;\r\n","\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\"\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n\r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n return Tags?.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n })) ?? [];\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n Tags?.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n"]}
|
|
@@ -5,6 +5,7 @@ var Card = require('@mui/material/Card');
|
|
|
5
5
|
var CardContent = require('@mui/material/CardContent');
|
|
6
6
|
var Typography2 = require('@mui/material/Typography');
|
|
7
7
|
var Box = require('@mui/material/Box');
|
|
8
|
+
var navigation = require('next/navigation');
|
|
8
9
|
var material = require('@mui/material');
|
|
9
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
11
|
var CalendarTodayIcon = require('@mui/icons-material/CalendarToday');
|
|
@@ -76,29 +77,51 @@ function Chip({ tag, removeCallback }) {
|
|
|
76
77
|
function generateTagsDisplay(tag) {
|
|
77
78
|
return /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id);
|
|
78
79
|
}
|
|
79
|
-
function renderTagsFromIds(ids, legalTags) {
|
|
80
|
+
function renderTagsFromIds(ids, legalTags, options = {}) {
|
|
80
81
|
if (!ids || !legalTags || legalTags.length === 0) {
|
|
81
82
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
82
83
|
}
|
|
84
|
+
const { showEventTag = false, eventTagId } = options;
|
|
83
85
|
const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
|
|
84
|
-
|
|
86
|
+
const sortedTags = [...validTags].sort((a, b) => {
|
|
87
|
+
if (showEventTag && eventTagId !== void 0) {
|
|
88
|
+
if (a.id === eventTagId && b.id === eventTagId) return 0;
|
|
89
|
+
if (a.id === eventTagId) return -1;
|
|
90
|
+
if (b.id === eventTagId) return 1;
|
|
91
|
+
}
|
|
92
|
+
const priorityOrder = ["Organizer Run", "Display Only"];
|
|
93
|
+
const aIndex = priorityOrder.indexOf(a.label);
|
|
94
|
+
const bIndex = priorityOrder.indexOf(b.label);
|
|
95
|
+
if (aIndex !== -1 && bIndex !== -1) {
|
|
96
|
+
return aIndex - bIndex;
|
|
97
|
+
}
|
|
98
|
+
if (aIndex !== -1) return -1;
|
|
99
|
+
if (bIndex !== -1) return 1;
|
|
100
|
+
return 0;
|
|
101
|
+
});
|
|
102
|
+
return sortedTags.map((tag) => generateTagsDisplay(tag));
|
|
85
103
|
}
|
|
86
104
|
var BaseSearchResultCard = ({
|
|
87
105
|
result,
|
|
88
106
|
onClick,
|
|
89
107
|
children,
|
|
90
108
|
icon,
|
|
91
|
-
tags
|
|
109
|
+
tags,
|
|
110
|
+
showEventTag,
|
|
111
|
+
eventTagId
|
|
92
112
|
}) => {
|
|
113
|
+
const router = navigation.useRouter();
|
|
93
114
|
const handleClick = (e) => {
|
|
115
|
+
const url = `/${result.type}/${result.id}`;
|
|
116
|
+
if (e.ctrlKey || e.metaKey || e.shiftKey) {
|
|
117
|
+
e.stopPropagation();
|
|
118
|
+
window.open(url, "_blank");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
94
121
|
if (onClick) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
window.open(url, "_blank");
|
|
99
|
-
} else {
|
|
100
|
-
onClick(result.id);
|
|
101
|
-
}
|
|
122
|
+
onClick(result.id);
|
|
123
|
+
} else {
|
|
124
|
+
router.push(url);
|
|
102
125
|
}
|
|
103
126
|
};
|
|
104
127
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -107,7 +130,7 @@ var BaseSearchResultCard = ({
|
|
|
107
130
|
elevation: 6,
|
|
108
131
|
sx: {
|
|
109
132
|
width: "100%",
|
|
110
|
-
cursor:
|
|
133
|
+
cursor: "pointer",
|
|
111
134
|
boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)",
|
|
112
135
|
transition: "box-shadow 0.3s ease-in-out",
|
|
113
136
|
"&:hover": {
|
|
@@ -129,7 +152,7 @@ var BaseSearchResultCard = ({
|
|
|
129
152
|
const text = full || "";
|
|
130
153
|
return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
|
|
131
154
|
})() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography2__default.default, { variant: "body1", children: result.description }),
|
|
132
|
-
result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
|
|
155
|
+
result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags, { showEventTag, eventTagId }) })
|
|
133
156
|
] })
|
|
134
157
|
] })
|
|
135
158
|
}
|
|
@@ -151,7 +174,7 @@ var EventResultCard = ({
|
|
|
151
174
|
try {
|
|
152
175
|
const date = new Date(dateString);
|
|
153
176
|
return date.toLocaleDateString("en-US", options);
|
|
154
|
-
} catch (
|
|
177
|
+
} catch (__) {
|
|
155
178
|
return dateString;
|
|
156
179
|
}
|
|
157
180
|
};
|
|
@@ -191,6 +214,9 @@ var EventResultCard = ({
|
|
|
191
214
|
] }) });
|
|
192
215
|
};
|
|
193
216
|
var EventResultCard_default = EventResultCard;
|
|
217
|
+
|
|
218
|
+
// src/data/values.tsx
|
|
219
|
+
var DEFAULT_PROFILE_PIC = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40MDY1OTM0MDY1OTM0MDE2IDEuNDA2NTkzNDA2NTkzNDAxNikgc2NhbGUoMi44MSAyLjgxKSI+Cgk8cGF0aCBkPSJNIDQ1IDg4IGMgLTExLjA0OSAwIC0yMS4xOCAtMi4wMDMgLTI5LjAyMSAtOC42MzQgQyA2LjIxMiA3MS4xMDUgMCA1OC43NjQgMCA0NSBDIDAgMjAuMTg3IDIwLjE4NyAwIDQ1IDAgYyAyNC44MTMgMCA0NSAyMC4xODcgNDUgNDUgYyAwIDEzLjc2NSAtNi4yMTIgMjYuMTA1IC0xNS45NzkgMzQuMzY2IEMgNjYuMTgxIDg1Ljk5OCA1Ni4wNDkgODggNDUgODggeiIgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBmaWxsOiByZ2IoMjE0LDIxNCwyMTQpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cgk8cGF0aCBkPSJNIDQ1IDYwLjcxIGMgLTExLjQ3OSAwIC0yMC44MTggLTkuMzM5IC0yMC44MTggLTIwLjgxNyBjIDAgLTExLjQ3OSA5LjMzOSAtMjAuODE4IDIwLjgxOCAtMjAuODE4IGMgMTEuNDc5IDAgMjAuODE3IDkuMzM5IDIwLjgxNyAyMC44MTggQyA2NS44MTcgNTEuMzcxIDU2LjQ3OSA2MC43MSA0NSA2MC43MSB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KCTxwYXRoIGQ9Ik0gNDUgOTAgYyAtMTAuNjEzIDAgLTIwLjkyMiAtMy43NzMgLTI5LjAyOCAtMTAuNjI1IGMgLTAuNjQ4IC0wLjU0OCAtMC44OCAtMS40NDQgLTAuNTc5IC0yLjIzNyBDIDIwLjAzNCA2NC45MTkgMzEuOTMzIDU2LjcxIDQ1IDU2LjcxIHMgMjQuOTY2IDguMjA5IDI5LjYwNyAyMC40MjggYyAwLjMwMSAwLjc5MyAwLjA2OSAxLjY4OSAtMC41NzkgMi4yMzcgQyA2NS45MjIgODYuMjI3IDU1LjYxMyA5MCA0NSA5MCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9nPgo8L3N2Zz4=";
|
|
194
220
|
var PlayerResultCard = ({
|
|
195
221
|
result,
|
|
196
222
|
onClick,
|
|
@@ -226,7 +252,7 @@ var PlayerResultCard = ({
|
|
|
226
252
|
const playerIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
227
253
|
Avatar__default.default,
|
|
228
254
|
{
|
|
229
|
-
src: result.imageUrl,
|
|
255
|
+
src: result.imageUrl || DEFAULT_PROFILE_PIC,
|
|
230
256
|
alt: result.title,
|
|
231
257
|
sx: {
|
|
232
258
|
width: 40,
|
|
@@ -250,7 +276,9 @@ var SearchResultCard_default = SearchResultCard;
|
|
|
250
276
|
var TableResultCard = ({
|
|
251
277
|
result,
|
|
252
278
|
onClick,
|
|
253
|
-
tags
|
|
279
|
+
tags,
|
|
280
|
+
showEventTag,
|
|
281
|
+
eventTagId
|
|
254
282
|
}) => {
|
|
255
283
|
const rawCapacity = result.capacity;
|
|
256
284
|
const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
|
|
@@ -268,40 +296,51 @@ var TableResultCard = ({
|
|
|
268
296
|
}
|
|
269
297
|
}
|
|
270
298
|
);
|
|
271
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
300
|
+
BaseSearchResultCard_default,
|
|
301
|
+
{
|
|
302
|
+
result,
|
|
303
|
+
onClick,
|
|
304
|
+
icon: tableIcon,
|
|
305
|
+
tags,
|
|
306
|
+
showEventTag,
|
|
307
|
+
eventTagId,
|
|
308
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Box__default.default, { sx: { mb: 2 }, children: [
|
|
309
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
|
|
310
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography2__default.default, { variant: "body2", children: [
|
|
311
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
|
|
312
|
+
" ",
|
|
313
|
+
hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
|
|
314
|
+
] }),
|
|
315
|
+
typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
316
|
+
Chip2__default.default,
|
|
317
|
+
{
|
|
318
|
+
icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
|
|
319
|
+
label: hasDM ? "DM Present" : "No DM",
|
|
320
|
+
color: hasDM ? "success" : "warning",
|
|
321
|
+
size: "small"
|
|
322
|
+
}
|
|
323
|
+
)
|
|
324
|
+
] }),
|
|
325
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
326
|
+
LinearProgress__default.default,
|
|
327
|
+
{
|
|
328
|
+
variant: "determinate",
|
|
329
|
+
value: occupancyPercentage,
|
|
330
|
+
sx: {
|
|
331
|
+
height: 10,
|
|
332
|
+
borderRadius: 5,
|
|
333
|
+
backgroundColor: "#e0e0e0",
|
|
334
|
+
"& .MuiLinearProgress-bar": {
|
|
335
|
+
backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
|
|
336
|
+
}
|
|
337
|
+
}
|
|
299
338
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
339
|
+
),
|
|
340
|
+
hasDefinedCapacity && /* @__PURE__ */ jsxRuntime.jsx(Typography2__default.default, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
|
|
341
|
+
] })
|
|
342
|
+
}
|
|
343
|
+
);
|
|
305
344
|
};
|
|
306
345
|
var TableResultCard_default = TableResultCard;
|
|
307
346
|
|