@mbpockets/shared-ui 0.1.20 → 0.1.21
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/index.cjs +209 -121
- package/dist/EventPage/index.cjs.map +1 -1
- package/dist/EventPage/index.mjs +201 -119
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +209 -121
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.mjs +201 -119
- package/dist/EventPage.mjs.map +1 -1
- package/dist/PlayerPage/index.cjs.map +1 -1
- package/dist/PlayerPage/index.mjs.map +1 -1
- package/dist/PlayerPage.cjs.map +1 -1
- package/dist/PlayerPage.mjs.map +1 -1
- package/dist/ProfilePage/index.cjs.map +1 -1
- package/dist/ProfilePage/index.mjs.map +1 -1
- package/dist/ProfilePage.cjs.map +1 -1
- package/dist/ProfilePage.mjs.map +1 -1
- package/dist/SearchPage/Filters/index.cjs +149 -43
- package/dist/SearchPage/Filters/index.cjs.map +1 -1
- package/dist/SearchPage/Filters/index.d.cts +1 -2
- package/dist/SearchPage/Filters/index.d.ts +1 -2
- package/dist/SearchPage/Filters/index.mjs +146 -42
- package/dist/SearchPage/Filters/index.mjs.map +1 -1
- package/dist/SearchPage/Filters.cjs +149 -43
- package/dist/SearchPage/Filters.cjs.map +1 -1
- package/dist/SearchPage/Filters.d.cts +38 -3
- package/dist/SearchPage/Filters.d.ts +38 -3
- package/dist/SearchPage/Filters.mjs +146 -42
- package/dist/SearchPage/Filters.mjs.map +1 -1
- package/dist/SearchPage/Results/index.cjs +139 -67
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +127 -63
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +139 -67
- package/dist/SearchPage/Results.cjs.map +1 -1
- package/dist/SearchPage/Results.d.cts +21 -12
- package/dist/SearchPage/Results.d.ts +21 -12
- package/dist/SearchPage/Results.mjs +127 -63
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +496 -221
- package/dist/SearchPage/index.cjs.map +1 -1
- package/dist/SearchPage/index.d.cts +1 -1
- package/dist/SearchPage/index.d.ts +1 -1
- package/dist/SearchPage/index.mjs +483 -216
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +496 -221
- package/dist/SearchPage.cjs.map +1 -1
- package/dist/SearchPage.d.cts +78 -7
- package/dist/SearchPage.d.ts +78 -7
- package/dist/SearchPage.mjs +483 -216
- package/dist/SearchPage.mjs.map +1 -1
- package/dist/TablePage/index.cjs +10 -1
- package/dist/TablePage/index.cjs.map +1 -1
- package/dist/TablePage/index.d.cts +2 -2
- package/dist/TablePage/index.d.ts +2 -2
- package/dist/TablePage/index.mjs +10 -2
- package/dist/TablePage/index.mjs.map +1 -1
- package/dist/TablePage.cjs +10 -1
- package/dist/TablePage.cjs.map +1 -1
- package/dist/TablePage.d.cts +7 -2
- package/dist/TablePage.d.ts +7 -2
- package/dist/TablePage.mjs +10 -2
- package/dist/TablePage.mjs.map +1 -1
- package/dist/index.cjs +447 -178
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +435 -175
- package/dist/index.mjs.map +1 -1
- package/dist/mocks/SearchResults.cjs +22 -15
- package/dist/mocks/SearchResults.cjs.map +1 -1
- package/dist/mocks/SearchResults.d.cts +3 -15
- package/dist/mocks/SearchResults.d.ts +3 -15
- package/dist/mocks/SearchResults.mjs +22 -15
- package/dist/mocks/SearchResults.mjs.map +1 -1
- package/dist/mocks/index.cjs +22 -15
- package/dist/mocks/index.cjs.map +1 -1
- package/dist/mocks/index.d.cts +2 -1
- package/dist/mocks/index.d.ts +2 -1
- package/dist/mocks/index.mjs +22 -15
- package/dist/mocks/index.mjs.map +1 -1
- package/dist/mocks.cjs +22 -15
- package/dist/mocks.cjs.map +1 -1
- package/dist/mocks.d.cts +2 -1
- package/dist/mocks.d.ts +2 -1
- package/dist/mocks.mjs +22 -15
- package/dist/mocks.mjs.map +1 -1
- package/dist/{common → shared}/index.cjs.map +1 -1
- package/dist/{common → shared}/index.d.cts +1 -1
- package/dist/{common → shared}/index.d.ts +1 -1
- package/dist/{common → shared}/index.mjs.map +1 -1
- package/dist/{common.cjs → shared.cjs} +2 -2
- package/dist/{common.cjs.map → shared.cjs.map} +1 -1
- package/dist/{common.css → shared.css} +1 -1
- package/dist/{common.mjs → shared.mjs} +2 -2
- package/dist/{common.mjs.map → shared.mjs.map} +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/search.d.cts +23 -1
- package/dist/types/search.d.ts +23 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
- /package/dist/{common → shared}/Modal/index.cjs +0 -0
- /package/dist/{common → shared}/Modal/index.cjs.map +0 -0
- /package/dist/{common → shared}/Modal/index.css +0 -0
- /package/dist/{common → shared}/Modal/index.css.map +0 -0
- /package/dist/{common → shared}/Modal/index.d.cts +0 -0
- /package/dist/{common → shared}/Modal/index.d.ts +0 -0
- /package/dist/{common → shared}/Modal/index.mjs +0 -0
- /package/dist/{common → shared}/Modal/index.mjs.map +0 -0
- /package/dist/{common → shared}/Modal.cjs +0 -0
- /package/dist/{common → shared}/Modal.cjs.map +0 -0
- /package/dist/{common → shared}/Modal.css +0 -0
- /package/dist/{common → shared}/Modal.css.map +0 -0
- /package/dist/{common → shared}/Modal.d.cts +0 -0
- /package/dist/{common → shared}/Modal.d.ts +0 -0
- /package/dist/{common → shared}/Modal.mjs +0 -0
- /package/dist/{common → shared}/Modal.mjs.map +0 -0
- /package/dist/{common → shared}/index.cjs +0 -0
- /package/dist/{common → shared}/index.css +0 -0
- /package/dist/{common → shared}/index.css.map +0 -0
- /package/dist/{common → shared}/index.mjs +0 -0
- /package/dist/{common.css.map → shared.css.map} +0 -0
- /package/dist/{common.d.cts → shared.d.cts} +0 -0
- /package/dist/{common.d.ts → shared.d.ts} +0 -0
package/dist/SearchPage.cjs
CHANGED
|
@@ -1,61 +1,93 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var FormControlLabel = require('@mui/material/FormControlLabel');
|
|
5
|
+
var Checkbox = require('@mui/material/Checkbox');
|
|
6
|
+
var Box8 = require('@mui/material/Box');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
var Typography6 = require('@mui/material/Typography');
|
|
5
9
|
var FormControl = require('@mui/material/FormControl');
|
|
6
10
|
var RadioGroup = require('@mui/material/RadioGroup');
|
|
7
|
-
var FormControlLabel = require('@mui/material/FormControlLabel');
|
|
8
11
|
var Radio = require('@mui/material/Radio');
|
|
9
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
10
12
|
var React = require('react');
|
|
11
|
-
var Box2 = require('@mui/material/Box');
|
|
12
13
|
var Autocomplete = require('@mui/material/Autocomplete');
|
|
13
14
|
var TextField = require('@mui/material/TextField');
|
|
14
15
|
var Popper = require('@mui/material/Popper');
|
|
15
|
-
var
|
|
16
|
+
var Divider2 = require('@mui/material/Divider');
|
|
16
17
|
var FormGroup = require('@mui/material/FormGroup');
|
|
17
|
-
var Checkbox = require('@mui/material/Checkbox');
|
|
18
18
|
var Button = require('@mui/material/Button');
|
|
19
19
|
var SearchIcon = require('@mui/icons-material/Search');
|
|
20
|
+
var Pagination = require('@mui/material/Pagination');
|
|
20
21
|
var Avatar = require('@mui/material/Avatar');
|
|
22
|
+
var Card2 = require('@mui/material/Card');
|
|
23
|
+
var CardContent2 = require('@mui/material/CardContent');
|
|
21
24
|
var material = require('@mui/material');
|
|
22
|
-
var
|
|
25
|
+
var Chip2 = require('@mui/material/Chip');
|
|
26
|
+
var LinearProgress = require('@mui/material/LinearProgress');
|
|
27
|
+
var PersonIcon = require('@mui/icons-material/Person');
|
|
28
|
+
var SupervisorAccountIcon = require('@mui/icons-material/SupervisorAccount');
|
|
29
|
+
var TableRestaurantIcon = require('@mui/icons-material/TableRestaurant');
|
|
23
30
|
var CalendarTodayIcon = require('@mui/icons-material/CalendarToday');
|
|
24
31
|
var LocationOnIcon = require('@mui/icons-material/LocationOn');
|
|
25
32
|
var EventIcon = require('@mui/icons-material/Event');
|
|
26
33
|
var Grid = require('@mui/material/Grid');
|
|
27
|
-
var Card2 = require('@mui/material/Card');
|
|
28
34
|
var CardHeader = require('@mui/material/CardHeader');
|
|
29
|
-
var
|
|
35
|
+
var CircularProgress = require('@mui/material/CircularProgress');
|
|
30
36
|
|
|
31
37
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
32
38
|
|
|
33
|
-
var
|
|
39
|
+
var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
|
|
40
|
+
var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
|
|
41
|
+
var Box8__default = /*#__PURE__*/_interopDefault(Box8);
|
|
42
|
+
var Typography6__default = /*#__PURE__*/_interopDefault(Typography6);
|
|
34
43
|
var FormControl__default = /*#__PURE__*/_interopDefault(FormControl);
|
|
35
44
|
var RadioGroup__default = /*#__PURE__*/_interopDefault(RadioGroup);
|
|
36
|
-
var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
|
|
37
45
|
var Radio__default = /*#__PURE__*/_interopDefault(Radio);
|
|
38
46
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
39
|
-
var Box2__default = /*#__PURE__*/_interopDefault(Box2);
|
|
40
47
|
var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
|
|
41
48
|
var TextField__default = /*#__PURE__*/_interopDefault(TextField);
|
|
42
49
|
var Popper__default = /*#__PURE__*/_interopDefault(Popper);
|
|
43
|
-
var
|
|
50
|
+
var Divider2__default = /*#__PURE__*/_interopDefault(Divider2);
|
|
44
51
|
var FormGroup__default = /*#__PURE__*/_interopDefault(FormGroup);
|
|
45
|
-
var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
|
|
46
52
|
var Button__default = /*#__PURE__*/_interopDefault(Button);
|
|
47
53
|
var SearchIcon__default = /*#__PURE__*/_interopDefault(SearchIcon);
|
|
54
|
+
var Pagination__default = /*#__PURE__*/_interopDefault(Pagination);
|
|
48
55
|
var Avatar__default = /*#__PURE__*/_interopDefault(Avatar);
|
|
49
|
-
var
|
|
56
|
+
var Card2__default = /*#__PURE__*/_interopDefault(Card2);
|
|
57
|
+
var CardContent2__default = /*#__PURE__*/_interopDefault(CardContent2);
|
|
58
|
+
var Chip2__default = /*#__PURE__*/_interopDefault(Chip2);
|
|
59
|
+
var LinearProgress__default = /*#__PURE__*/_interopDefault(LinearProgress);
|
|
60
|
+
var PersonIcon__default = /*#__PURE__*/_interopDefault(PersonIcon);
|
|
61
|
+
var SupervisorAccountIcon__default = /*#__PURE__*/_interopDefault(SupervisorAccountIcon);
|
|
62
|
+
var TableRestaurantIcon__default = /*#__PURE__*/_interopDefault(TableRestaurantIcon);
|
|
50
63
|
var CalendarTodayIcon__default = /*#__PURE__*/_interopDefault(CalendarTodayIcon);
|
|
51
64
|
var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
|
|
52
65
|
var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
|
|
53
66
|
var Grid__default = /*#__PURE__*/_interopDefault(Grid);
|
|
54
|
-
var Card2__default = /*#__PURE__*/_interopDefault(Card2);
|
|
55
67
|
var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
|
|
56
|
-
var
|
|
68
|
+
var CircularProgress__default = /*#__PURE__*/_interopDefault(CircularProgress);
|
|
57
69
|
|
|
58
|
-
// src/components/SearchPage/Filters/
|
|
70
|
+
// src/components/SearchPage/Filters/ExpiredTablesFilter.tsx
|
|
71
|
+
var ExpiredTablesFilter = ({
|
|
72
|
+
includeExpiredTables,
|
|
73
|
+
onChange
|
|
74
|
+
}) => {
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
FormControlLabel__default.default,
|
|
77
|
+
{
|
|
78
|
+
control: /* @__PURE__ */ jsxRuntime.jsx(
|
|
79
|
+
Checkbox__default.default,
|
|
80
|
+
{
|
|
81
|
+
checked: includeExpiredTables,
|
|
82
|
+
onChange: (e) => onChange(e.target.checked),
|
|
83
|
+
color: "primary"
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
label: "Show expired tables"
|
|
87
|
+
}
|
|
88
|
+
) });
|
|
89
|
+
};
|
|
90
|
+
var ExpiredTablesFilter_default = ExpiredTablesFilter;
|
|
59
91
|
var SORT_OPTIONS = [
|
|
60
92
|
{ id: "relevance", label: "Relevance" },
|
|
61
93
|
{ id: "newest", label: "Newest" },
|
|
@@ -69,7 +101,7 @@ var SortOptions = ({
|
|
|
69
101
|
onChange == null ? void 0 : onChange(event.target.value);
|
|
70
102
|
};
|
|
71
103
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
72
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
104
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "h6", gutterBottom: true, children: "Sort By" }),
|
|
73
105
|
/* @__PURE__ */ jsxRuntime.jsx(FormControl__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroup__default.default, { defaultValue, onChange: handleSortChange, children: SORT_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
74
106
|
FormControlLabel__default.default,
|
|
75
107
|
{
|
|
@@ -82,13 +114,53 @@ var SortOptions = ({
|
|
|
82
114
|
] });
|
|
83
115
|
};
|
|
84
116
|
var SortOptions_default = SortOptions;
|
|
117
|
+
function Chip({ tag, removeCallback }) {
|
|
118
|
+
var _a;
|
|
119
|
+
const color = (_a = tag.color) != null ? _a : "#bfbcbb";
|
|
120
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
121
|
+
"span",
|
|
122
|
+
{
|
|
123
|
+
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",
|
|
124
|
+
style: {
|
|
125
|
+
borderColor: `color-mix(in srgb, ${color}, black 50%)`,
|
|
126
|
+
background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,
|
|
127
|
+
textShadow: "black 1.5px 1px 1.5px",
|
|
128
|
+
filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`
|
|
129
|
+
},
|
|
130
|
+
children: [
|
|
131
|
+
tag.label,
|
|
132
|
+
removeCallback && /* @__PURE__ */ jsxRuntime.jsx(
|
|
133
|
+
"button",
|
|
134
|
+
{
|
|
135
|
+
type: "button",
|
|
136
|
+
onClick: () => removeCallback(tag.id),
|
|
137
|
+
className: "ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full",
|
|
138
|
+
style: {
|
|
139
|
+
textShadow: "black 1px 1px 1px"
|
|
140
|
+
},
|
|
141
|
+
children: "X"
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
tag.id
|
|
147
|
+
) });
|
|
148
|
+
}
|
|
85
149
|
var TagsFilter = ({
|
|
86
150
|
onChange,
|
|
87
|
-
tags: Tags = []
|
|
151
|
+
tags: Tags = [],
|
|
152
|
+
initialSelectedTags
|
|
88
153
|
}) => {
|
|
89
|
-
const [mustHaveTags, setMustHaveTags] = React__default.default.useState([]);
|
|
90
|
-
const [mustNotHaveTags, setMustNotHaveTags] = React__default.default.useState([]);
|
|
91
|
-
const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React__default.default.useState([]);
|
|
154
|
+
const [mustHaveTags, setMustHaveTags] = React__default.default.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustHave) || []);
|
|
155
|
+
const [mustNotHaveTags, setMustNotHaveTags] = React__default.default.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustNotHave) || []);
|
|
156
|
+
const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React__default.default.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.shouldHaveAtLeastOne) || []);
|
|
157
|
+
React__default.default.useEffect(() => {
|
|
158
|
+
if (initialSelectedTags) {
|
|
159
|
+
setMustHaveTags(initialSelectedTags.mustHave || []);
|
|
160
|
+
setMustNotHaveTags(initialSelectedTags.mustNotHave || []);
|
|
161
|
+
setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);
|
|
162
|
+
}
|
|
163
|
+
}, [initialSelectedTags]);
|
|
92
164
|
Tags = !!Tags ? Tags : [];
|
|
93
165
|
const [inputValues, setInputValues] = React__default.default.useState({
|
|
94
166
|
mustHave: "",
|
|
@@ -98,7 +170,7 @@ var TagsFilter = ({
|
|
|
98
170
|
const tagOptions = React__default.default.useMemo(() => {
|
|
99
171
|
console.log("available tags: " + JSON.stringify(Tags));
|
|
100
172
|
console.log(!Tags);
|
|
101
|
-
if (!Tags || Tags.length
|
|
173
|
+
if (!Tags || Tags.length === 0 || !Tags.map) return [];
|
|
102
174
|
return Tags.map((tag) => ({
|
|
103
175
|
value: tag.id,
|
|
104
176
|
label: tag.label
|
|
@@ -130,7 +202,7 @@ var TagsFilter = ({
|
|
|
130
202
|
};
|
|
131
203
|
const renderSelectedTags = (selectedTags, category) => {
|
|
132
204
|
const tagValues = [];
|
|
133
|
-
if (!Tags || Tags.length
|
|
205
|
+
if (!Tags || Tags.length === 0 || !Tags.map) return null;
|
|
134
206
|
Tags.forEach((tag) => {
|
|
135
207
|
if (selectedTags.includes(tag.id)) {
|
|
136
208
|
tagValues.push(tag);
|
|
@@ -139,27 +211,11 @@ var TagsFilter = ({
|
|
|
139
211
|
if (tagValues.length === 0) {
|
|
140
212
|
return null;
|
|
141
213
|
}
|
|
142
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
143
|
-
|
|
214
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
215
|
+
Chip,
|
|
144
216
|
{
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
background: tag.color || "#bfbcbb",
|
|
148
|
-
color: "white",
|
|
149
|
-
textShadow: "black 0.2em 0.2em 0.4em"
|
|
150
|
-
},
|
|
151
|
-
children: [
|
|
152
|
-
tag.label,
|
|
153
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
-
"button",
|
|
155
|
-
{
|
|
156
|
-
type: "button",
|
|
157
|
-
onClick: () => handleTagChange(tag.id, category),
|
|
158
|
-
className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
|
|
159
|
-
children: "\xD7"
|
|
160
|
-
}
|
|
161
|
-
)
|
|
162
|
-
]
|
|
217
|
+
tag,
|
|
218
|
+
removeCallback: (tagId) => handleTagChange(tagId, category)
|
|
163
219
|
},
|
|
164
220
|
tag.id
|
|
165
221
|
)) });
|
|
@@ -167,7 +223,7 @@ var TagsFilter = ({
|
|
|
167
223
|
const createTagSelector = (category, label) => {
|
|
168
224
|
const selectedTags = category === "mustHave" ? mustHaveTags : category === "mustNotHave" ? mustNotHaveTags : shouldHaveAtLeastOneTags;
|
|
169
225
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
170
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
|
|
171
227
|
renderSelectedTags(selectedTags, category),
|
|
172
228
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
173
229
|
Autocomplete__default.default,
|
|
@@ -220,11 +276,11 @@ var TagsFilter = ({
|
|
|
220
276
|
] });
|
|
221
277
|
};
|
|
222
278
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
223
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
279
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "h6", gutterBottom: true, children: "Tags" }),
|
|
224
280
|
createTagSelector("mustHave", "Must Have Tags"),
|
|
225
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
281
|
+
/* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
|
|
226
282
|
createTagSelector("mustNotHave", "Must Not Have Tags"),
|
|
227
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
283
|
+
/* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
|
|
228
284
|
createTagSelector("shouldHaveAtLeastOne", "Should Contain At Least One Tag")
|
|
229
285
|
] });
|
|
230
286
|
};
|
|
@@ -254,21 +310,80 @@ var CustomPopper = (props) => {
|
|
|
254
310
|
);
|
|
255
311
|
};
|
|
256
312
|
var TagsFilter_default = TagsFilter;
|
|
257
|
-
var
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
313
|
+
var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
|
|
314
|
+
const [query, setQuery] = React__default.default.useState((initialTextSearch == null ? void 0 : initialTextSearch.query) || "");
|
|
315
|
+
const [titleOnly, setTitleOnly] = React__default.default.useState((initialTextSearch == null ? void 0 : initialTextSearch.titleOnly) || false);
|
|
316
|
+
React.useEffect(() => {
|
|
317
|
+
if (initialTextSearch) {
|
|
318
|
+
setQuery(initialTextSearch.query || "");
|
|
319
|
+
setTitleOnly(initialTextSearch.titleOnly || false);
|
|
320
|
+
}
|
|
321
|
+
}, [initialTextSearch]);
|
|
322
|
+
const shouldShow = selectedTypes.includes("table") || selectedTypes.includes("event");
|
|
323
|
+
if (!shouldShow) {
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
const handleQueryChange = (e) => {
|
|
327
|
+
const newQuery = e.target.value;
|
|
328
|
+
setQuery(newQuery);
|
|
329
|
+
if (onChange) {
|
|
330
|
+
onChange({ query: newQuery, titleOnly });
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
const handleTitleOnlyChange = (e) => {
|
|
334
|
+
const newTitleOnly = e.target.checked;
|
|
335
|
+
setTitleOnly(newTitleOnly);
|
|
336
|
+
if (onChange) {
|
|
337
|
+
onChange({ query, titleOnly: newTitleOnly });
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
341
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "h6", gutterBottom: true, children: "Text Search" }),
|
|
342
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { mb: 2 }, children: [
|
|
343
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
344
|
+
TextField__default.default,
|
|
345
|
+
{
|
|
346
|
+
fullWidth: true,
|
|
347
|
+
label: "Search in title and description",
|
|
348
|
+
variant: "outlined",
|
|
349
|
+
value: query,
|
|
350
|
+
onChange: handleQueryChange,
|
|
351
|
+
placeholder: "Enter search terms...",
|
|
352
|
+
sx: { mb: 1 }
|
|
353
|
+
}
|
|
354
|
+
),
|
|
355
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
356
|
+
FormControlLabel__default.default,
|
|
357
|
+
{
|
|
358
|
+
control: /* @__PURE__ */ jsxRuntime.jsx(
|
|
359
|
+
Checkbox__default.default,
|
|
360
|
+
{
|
|
361
|
+
checked: titleOnly,
|
|
362
|
+
onChange: handleTitleOnlyChange
|
|
363
|
+
}
|
|
364
|
+
),
|
|
365
|
+
label: "Search in title only"
|
|
366
|
+
}
|
|
367
|
+
)
|
|
368
|
+
] })
|
|
369
|
+
] });
|
|
370
|
+
};
|
|
371
|
+
var TextSearchCard_default = TextSearchCard;
|
|
372
|
+
var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
373
|
+
const [selectedTypes, setSelectedTypes] = React__default.default.useState(initialSelectedTypes);
|
|
374
|
+
React.useEffect(() => {
|
|
375
|
+
setSelectedTypes(initialSelectedTypes);
|
|
376
|
+
}, [initialSelectedTypes]);
|
|
264
377
|
const handleTypeChange = (typeId) => {
|
|
265
378
|
const newSelectedTypes = selectedTypes.includes(typeId) ? selectedTypes.filter((id) => id !== typeId) : [...selectedTypes, typeId];
|
|
266
379
|
setSelectedTypes(newSelectedTypes);
|
|
267
|
-
|
|
380
|
+
if (onChange) {
|
|
381
|
+
onChange(newSelectedTypes);
|
|
382
|
+
}
|
|
268
383
|
};
|
|
269
384
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
270
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
271
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormGroup__default.default, { children:
|
|
385
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "h6", gutterBottom: true, children: "Type" }),
|
|
386
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormGroup__default.default, { children: types.map((type) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
272
387
|
FormControlLabel__default.default,
|
|
273
388
|
{
|
|
274
389
|
control: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -276,7 +391,8 @@ var TypeFilter = ({ onChange }) => {
|
|
|
276
391
|
{
|
|
277
392
|
checked: selectedTypes.includes(type.id),
|
|
278
393
|
onChange: () => handleTypeChange(type.id),
|
|
279
|
-
disabled: type.
|
|
394
|
+
disabled: type.id === "event",
|
|
395
|
+
title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
|
|
280
396
|
}
|
|
281
397
|
),
|
|
282
398
|
label: type.label
|
|
@@ -287,23 +403,68 @@ var TypeFilter = ({ onChange }) => {
|
|
|
287
403
|
};
|
|
288
404
|
var TypeFilter_default = TypeFilter;
|
|
289
405
|
var FiltersContainer = ({
|
|
406
|
+
initialSelectedTypes = [],
|
|
407
|
+
initialSelectedTags,
|
|
408
|
+
initialTextSearch,
|
|
409
|
+
includeExpiredTables = false,
|
|
290
410
|
onTypeChange,
|
|
291
411
|
onTagChange,
|
|
412
|
+
onTextSearchChange,
|
|
413
|
+
onIncludeExpiredTablesChange,
|
|
292
414
|
onSubmit,
|
|
293
|
-
tags
|
|
415
|
+
tags,
|
|
416
|
+
searchTypes
|
|
294
417
|
}) => {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
418
|
+
const [selectedTypes, setSelectedTypes] = React__default.default.useState(initialSelectedTypes);
|
|
419
|
+
React.useEffect(() => {
|
|
420
|
+
setSelectedTypes(initialSelectedTypes);
|
|
421
|
+
}, [initialSelectedTypes]);
|
|
422
|
+
const handleTypeChange = (types) => {
|
|
423
|
+
setSelectedTypes(types);
|
|
424
|
+
if (onTypeChange) {
|
|
425
|
+
onTypeChange(types);
|
|
426
|
+
}
|
|
427
|
+
};
|
|
428
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { children: [
|
|
429
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
430
|
+
TypeFilter_default,
|
|
431
|
+
{
|
|
432
|
+
types: searchTypes,
|
|
433
|
+
initialSelectedTypes,
|
|
434
|
+
onChange: handleTypeChange
|
|
435
|
+
}
|
|
436
|
+
),
|
|
437
|
+
/* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
|
|
438
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
439
|
+
TextSearchCard_default,
|
|
440
|
+
{
|
|
441
|
+
selectedTypes,
|
|
442
|
+
initialTextSearch,
|
|
443
|
+
onChange: onTextSearchChange
|
|
444
|
+
}
|
|
445
|
+
),
|
|
446
|
+
(selectedTypes.includes("table") || selectedTypes.includes("event")) && /* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
|
|
298
447
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
299
448
|
TagsFilter_default,
|
|
300
449
|
{
|
|
301
450
|
tags,
|
|
451
|
+
initialSelectedTags,
|
|
302
452
|
onChange: onTagChange
|
|
303
453
|
}
|
|
304
454
|
),
|
|
305
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
306
|
-
/* @__PURE__ */ jsxRuntime.
|
|
455
|
+
/* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
|
|
456
|
+
selectedTypes.includes("table") && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
457
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
458
|
+
ExpiredTablesFilter_default,
|
|
459
|
+
{
|
|
460
|
+
includeExpiredTables,
|
|
461
|
+
onChange: onIncludeExpiredTablesChange || (() => {
|
|
462
|
+
})
|
|
463
|
+
}
|
|
464
|
+
),
|
|
465
|
+
/* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } })
|
|
466
|
+
] }),
|
|
467
|
+
/* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
307
468
|
Button__default.default,
|
|
308
469
|
{
|
|
309
470
|
variant: "contained",
|
|
@@ -328,41 +489,24 @@ var FiltersContainer = ({
|
|
|
328
489
|
] });
|
|
329
490
|
};
|
|
330
491
|
var FiltersContainer_default = FiltersContainer;
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
borderColor: `color-mix(in srgb, ${color}, black 50%)`,
|
|
340
|
-
background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,
|
|
341
|
-
textShadow: "black 1.5px 1px 1.5px",
|
|
342
|
-
filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`
|
|
343
|
-
},
|
|
344
|
-
children: [
|
|
345
|
-
tag.label,
|
|
346
|
-
removeCallback && /* @__PURE__ */ jsxRuntime.jsx(
|
|
347
|
-
"button",
|
|
348
|
-
{
|
|
349
|
-
type: "button",
|
|
350
|
-
onClick: () => removeCallback(tag.id),
|
|
351
|
-
className: "ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full",
|
|
352
|
-
style: {
|
|
353
|
-
textShadow: "black 1px 1px 1px"
|
|
354
|
-
},
|
|
355
|
-
children: "X"
|
|
356
|
-
}
|
|
357
|
-
)
|
|
358
|
-
]
|
|
359
|
-
},
|
|
360
|
-
tag.id
|
|
361
|
-
) });
|
|
362
|
-
}
|
|
492
|
+
var NextGameLabel = ({ nextGameTime }) => {
|
|
493
|
+
const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
|
|
494
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
|
|
495
|
+
"Next Game: ",
|
|
496
|
+
date.toLocaleString()
|
|
497
|
+
] });
|
|
498
|
+
};
|
|
499
|
+
var NextGameLabel_default = NextGameLabel;
|
|
363
500
|
function generateTagsDisplay(tag) {
|
|
364
501
|
return /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id);
|
|
365
502
|
}
|
|
503
|
+
function renderTagsFromIds(ids, legalTags) {
|
|
504
|
+
if (!ids || !legalTags || legalTags.length === 0) {
|
|
505
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
506
|
+
}
|
|
507
|
+
const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
|
|
508
|
+
return validTags.map((tag) => generateTagsDisplay(tag));
|
|
509
|
+
}
|
|
366
510
|
var BaseSearchResultCard = ({
|
|
367
511
|
result,
|
|
368
512
|
onClick,
|
|
@@ -370,13 +514,19 @@ var BaseSearchResultCard = ({
|
|
|
370
514
|
icon,
|
|
371
515
|
tags
|
|
372
516
|
}) => {
|
|
373
|
-
const handleClick = () => {
|
|
517
|
+
const handleClick = (e) => {
|
|
374
518
|
if (onClick) {
|
|
375
|
-
|
|
519
|
+
if (e.ctrlKey || e.metaKey || e.shiftKey) {
|
|
520
|
+
e.stopPropagation();
|
|
521
|
+
const url = `/${result.type}/${result.id}`;
|
|
522
|
+
window.open(url, "_blank");
|
|
523
|
+
} else {
|
|
524
|
+
onClick(result.id);
|
|
525
|
+
}
|
|
376
526
|
}
|
|
377
527
|
};
|
|
378
528
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
379
|
-
|
|
529
|
+
Card2__default.default,
|
|
380
530
|
{
|
|
381
531
|
elevation: 6,
|
|
382
532
|
sx: {
|
|
@@ -389,48 +539,22 @@ var BaseSearchResultCard = ({
|
|
|
389
539
|
},
|
|
390
540
|
marginBottom: 2
|
|
391
541
|
},
|
|
392
|
-
onClick: handleClick,
|
|
393
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
394
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
395
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
396
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
542
|
+
onClick: (e) => handleClick(e),
|
|
543
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent2__default.default, { sx: { display: "flex", alignItems: "flex-start" }, children: [
|
|
544
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
|
|
545
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { flex: 1 }, children: [
|
|
546
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "h6", sx: { mb: 1 }, children: result.title }),
|
|
547
|
+
result.nextGameTime && /* @__PURE__ */ jsxRuntime.jsx(NextGameLabel_default, { nextGameTime: result.nextGameTime }),
|
|
548
|
+
result.type === "table" && result.shortDescription ? /* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "body2", sx: { mb: 1 }, children: result.shortDescription }) : null,
|
|
397
549
|
children,
|
|
398
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
}, children: (() => {
|
|
407
|
-
const MAX_VISIBLE = 5;
|
|
408
|
-
const tagObjs = result.tags.map((tagId) => tags.find((t) => t.id === tagId)).filter((t) => Boolean(t));
|
|
409
|
-
const visible = tagObjs.slice(0, MAX_VISIBLE);
|
|
410
|
-
const hiddenCount = Math.max(tagObjs.length - visible.length, 0);
|
|
411
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
412
|
-
visible.map((tag) => generateTagsDisplay(tag)),
|
|
413
|
-
hiddenCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
414
|
-
"span",
|
|
415
|
-
{
|
|
416
|
-
className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
|
|
417
|
-
style: {
|
|
418
|
-
marginTop: "6px",
|
|
419
|
-
marginRight: "6px",
|
|
420
|
-
marginBottom: "6px",
|
|
421
|
-
background: "#9e9e9e",
|
|
422
|
-
color: "white",
|
|
423
|
-
textShadow: "black 0.2em 0.2em 0.4em"
|
|
424
|
-
},
|
|
425
|
-
children: [
|
|
426
|
-
"+",
|
|
427
|
-
hiddenCount,
|
|
428
|
-
" more"
|
|
429
|
-
]
|
|
430
|
-
}
|
|
431
|
-
)
|
|
432
|
-
] });
|
|
433
|
-
})() }) })
|
|
550
|
+
result.type === "table" ? /* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "body1", children: (() => {
|
|
551
|
+
var _a, _b;
|
|
552
|
+
const full = (_b = (_a = result.fullDescription) != null ? _a : result.description) != null ? _b : "";
|
|
553
|
+
if (typeof full !== "string") return "";
|
|
554
|
+
const text = full || "";
|
|
555
|
+
return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
|
|
556
|
+
})() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "body1", children: result.description }),
|
|
557
|
+
result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
|
|
434
558
|
] })
|
|
435
559
|
] })
|
|
436
560
|
}
|
|
@@ -485,21 +609,60 @@ var PlayerResultCard = ({
|
|
|
485
609
|
return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
|
|
486
610
|
};
|
|
487
611
|
var PlayerResultCard_default = PlayerResultCard;
|
|
488
|
-
var TableResultCard = ({
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
612
|
+
var TableResultCard = ({
|
|
613
|
+
result,
|
|
614
|
+
onClick,
|
|
615
|
+
tags
|
|
616
|
+
}) => {
|
|
617
|
+
const rawCapacity = result.capacity;
|
|
618
|
+
const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
|
|
619
|
+
const capacity = hasDefinedCapacity ? rawCapacity : 0;
|
|
620
|
+
const activePlayers = typeof result.numPlayers === "number" ? result.numPlayers : 0;
|
|
621
|
+
const availableSlots = Math.max(capacity - activePlayers, 0);
|
|
622
|
+
const hasDM = typeof result.hasDM === "boolean" ? result.hasDM : Boolean(result.dungeonMaster);
|
|
623
|
+
const occupancyPercentage = hasDefinedCapacity ? activePlayers / capacity * 100 : 100;
|
|
624
|
+
const tableIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
625
|
+
TableRestaurantIcon__default.default,
|
|
626
|
+
{
|
|
627
|
+
sx: {
|
|
628
|
+
fontSize: 40,
|
|
629
|
+
color: "primary.main"
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
);
|
|
633
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { mb: 2 }, children: [
|
|
634
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
|
|
635
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", children: [
|
|
636
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
|
|
637
|
+
" ",
|
|
638
|
+
hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
|
|
499
639
|
] }),
|
|
500
|
-
|
|
640
|
+
typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
641
|
+
Chip2__default.default,
|
|
642
|
+
{
|
|
643
|
+
icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
|
|
644
|
+
label: hasDM ? "DM Present" : "No DM",
|
|
645
|
+
color: hasDM ? "success" : "warning",
|
|
646
|
+
size: "small"
|
|
647
|
+
}
|
|
648
|
+
)
|
|
501
649
|
] }),
|
|
502
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
650
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
651
|
+
LinearProgress__default.default,
|
|
652
|
+
{
|
|
653
|
+
variant: "determinate",
|
|
654
|
+
value: occupancyPercentage,
|
|
655
|
+
sx: {
|
|
656
|
+
height: 10,
|
|
657
|
+
borderRadius: 5,
|
|
658
|
+
backgroundColor: "#e0e0e0",
|
|
659
|
+
"& .MuiLinearProgress-bar": {
|
|
660
|
+
backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
),
|
|
665
|
+
hasDefinedCapacity && /* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
|
|
503
666
|
] }) });
|
|
504
667
|
};
|
|
505
668
|
var TableResultCard_default = TableResultCard;
|
|
@@ -518,20 +681,42 @@ var EventResultCard = ({
|
|
|
518
681
|
try {
|
|
519
682
|
const date = new Date(dateString);
|
|
520
683
|
return date.toLocaleDateString("en-US", options);
|
|
521
|
-
} catch {
|
|
684
|
+
} catch (error) {
|
|
522
685
|
return dateString;
|
|
523
686
|
}
|
|
524
687
|
};
|
|
525
688
|
const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
|
|
526
689
|
const location = result.location || "Location TBD";
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
690
|
+
const eventIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
691
|
+
EventIcon__default.default,
|
|
692
|
+
{
|
|
693
|
+
sx: {
|
|
694
|
+
fontSize: 40,
|
|
695
|
+
color: "primary.main"
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
);
|
|
699
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: eventIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { mb: 2 }, children: [
|
|
700
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
|
|
701
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
|
|
702
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", children: [
|
|
703
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Date:" }),
|
|
704
|
+
" ",
|
|
705
|
+
formattedDate
|
|
706
|
+
] })
|
|
531
707
|
] }),
|
|
532
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
533
|
-
/* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1,
|
|
534
|
-
/* @__PURE__ */ jsxRuntime.
|
|
708
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", alignItems: "center" }, children: [
|
|
709
|
+
/* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
|
|
710
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", children: [
|
|
711
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Location:" }),
|
|
712
|
+
" ",
|
|
713
|
+
location
|
|
714
|
+
] })
|
|
715
|
+
] }),
|
|
716
|
+
result.organizer && /* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", sx: { mt: 1 }, children: [
|
|
717
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Organizer:" }),
|
|
718
|
+
" ",
|
|
719
|
+
result.organizer
|
|
535
720
|
] })
|
|
536
721
|
] }) });
|
|
537
722
|
};
|
|
@@ -539,10 +724,12 @@ var EventResultCard_default = EventResultCard;
|
|
|
539
724
|
var ResultsContainer = ({
|
|
540
725
|
results,
|
|
541
726
|
onResultClick,
|
|
542
|
-
tags
|
|
727
|
+
tags,
|
|
728
|
+
pagination,
|
|
729
|
+
onPacketChange
|
|
543
730
|
}) => {
|
|
544
|
-
if (results.length === 0 || !results.map) {
|
|
545
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
731
|
+
if (!results || results.length === 0 || !results.map) {
|
|
732
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
|
|
546
733
|
}
|
|
547
734
|
const onPlayerClick = (id) => {
|
|
548
735
|
onResultClick == null ? void 0 : onResultClick(id, "player");
|
|
@@ -553,43 +740,68 @@ var ResultsContainer = ({
|
|
|
553
740
|
const onEventClick = (id) => {
|
|
554
741
|
onResultClick == null ? void 0 : onResultClick(id, "event");
|
|
555
742
|
};
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
743
|
+
const handlePacketChange = (_event, packet) => {
|
|
744
|
+
onPacketChange == null ? void 0 : onPacketChange(packet);
|
|
745
|
+
};
|
|
746
|
+
const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;
|
|
747
|
+
const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;
|
|
748
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
|
|
749
|
+
pagination && /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", color: "text.secondary", children: [
|
|
750
|
+
"Showing ",
|
|
751
|
+
startResult,
|
|
752
|
+
"-",
|
|
753
|
+
endResult,
|
|
754
|
+
" of ",
|
|
755
|
+
pagination.totalResults,
|
|
756
|
+
" results"
|
|
757
|
+
] }) }),
|
|
758
|
+
results.map((result, index) => {
|
|
759
|
+
switch (result.type) {
|
|
760
|
+
case "player":
|
|
761
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
762
|
+
PlayerResultCard_default,
|
|
763
|
+
{
|
|
764
|
+
result,
|
|
765
|
+
onClick: onPlayerClick,
|
|
766
|
+
tags
|
|
767
|
+
},
|
|
768
|
+
result.id
|
|
769
|
+
);
|
|
770
|
+
case "table":
|
|
771
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
772
|
+
TableResultCard_default,
|
|
773
|
+
{
|
|
774
|
+
result,
|
|
775
|
+
onClick: onTableClick,
|
|
776
|
+
tags
|
|
777
|
+
},
|
|
778
|
+
result.id
|
|
779
|
+
);
|
|
780
|
+
case "event":
|
|
781
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
782
|
+
EventResultCard_default,
|
|
783
|
+
{
|
|
784
|
+
result,
|
|
785
|
+
onClick: onEventClick,
|
|
786
|
+
tags
|
|
787
|
+
},
|
|
788
|
+
result.id
|
|
789
|
+
);
|
|
790
|
+
default:
|
|
791
|
+
console.error(`Unknown result type: ${result.type}`);
|
|
792
|
+
return null;
|
|
793
|
+
}
|
|
794
|
+
}),
|
|
795
|
+
pagination && pagination.totalPackets > 1 && /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { display: "flex", justifyContent: "center", mt: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
796
|
+
Pagination__default.default,
|
|
797
|
+
{
|
|
798
|
+
count: pagination.totalPackets,
|
|
799
|
+
page: pagination.currentPacket,
|
|
800
|
+
onChange: handlePacketChange,
|
|
801
|
+
color: "primary"
|
|
802
|
+
}
|
|
803
|
+
) })
|
|
804
|
+
] });
|
|
593
805
|
};
|
|
594
806
|
var ResultsContainer_default = ResultsContainer;
|
|
595
807
|
var ScrollableResultsList = ({
|
|
@@ -600,7 +812,7 @@ var ScrollableResultsList = ({
|
|
|
600
812
|
emptyText
|
|
601
813
|
}) => {
|
|
602
814
|
const hasResults = Array.isArray(results) && results.length > 0;
|
|
603
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
815
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { maxHeight, overflowY: "auto", pr: 1 }, children: hasResults ? /* @__PURE__ */ jsxRuntime.jsx(ResultsContainer_default, { results, onResultClick, tags }) : /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { textAlign: "center", py: 2 }, children: emptyText || "No results to display." }) });
|
|
604
816
|
};
|
|
605
817
|
var ScrollableResultsList_default = ScrollableResultsList;
|
|
606
818
|
var PlayersScrollableList = ({
|
|
@@ -635,17 +847,76 @@ var SearchResultCard_default = SearchResultCard;
|
|
|
635
847
|
function SearchPageLayout({
|
|
636
848
|
results,
|
|
637
849
|
title = "Search Results",
|
|
850
|
+
initialSelectedTypes = [],
|
|
851
|
+
initialSelectedTags = {
|
|
852
|
+
mustHave: [],
|
|
853
|
+
mustNotHave: [],
|
|
854
|
+
shouldHaveAtLeastOne: []
|
|
855
|
+
},
|
|
856
|
+
initialTextSearch = {
|
|
857
|
+
query: "",
|
|
858
|
+
titleOnly: false
|
|
859
|
+
},
|
|
860
|
+
includeExpiredTables: initialIncludeExpiredTables = false,
|
|
638
861
|
onTypeChange,
|
|
639
862
|
onTagChange,
|
|
863
|
+
onTextSearchChange,
|
|
864
|
+
onIncludeExpiredTablesChange,
|
|
640
865
|
onSubmit,
|
|
641
866
|
onResultClick,
|
|
867
|
+
onPacketChange,
|
|
868
|
+
pagination,
|
|
642
869
|
validTags,
|
|
643
|
-
allTags
|
|
870
|
+
allTags,
|
|
871
|
+
searchTypes,
|
|
872
|
+
isLoading = false
|
|
644
873
|
}) {
|
|
645
|
-
"use client";
|
|
646
874
|
const theme = material.useTheme();
|
|
647
875
|
const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
|
|
648
|
-
|
|
876
|
+
const [selectedTypes, setSelectedTypes] = React.useState(initialSelectedTypes);
|
|
877
|
+
const [selectedTags, setSelectedTags] = React.useState(initialSelectedTags);
|
|
878
|
+
const [textSearch, setTextSearch] = React.useState(initialTextSearch);
|
|
879
|
+
const [includeExpiredTables, setIncludeExpiredTables] = React.useState(initialIncludeExpiredTables);
|
|
880
|
+
React.useEffect(() => {
|
|
881
|
+
setSelectedTypes(initialSelectedTypes);
|
|
882
|
+
}, [initialSelectedTypes]);
|
|
883
|
+
React.useEffect(() => {
|
|
884
|
+
setSelectedTags(initialSelectedTags);
|
|
885
|
+
}, [initialSelectedTags]);
|
|
886
|
+
React.useEffect(() => {
|
|
887
|
+
setTextSearch(initialTextSearch);
|
|
888
|
+
}, [initialTextSearch]);
|
|
889
|
+
React.useEffect(() => {
|
|
890
|
+
setIncludeExpiredTables(initialIncludeExpiredTables);
|
|
891
|
+
}, [initialIncludeExpiredTables]);
|
|
892
|
+
const handleTypeChange = (types) => {
|
|
893
|
+
setSelectedTypes(types);
|
|
894
|
+
if (onTypeChange) onTypeChange(types);
|
|
895
|
+
};
|
|
896
|
+
const handleTagChange = (tags) => {
|
|
897
|
+
setSelectedTags(tags);
|
|
898
|
+
if (onTagChange) onTagChange(tags);
|
|
899
|
+
};
|
|
900
|
+
const handleTextSearchChange = (ts) => {
|
|
901
|
+
setTextSearch(ts);
|
|
902
|
+
if (onTextSearchChange) onTextSearchChange(ts);
|
|
903
|
+
};
|
|
904
|
+
const handleIncludeExpiredTablesChange = (include) => {
|
|
905
|
+
setIncludeExpiredTables(include);
|
|
906
|
+
if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
|
|
907
|
+
};
|
|
908
|
+
const handleSubmit = () => {
|
|
909
|
+
const currentCriteria = {
|
|
910
|
+
selectedTypes,
|
|
911
|
+
selectedTags,
|
|
912
|
+
textSearch,
|
|
913
|
+
includeExpiredTables
|
|
914
|
+
};
|
|
915
|
+
if (onSubmit) {
|
|
916
|
+
onSubmit(currentCriteria);
|
|
917
|
+
}
|
|
918
|
+
};
|
|
919
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { padding: 2 }, children: [
|
|
649
920
|
/* @__PURE__ */ jsxRuntime.jsx(Card2__default.default, { sx: { marginBottom: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
650
921
|
CardHeader__default.default,
|
|
651
922
|
{
|
|
@@ -675,10 +946,17 @@ function SearchPageLayout({
|
|
|
675
946
|
/* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
676
947
|
FiltersContainer_default,
|
|
677
948
|
{
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
949
|
+
initialSelectedTypes: selectedTypes,
|
|
950
|
+
initialSelectedTags: selectedTags,
|
|
951
|
+
initialTextSearch: textSearch,
|
|
952
|
+
includeExpiredTables,
|
|
953
|
+
onTypeChange: handleTypeChange,
|
|
954
|
+
onTagChange: handleTagChange,
|
|
955
|
+
onTextSearchChange: handleTextSearchChange,
|
|
956
|
+
onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
|
|
957
|
+
onSubmit: handleSubmit,
|
|
958
|
+
tags: validTags,
|
|
959
|
+
searchTypes
|
|
682
960
|
}
|
|
683
961
|
) })
|
|
684
962
|
] }) }),
|
|
@@ -695,10 +973,12 @@ function SearchPageLayout({
|
|
|
695
973
|
}
|
|
696
974
|
}
|
|
697
975
|
),
|
|
698
|
-
/* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
976
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { display: "flex", justifyContent: "center", py: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(CircularProgress__default.default, { size: 60, thickness: 4 }) }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
699
977
|
ResultsContainer_default,
|
|
700
978
|
{
|
|
701
979
|
results,
|
|
980
|
+
pagination,
|
|
981
|
+
onPacketChange,
|
|
702
982
|
onResultClick,
|
|
703
983
|
tags: allTags
|
|
704
984
|
}
|
|
@@ -711,21 +991,14 @@ var TablesScrollableList = ({
|
|
|
711
991
|
results,
|
|
712
992
|
tags,
|
|
713
993
|
maxHeight,
|
|
714
|
-
onResultClick
|
|
715
|
-
sortBy = "availability"
|
|
994
|
+
onResultClick
|
|
716
995
|
}) => {
|
|
717
996
|
const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
|
|
718
|
-
const getAvailableSlots = (r) => {
|
|
719
|
-
const capacity = typeof r.capacity === "number" ? r.capacity : 0;
|
|
720
|
-
const playersCount = typeof r.numPlayers === "number" ? r.numPlayers : 0;
|
|
721
|
-
return Math.max(capacity - playersCount, 0);
|
|
722
|
-
};
|
|
723
|
-
const sortedTables = sortBy === "availability" ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a)) : tables;
|
|
724
997
|
const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
|
|
725
998
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
726
999
|
ScrollableResultsList_default,
|
|
727
1000
|
{
|
|
728
|
-
results:
|
|
1001
|
+
results: tables,
|
|
729
1002
|
tags,
|
|
730
1003
|
maxHeight,
|
|
731
1004
|
onResultClick: (id, type) => {
|
|
@@ -738,6 +1011,7 @@ var TablesScrollableList_default = TablesScrollableList;
|
|
|
738
1011
|
|
|
739
1012
|
exports.BaseSearchResultCard = BaseSearchResultCard_default;
|
|
740
1013
|
exports.EventResultCard = EventResultCard_default;
|
|
1014
|
+
exports.ExpiredTablesFilter = ExpiredTablesFilter_default;
|
|
741
1015
|
exports.FiltersContainer = FiltersContainer_default;
|
|
742
1016
|
exports.PlayerResultCard = PlayerResultCard_default;
|
|
743
1017
|
exports.PlayersScrollableList = PlayersScrollableList_default;
|
|
@@ -749,6 +1023,7 @@ exports.SortOptions = SortOptions_default;
|
|
|
749
1023
|
exports.TableResultCard = TableResultCard_default;
|
|
750
1024
|
exports.TablesScrollableList = TablesScrollableList_default;
|
|
751
1025
|
exports.TagsFilter = TagsFilter_default;
|
|
1026
|
+
exports.TextSearchCard = TextSearchCard_default;
|
|
752
1027
|
exports.TypeFilter = TypeFilter_default;
|
|
753
1028
|
//# sourceMappingURL=SearchPage.cjs.map
|
|
754
1029
|
//# sourceMappingURL=SearchPage.cjs.map
|