@mbpockets/shared-ui 0.1.20 → 0.2.0
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 +208 -121
- package/dist/EventPage/index.cjs.map +1 -1
- package/dist/EventPage/index.mjs +200 -119
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +208 -121
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.mjs +200 -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 +138 -67
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +126 -63
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +138 -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 +126 -63
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +495 -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 +482 -216
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +495 -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 +482 -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 +446 -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 +434 -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,21 @@ 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
|
-
// Add some padding to prevent clipping of the leftmost tag
|
|
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
|
+
const text = full || "";
|
|
554
|
+
return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
|
|
555
|
+
})() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography6__default.default, { variant: "body1", children: result.description }),
|
|
556
|
+
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
557
|
] })
|
|
435
558
|
] })
|
|
436
559
|
}
|
|
@@ -485,21 +608,60 @@ var PlayerResultCard = ({
|
|
|
485
608
|
return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
|
|
486
609
|
};
|
|
487
610
|
var PlayerResultCard_default = PlayerResultCard;
|
|
488
|
-
var TableResultCard = ({
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
611
|
+
var TableResultCard = ({
|
|
612
|
+
result,
|
|
613
|
+
onClick,
|
|
614
|
+
tags
|
|
615
|
+
}) => {
|
|
616
|
+
const rawCapacity = result.capacity;
|
|
617
|
+
const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
|
|
618
|
+
const capacity = hasDefinedCapacity ? rawCapacity : 0;
|
|
619
|
+
const activePlayers = typeof result.numPlayers === "number" ? result.numPlayers : 0;
|
|
620
|
+
const availableSlots = Math.max(capacity - activePlayers, 0);
|
|
621
|
+
const hasDM = typeof result.hasDM === "boolean" ? result.hasDM : Boolean(result.dungeonMaster);
|
|
622
|
+
const occupancyPercentage = hasDefinedCapacity ? activePlayers / capacity * 100 : 100;
|
|
623
|
+
const tableIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
624
|
+
TableRestaurantIcon__default.default,
|
|
625
|
+
{
|
|
626
|
+
sx: {
|
|
627
|
+
fontSize: 40,
|
|
628
|
+
color: "primary.main"
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
);
|
|
632
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { mb: 2 }, children: [
|
|
633
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
|
|
634
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", children: [
|
|
635
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
|
|
636
|
+
" ",
|
|
637
|
+
hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
|
|
499
638
|
] }),
|
|
500
|
-
|
|
639
|
+
typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
640
|
+
Chip2__default.default,
|
|
641
|
+
{
|
|
642
|
+
icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
|
|
643
|
+
label: hasDM ? "DM Present" : "No DM",
|
|
644
|
+
color: hasDM ? "success" : "warning",
|
|
645
|
+
size: "small"
|
|
646
|
+
}
|
|
647
|
+
)
|
|
501
648
|
] }),
|
|
502
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
649
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
650
|
+
LinearProgress__default.default,
|
|
651
|
+
{
|
|
652
|
+
variant: "determinate",
|
|
653
|
+
value: occupancyPercentage,
|
|
654
|
+
sx: {
|
|
655
|
+
height: 10,
|
|
656
|
+
borderRadius: 5,
|
|
657
|
+
backgroundColor: "#e0e0e0",
|
|
658
|
+
"& .MuiLinearProgress-bar": {
|
|
659
|
+
backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
),
|
|
664
|
+
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
665
|
] }) });
|
|
504
666
|
};
|
|
505
667
|
var TableResultCard_default = TableResultCard;
|
|
@@ -518,20 +680,42 @@ var EventResultCard = ({
|
|
|
518
680
|
try {
|
|
519
681
|
const date = new Date(dateString);
|
|
520
682
|
return date.toLocaleDateString("en-US", options);
|
|
521
|
-
} catch {
|
|
683
|
+
} catch (error) {
|
|
522
684
|
return dateString;
|
|
523
685
|
}
|
|
524
686
|
};
|
|
525
687
|
const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
|
|
526
688
|
const location = result.location || "Location TBD";
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
689
|
+
const eventIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
690
|
+
EventIcon__default.default,
|
|
691
|
+
{
|
|
692
|
+
sx: {
|
|
693
|
+
fontSize: 40,
|
|
694
|
+
color: "primary.main"
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
);
|
|
698
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: eventIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { mb: 2 }, children: [
|
|
699
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
|
|
700
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
|
|
701
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", children: [
|
|
702
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Date:" }),
|
|
703
|
+
" ",
|
|
704
|
+
formattedDate
|
|
705
|
+
] })
|
|
531
706
|
] }),
|
|
532
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
533
|
-
/* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1,
|
|
534
|
-
/* @__PURE__ */ jsxRuntime.
|
|
707
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", alignItems: "center" }, children: [
|
|
708
|
+
/* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
|
|
709
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", children: [
|
|
710
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Location:" }),
|
|
711
|
+
" ",
|
|
712
|
+
location
|
|
713
|
+
] })
|
|
714
|
+
] }),
|
|
715
|
+
result.organizer && /* @__PURE__ */ jsxRuntime.jsxs(Typography6__default.default, { variant: "body2", sx: { mt: 1 }, children: [
|
|
716
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Organizer:" }),
|
|
717
|
+
" ",
|
|
718
|
+
result.organizer
|
|
535
719
|
] })
|
|
536
720
|
] }) });
|
|
537
721
|
};
|
|
@@ -539,10 +723,12 @@ var EventResultCard_default = EventResultCard;
|
|
|
539
723
|
var ResultsContainer = ({
|
|
540
724
|
results,
|
|
541
725
|
onResultClick,
|
|
542
|
-
tags
|
|
726
|
+
tags,
|
|
727
|
+
pagination,
|
|
728
|
+
onPacketChange
|
|
543
729
|
}) => {
|
|
544
|
-
if (results.length === 0 || !results.map) {
|
|
545
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
730
|
+
if (!results || results.length === 0 || !results.map) {
|
|
731
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
|
|
546
732
|
}
|
|
547
733
|
const onPlayerClick = (id) => {
|
|
548
734
|
onResultClick == null ? void 0 : onResultClick(id, "player");
|
|
@@ -553,43 +739,68 @@ var ResultsContainer = ({
|
|
|
553
739
|
const onEventClick = (id) => {
|
|
554
740
|
onResultClick == null ? void 0 : onResultClick(id, "event");
|
|
555
741
|
};
|
|
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
|
-
|
|
742
|
+
const handlePacketChange = (_event, packet) => {
|
|
743
|
+
onPacketChange == null ? void 0 : onPacketChange(packet);
|
|
744
|
+
};
|
|
745
|
+
const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;
|
|
746
|
+
const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;
|
|
747
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
|
|
748
|
+
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: [
|
|
749
|
+
"Showing ",
|
|
750
|
+
startResult,
|
|
751
|
+
"-",
|
|
752
|
+
endResult,
|
|
753
|
+
" of ",
|
|
754
|
+
pagination.totalResults,
|
|
755
|
+
" results"
|
|
756
|
+
] }) }),
|
|
757
|
+
results.map((result) => {
|
|
758
|
+
switch (result.type) {
|
|
759
|
+
case "player":
|
|
760
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
761
|
+
PlayerResultCard_default,
|
|
762
|
+
{
|
|
763
|
+
result,
|
|
764
|
+
onClick: onPlayerClick,
|
|
765
|
+
tags
|
|
766
|
+
},
|
|
767
|
+
result.id
|
|
768
|
+
);
|
|
769
|
+
case "table":
|
|
770
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
771
|
+
TableResultCard_default,
|
|
772
|
+
{
|
|
773
|
+
result,
|
|
774
|
+
onClick: onTableClick,
|
|
775
|
+
tags
|
|
776
|
+
},
|
|
777
|
+
result.id
|
|
778
|
+
);
|
|
779
|
+
case "event":
|
|
780
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
781
|
+
EventResultCard_default,
|
|
782
|
+
{
|
|
783
|
+
result,
|
|
784
|
+
onClick: onEventClick,
|
|
785
|
+
tags
|
|
786
|
+
},
|
|
787
|
+
result.id
|
|
788
|
+
);
|
|
789
|
+
default:
|
|
790
|
+
console.error(`Unknown result type: ${result.type}`);
|
|
791
|
+
return null;
|
|
792
|
+
}
|
|
793
|
+
}),
|
|
794
|
+
pagination && pagination.totalPackets > 1 && /* @__PURE__ */ jsxRuntime.jsx(Box8__default.default, { sx: { display: "flex", justifyContent: "center", mt: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
795
|
+
Pagination__default.default,
|
|
796
|
+
{
|
|
797
|
+
count: pagination.totalPackets,
|
|
798
|
+
page: pagination.currentPacket,
|
|
799
|
+
onChange: handlePacketChange,
|
|
800
|
+
color: "primary"
|
|
801
|
+
}
|
|
802
|
+
) })
|
|
803
|
+
] });
|
|
593
804
|
};
|
|
594
805
|
var ResultsContainer_default = ResultsContainer;
|
|
595
806
|
var ScrollableResultsList = ({
|
|
@@ -600,7 +811,7 @@ var ScrollableResultsList = ({
|
|
|
600
811
|
emptyText
|
|
601
812
|
}) => {
|
|
602
813
|
const hasResults = Array.isArray(results) && results.length > 0;
|
|
603
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
814
|
+
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
815
|
};
|
|
605
816
|
var ScrollableResultsList_default = ScrollableResultsList;
|
|
606
817
|
var PlayersScrollableList = ({
|
|
@@ -635,17 +846,76 @@ var SearchResultCard_default = SearchResultCard;
|
|
|
635
846
|
function SearchPageLayout({
|
|
636
847
|
results,
|
|
637
848
|
title = "Search Results",
|
|
849
|
+
initialSelectedTypes = [],
|
|
850
|
+
initialSelectedTags = {
|
|
851
|
+
mustHave: [],
|
|
852
|
+
mustNotHave: [],
|
|
853
|
+
shouldHaveAtLeastOne: []
|
|
854
|
+
},
|
|
855
|
+
initialTextSearch = {
|
|
856
|
+
query: "",
|
|
857
|
+
titleOnly: false
|
|
858
|
+
},
|
|
859
|
+
includeExpiredTables: initialIncludeExpiredTables = false,
|
|
638
860
|
onTypeChange,
|
|
639
861
|
onTagChange,
|
|
862
|
+
onTextSearchChange,
|
|
863
|
+
onIncludeExpiredTablesChange,
|
|
640
864
|
onSubmit,
|
|
641
865
|
onResultClick,
|
|
866
|
+
onPacketChange,
|
|
867
|
+
pagination,
|
|
642
868
|
validTags,
|
|
643
|
-
allTags
|
|
869
|
+
allTags,
|
|
870
|
+
searchTypes,
|
|
871
|
+
isLoading = false
|
|
644
872
|
}) {
|
|
645
|
-
"use client";
|
|
646
873
|
const theme = material.useTheme();
|
|
647
874
|
const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
|
|
648
|
-
|
|
875
|
+
const [selectedTypes, setSelectedTypes] = React.useState(initialSelectedTypes);
|
|
876
|
+
const [selectedTags, setSelectedTags] = React.useState(initialSelectedTags);
|
|
877
|
+
const [textSearch, setTextSearch] = React.useState(initialTextSearch);
|
|
878
|
+
const [includeExpiredTables, setIncludeExpiredTables] = React.useState(initialIncludeExpiredTables);
|
|
879
|
+
React.useEffect(() => {
|
|
880
|
+
setSelectedTypes(initialSelectedTypes);
|
|
881
|
+
}, [initialSelectedTypes]);
|
|
882
|
+
React.useEffect(() => {
|
|
883
|
+
setSelectedTags(initialSelectedTags);
|
|
884
|
+
}, [initialSelectedTags]);
|
|
885
|
+
React.useEffect(() => {
|
|
886
|
+
setTextSearch(initialTextSearch);
|
|
887
|
+
}, [initialTextSearch]);
|
|
888
|
+
React.useEffect(() => {
|
|
889
|
+
setIncludeExpiredTables(initialIncludeExpiredTables);
|
|
890
|
+
}, [initialIncludeExpiredTables]);
|
|
891
|
+
const handleTypeChange = (types) => {
|
|
892
|
+
setSelectedTypes(types);
|
|
893
|
+
if (onTypeChange) onTypeChange(types);
|
|
894
|
+
};
|
|
895
|
+
const handleTagChange = (tags) => {
|
|
896
|
+
setSelectedTags(tags);
|
|
897
|
+
if (onTagChange) onTagChange(tags);
|
|
898
|
+
};
|
|
899
|
+
const handleTextSearchChange = (ts) => {
|
|
900
|
+
setTextSearch(ts);
|
|
901
|
+
if (onTextSearchChange) onTextSearchChange(ts);
|
|
902
|
+
};
|
|
903
|
+
const handleIncludeExpiredTablesChange = (include) => {
|
|
904
|
+
setIncludeExpiredTables(include);
|
|
905
|
+
if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
|
|
906
|
+
};
|
|
907
|
+
const handleSubmit = () => {
|
|
908
|
+
const currentCriteria = {
|
|
909
|
+
selectedTypes,
|
|
910
|
+
selectedTags,
|
|
911
|
+
textSearch,
|
|
912
|
+
includeExpiredTables
|
|
913
|
+
};
|
|
914
|
+
if (onSubmit) {
|
|
915
|
+
onSubmit(currentCriteria);
|
|
916
|
+
}
|
|
917
|
+
};
|
|
918
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box8__default.default, { sx: { padding: 2 }, children: [
|
|
649
919
|
/* @__PURE__ */ jsxRuntime.jsx(Card2__default.default, { sx: { marginBottom: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
650
920
|
CardHeader__default.default,
|
|
651
921
|
{
|
|
@@ -675,10 +945,17 @@ function SearchPageLayout({
|
|
|
675
945
|
/* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
676
946
|
FiltersContainer_default,
|
|
677
947
|
{
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
948
|
+
initialSelectedTypes: selectedTypes,
|
|
949
|
+
initialSelectedTags: selectedTags,
|
|
950
|
+
initialTextSearch: textSearch,
|
|
951
|
+
includeExpiredTables,
|
|
952
|
+
onTypeChange: handleTypeChange,
|
|
953
|
+
onTagChange: handleTagChange,
|
|
954
|
+
onTextSearchChange: handleTextSearchChange,
|
|
955
|
+
onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
|
|
956
|
+
onSubmit: handleSubmit,
|
|
957
|
+
tags: validTags,
|
|
958
|
+
searchTypes
|
|
682
959
|
}
|
|
683
960
|
) })
|
|
684
961
|
] }) }),
|
|
@@ -695,10 +972,12 @@ function SearchPageLayout({
|
|
|
695
972
|
}
|
|
696
973
|
}
|
|
697
974
|
),
|
|
698
|
-
/* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
975
|
+
/* @__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
976
|
ResultsContainer_default,
|
|
700
977
|
{
|
|
701
978
|
results,
|
|
979
|
+
pagination,
|
|
980
|
+
onPacketChange,
|
|
702
981
|
onResultClick,
|
|
703
982
|
tags: allTags
|
|
704
983
|
}
|
|
@@ -711,21 +990,14 @@ var TablesScrollableList = ({
|
|
|
711
990
|
results,
|
|
712
991
|
tags,
|
|
713
992
|
maxHeight,
|
|
714
|
-
onResultClick
|
|
715
|
-
sortBy = "availability"
|
|
993
|
+
onResultClick
|
|
716
994
|
}) => {
|
|
717
995
|
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
996
|
const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
|
|
725
997
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
726
998
|
ScrollableResultsList_default,
|
|
727
999
|
{
|
|
728
|
-
results:
|
|
1000
|
+
results: tables,
|
|
729
1001
|
tags,
|
|
730
1002
|
maxHeight,
|
|
731
1003
|
onResultClick: (id, type) => {
|
|
@@ -738,6 +1010,7 @@ var TablesScrollableList_default = TablesScrollableList;
|
|
|
738
1010
|
|
|
739
1011
|
exports.BaseSearchResultCard = BaseSearchResultCard_default;
|
|
740
1012
|
exports.EventResultCard = EventResultCard_default;
|
|
1013
|
+
exports.ExpiredTablesFilter = ExpiredTablesFilter_default;
|
|
741
1014
|
exports.FiltersContainer = FiltersContainer_default;
|
|
742
1015
|
exports.PlayerResultCard = PlayerResultCard_default;
|
|
743
1016
|
exports.PlayersScrollableList = PlayersScrollableList_default;
|
|
@@ -749,6 +1022,7 @@ exports.SortOptions = SortOptions_default;
|
|
|
749
1022
|
exports.TableResultCard = TableResultCard_default;
|
|
750
1023
|
exports.TablesScrollableList = TablesScrollableList_default;
|
|
751
1024
|
exports.TagsFilter = TagsFilter_default;
|
|
1025
|
+
exports.TextSearchCard = TextSearchCard_default;
|
|
752
1026
|
exports.TypeFilter = TypeFilter_default;
|
|
753
1027
|
//# sourceMappingURL=SearchPage.cjs.map
|
|
754
1028
|
//# sourceMappingURL=SearchPage.cjs.map
|