@mbpockets/shared-ui 0.1.18
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/LICENSE +681 -0
- package/README.md +85 -0
- package/dist/EventPage/editMode/index.cjs +573 -0
- package/dist/EventPage/editMode/index.cjs.map +1 -0
- package/dist/EventPage/editMode/index.d.cts +5 -0
- package/dist/EventPage/editMode/index.d.ts +5 -0
- package/dist/EventPage/editMode/index.mjs +559 -0
- package/dist/EventPage/editMode/index.mjs.map +1 -0
- package/dist/EventPage/editMode.cjs +573 -0
- package/dist/EventPage/editMode.cjs.map +1 -0
- package/dist/EventPage/editMode.d.cts +5 -0
- package/dist/EventPage/editMode.d.ts +5 -0
- package/dist/EventPage/editMode.mjs +559 -0
- package/dist/EventPage/editMode.mjs.map +1 -0
- package/dist/EventPage/index.cjs +1245 -0
- package/dist/EventPage/index.cjs.map +1 -0
- package/dist/EventPage/index.d.cts +6 -0
- package/dist/EventPage/index.d.ts +6 -0
- package/dist/EventPage/index.mjs +1215 -0
- package/dist/EventPage/index.mjs.map +1 -0
- package/dist/EventPage.cjs +1245 -0
- package/dist/EventPage.cjs.map +1 -0
- package/dist/EventPage.d.cts +42 -0
- package/dist/EventPage.d.ts +42 -0
- package/dist/EventPage.mjs +1215 -0
- package/dist/EventPage.mjs.map +1 -0
- package/dist/PlayerPage/index.cjs +370 -0
- package/dist/PlayerPage/index.cjs.map +1 -0
- package/dist/PlayerPage/index.d.cts +4 -0
- package/dist/PlayerPage/index.d.ts +4 -0
- package/dist/PlayerPage/index.mjs +358 -0
- package/dist/PlayerPage/index.mjs.map +1 -0
- package/dist/PlayerPage.cjs +370 -0
- package/dist/PlayerPage.cjs.map +1 -0
- package/dist/PlayerPage.d.cts +32 -0
- package/dist/PlayerPage.d.ts +32 -0
- package/dist/PlayerPage.mjs +358 -0
- package/dist/PlayerPage.mjs.map +1 -0
- package/dist/ProfilePage/index.cjs +136 -0
- package/dist/ProfilePage/index.cjs.map +1 -0
- package/dist/ProfilePage/index.d.cts +3 -0
- package/dist/ProfilePage/index.d.ts +3 -0
- package/dist/ProfilePage/index.mjs +124 -0
- package/dist/ProfilePage/index.mjs.map +1 -0
- package/dist/ProfilePage.cjs +136 -0
- package/dist/ProfilePage.cjs.map +1 -0
- package/dist/ProfilePage.d.cts +10 -0
- package/dist/ProfilePage.d.ts +10 -0
- package/dist/ProfilePage.mjs +124 -0
- package/dist/ProfilePage.mjs.map +1 -0
- package/dist/SearchPage/Filters/index.cjs +270 -0
- package/dist/SearchPage/Filters/index.cjs.map +1 -0
- package/dist/SearchPage/Filters/index.d.cts +4 -0
- package/dist/SearchPage/Filters/index.d.ts +4 -0
- package/dist/SearchPage/Filters/index.mjs +250 -0
- package/dist/SearchPage/Filters/index.mjs.map +1 -0
- package/dist/SearchPage/Filters.cjs +270 -0
- package/dist/SearchPage/Filters.cjs.map +1 -0
- package/dist/SearchPage/Filters.d.cts +31 -0
- package/dist/SearchPage/Filters.d.ts +31 -0
- package/dist/SearchPage/Filters.mjs +250 -0
- package/dist/SearchPage/Filters.mjs.map +1 -0
- package/dist/SearchPage/Results/index.cjs +226 -0
- package/dist/SearchPage/Results/index.cjs.map +1 -0
- package/dist/SearchPage/Results/index.d.cts +4 -0
- package/dist/SearchPage/Results/index.d.ts +4 -0
- package/dist/SearchPage/Results/index.mjs +212 -0
- package/dist/SearchPage/Results/index.mjs.map +1 -0
- package/dist/SearchPage/Results.cjs +226 -0
- package/dist/SearchPage/Results.cjs.map +1 -0
- package/dist/SearchPage/Results.d.cts +53 -0
- package/dist/SearchPage/Results.d.ts +53 -0
- package/dist/SearchPage/Results.mjs +212 -0
- package/dist/SearchPage/Results.mjs.map +1 -0
- package/dist/SearchPage/index.cjs +737 -0
- package/dist/SearchPage/index.cjs.map +1 -0
- package/dist/SearchPage/index.d.cts +7 -0
- package/dist/SearchPage/index.d.ts +7 -0
- package/dist/SearchPage/index.mjs +695 -0
- package/dist/SearchPage/index.mjs.map +1 -0
- package/dist/SearchPage.cjs +737 -0
- package/dist/SearchPage.cjs.map +1 -0
- package/dist/SearchPage.d.cts +110 -0
- package/dist/SearchPage.d.ts +110 -0
- package/dist/SearchPage.mjs +695 -0
- package/dist/SearchPage.mjs.map +1 -0
- package/dist/TablePage/GameTableProvider/index.cjs +26 -0
- package/dist/TablePage/GameTableProvider/index.cjs.map +1 -0
- package/dist/TablePage/GameTableProvider/index.d.cts +4 -0
- package/dist/TablePage/GameTableProvider/index.d.ts +4 -0
- package/dist/TablePage/GameTableProvider/index.mjs +19 -0
- package/dist/TablePage/GameTableProvider/index.mjs.map +1 -0
- package/dist/TablePage/GameTableProvider.cjs +26 -0
- package/dist/TablePage/GameTableProvider.cjs.map +1 -0
- package/dist/TablePage/GameTableProvider.d.cts +15 -0
- package/dist/TablePage/GameTableProvider.d.ts +15 -0
- package/dist/TablePage/GameTableProvider.mjs +19 -0
- package/dist/TablePage/GameTableProvider.mjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.cjs +83 -0
- package/dist/TablePage/ModalProvider/index.cjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.css +49 -0
- package/dist/TablePage/ModalProvider/index.css.map +1 -0
- package/dist/TablePage/ModalProvider/index.d.cts +3 -0
- package/dist/TablePage/ModalProvider/index.d.ts +3 -0
- package/dist/TablePage/ModalProvider/index.mjs +79 -0
- package/dist/TablePage/ModalProvider/index.mjs.map +1 -0
- package/dist/TablePage/ModalProvider.cjs +83 -0
- package/dist/TablePage/ModalProvider.cjs.map +1 -0
- package/dist/TablePage/ModalProvider.css +49 -0
- package/dist/TablePage/ModalProvider.css.map +1 -0
- package/dist/TablePage/ModalProvider.d.cts +17 -0
- package/dist/TablePage/ModalProvider.d.ts +17 -0
- package/dist/TablePage/ModalProvider.mjs +79 -0
- package/dist/TablePage/ModalProvider.mjs.map +1 -0
- package/dist/TablePage/index.cjs +606 -0
- package/dist/TablePage/index.cjs.map +1 -0
- package/dist/TablePage/index.css +49 -0
- package/dist/TablePage/index.css.map +1 -0
- package/dist/TablePage/index.d.cts +10 -0
- package/dist/TablePage/index.d.ts +10 -0
- package/dist/TablePage/index.mjs +579 -0
- package/dist/TablePage/index.mjs.map +1 -0
- package/dist/TablePage/players/index.cjs +85 -0
- package/dist/TablePage/players/index.cjs.map +1 -0
- package/dist/TablePage/players/index.d.cts +4 -0
- package/dist/TablePage/players/index.d.ts +4 -0
- package/dist/TablePage/players/index.mjs +76 -0
- package/dist/TablePage/players/index.mjs.map +1 -0
- package/dist/TablePage/players.cjs +85 -0
- package/dist/TablePage/players.cjs.map +1 -0
- package/dist/TablePage/players.d.cts +22 -0
- package/dist/TablePage/players.d.ts +22 -0
- package/dist/TablePage/players.mjs +76 -0
- package/dist/TablePage/players.mjs.map +1 -0
- package/dist/TablePage.cjs +606 -0
- package/dist/TablePage.cjs.map +1 -0
- package/dist/TablePage.css +49 -0
- package/dist/TablePage.css.map +1 -0
- package/dist/TablePage.d.cts +54 -0
- package/dist/TablePage.d.ts +54 -0
- package/dist/TablePage.mjs +579 -0
- package/dist/TablePage.mjs.map +1 -0
- package/dist/common/Modal/index.cjs +64 -0
- package/dist/common/Modal/index.cjs.map +1 -0
- package/dist/common/Modal/index.css +49 -0
- package/dist/common/Modal/index.css.map +1 -0
- package/dist/common/Modal/index.d.cts +2 -0
- package/dist/common/Modal/index.d.ts +2 -0
- package/dist/common/Modal/index.mjs +62 -0
- package/dist/common/Modal/index.mjs.map +1 -0
- package/dist/common/Modal.cjs +64 -0
- package/dist/common/Modal.cjs.map +1 -0
- package/dist/common/Modal.css +49 -0
- package/dist/common/Modal.css.map +1 -0
- package/dist/common/Modal.d.cts +9 -0
- package/dist/common/Modal.d.ts +9 -0
- package/dist/common/Modal.mjs +62 -0
- package/dist/common/Modal.mjs.map +1 -0
- package/dist/common/index.cjs +210 -0
- package/dist/common/index.cjs.map +1 -0
- package/dist/common/index.css +49 -0
- package/dist/common/index.css.map +1 -0
- package/dist/common/index.d.cts +4 -0
- package/dist/common/index.d.ts +4 -0
- package/dist/common/index.mjs +194 -0
- package/dist/common/index.mjs.map +1 -0
- package/dist/common.cjs +210 -0
- package/dist/common.cjs.map +1 -0
- package/dist/common.css +49 -0
- package/dist/common.css.map +1 -0
- package/dist/common.d.cts +28 -0
- package/dist/common.d.ts +28 -0
- package/dist/common.mjs +194 -0
- package/dist/common.mjs.map +1 -0
- package/dist/index-D7WHhl3Q.d.ts +64 -0
- package/dist/index-DC0kK3aC.d.cts +64 -0
- package/dist/index.cjs +2608 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +49 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +20 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.mjs +2529 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mocks/EventDB.cjs +171 -0
- package/dist/mocks/EventDB.cjs.map +1 -0
- package/dist/mocks/EventDB.d.cts +6 -0
- package/dist/mocks/EventDB.d.ts +6 -0
- package/dist/mocks/EventDB.mjs +169 -0
- package/dist/mocks/EventDB.mjs.map +1 -0
- package/dist/mocks/Events.cjs +59 -0
- package/dist/mocks/Events.cjs.map +1 -0
- package/dist/mocks/Events.d.cts +13 -0
- package/dist/mocks/Events.d.ts +13 -0
- package/dist/mocks/Events.mjs +57 -0
- package/dist/mocks/Events.mjs.map +1 -0
- package/dist/mocks/Players.cjs +75 -0
- package/dist/mocks/Players.cjs.map +1 -0
- package/dist/mocks/Players.d.cts +15 -0
- package/dist/mocks/Players.d.ts +15 -0
- package/dist/mocks/Players.mjs +73 -0
- package/dist/mocks/Players.mjs.map +1 -0
- package/dist/mocks/SearchResults.cjs +143 -0
- package/dist/mocks/SearchResults.cjs.map +1 -0
- package/dist/mocks/SearchResults.d.cts +30 -0
- package/dist/mocks/SearchResults.d.ts +30 -0
- package/dist/mocks/SearchResults.mjs +137 -0
- package/dist/mocks/SearchResults.mjs.map +1 -0
- package/dist/mocks/Tables.cjs +133 -0
- package/dist/mocks/Tables.cjs.map +1 -0
- package/dist/mocks/Tables.d.cts +38 -0
- package/dist/mocks/Tables.d.ts +38 -0
- package/dist/mocks/Tables.mjs +131 -0
- package/dist/mocks/Tables.mjs.map +1 -0
- package/dist/mocks/Tags.cjs +142 -0
- package/dist/mocks/Tags.cjs.map +1 -0
- package/dist/mocks/Tags.d.cts +5 -0
- package/dist/mocks/Tags.d.ts +5 -0
- package/dist/mocks/Tags.mjs +140 -0
- package/dist/mocks/Tags.mjs.map +1 -0
- package/dist/mocks/index.cjs +566 -0
- package/dist/mocks/index.cjs.map +1 -0
- package/dist/mocks/index.d.cts +8 -0
- package/dist/mocks/index.d.ts +8 -0
- package/dist/mocks/index.mjs +555 -0
- package/dist/mocks/index.mjs.map +1 -0
- package/dist/mocks.cjs +566 -0
- package/dist/mocks.cjs.map +1 -0
- package/dist/mocks.d.cts +8 -0
- package/dist/mocks.d.ts +8 -0
- package/dist/mocks.mjs +555 -0
- package/dist/mocks.mjs.map +1 -0
- package/dist/types/event.cjs +4 -0
- package/dist/types/event.cjs.map +1 -0
- package/dist/types/event.d.cts +37 -0
- package/dist/types/event.d.ts +37 -0
- package/dist/types/event.mjs +3 -0
- package/dist/types/event.mjs.map +1 -0
- package/dist/types/index.cjs +4 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +6 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.mjs +3 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/player.cjs +4 -0
- package/dist/types/player.cjs.map +1 -0
- package/dist/types/player.d.cts +20 -0
- package/dist/types/player.d.ts +20 -0
- package/dist/types/player.mjs +3 -0
- package/dist/types/player.mjs.map +1 -0
- package/dist/types/search.cjs +4 -0
- package/dist/types/search.cjs.map +1 -0
- package/dist/types/search.d.cts +20 -0
- package/dist/types/search.d.ts +20 -0
- package/dist/types/search.mjs +3 -0
- package/dist/types/search.mjs.map +1 -0
- package/dist/types/table.cjs +4 -0
- package/dist/types/table.cjs.map +1 -0
- package/dist/types/table.d.cts +21 -0
- package/dist/types/table.d.ts +21 -0
- package/dist/types/table.mjs +3 -0
- package/dist/types/table.mjs.map +1 -0
- package/dist/types/tables.cjs +4 -0
- package/dist/types/tables.cjs.map +1 -0
- package/dist/types/tables.d.cts +21 -0
- package/dist/types/tables.d.ts +21 -0
- package/dist/types/tables.mjs +3 -0
- package/dist/types/tables.mjs.map +1 -0
- package/dist/types/tag.cjs +4 -0
- package/dist/types/tag.cjs.map +1 -0
- package/dist/types/tag.d.cts +14 -0
- package/dist/types/tag.d.ts +14 -0
- package/dist/types/tag.mjs +3 -0
- package/dist/types/tag.mjs.map +1 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +6 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx","../../src/components/SearchPage/FiltersContainer.tsx","../../src/components/shared/TagComponents.tsx","../../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../../src/components/SearchPage/Results/PlayerResultCard.tsx","../../src/components/SearchPage/Results/TableResultCard.tsx","../../src/components/SearchPage/Results/EventResultCard.tsx","../../src/components/SearchPage/ResultsContainer.tsx","../../src/components/SearchPage/ScrollableResultsList.tsx","../../src/components/SearchPage/PlayersScrollableList.tsx","../../src/components/SearchPage/Results/SearchResultCard.tsx","../../src/components/SearchPage/SearchPageLayout.tsx","../../src/components/SearchPage/TablesScrollableList.tsx"],"names":["jsxs","Fragment","jsx","Typography","FormControl","RadioGroup","FormControlLabel","Radio","React","Box","Autocomplete","TextField","Divider","Popper","FormGroup","Checkbox","Button","SearchIcon","Card","CardContent","Avatar","CasinoIcon","Chip","LinearProgress","EventIcon","CalendarTodayIcon","LocationOnIcon","useTheme","useMediaQuery","CardHeader","Grid"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","\"use client\"\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport Popper, { PopperProps } from '@mui/material/Popper';\nimport {Tag} from '@/types/tag';\nimport Divider from '@mui/material/Divider';\n\ninterface TagsFilterProps {\n onChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n tags: Tag[];\n}\n\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\n\n/**\n * Component for filtering search results by tags\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\n */\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \n onChange, tags: Tags = []\n}) => {\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>([]);\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>([]);\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>([]);\n Tags = !!Tags ? Tags : [];\n \n const [inputValues, setInputValues] = React.useState({\n mustHave: '',\n mustNotHave: '',\n shouldHaveAtLeastOne: ''\n });\n\n // Convert tags to format needed for Autocomplete\n const tagOptions = React.useMemo(() => {\n console.log(\"available tags: \" + JSON.stringify(Tags))\n console.log(!Tags)\n if (!Tags || Tags.length == 0 || !Tags.map) return [];\n return Tags.map(tag => ({\n value: tag.id,\n label: tag.label\n }));\n }, [Tags]);\n\n const handleTagChange = (tagId: number, category: TagCategory) => {\n let newTags: number[] = [];\n \n switch (category) {\n case 'mustHave':\n newTags = mustHaveTags.includes(tagId)\n ? mustHaveTags.filter(id => id !== tagId)\n : [...mustHaveTags, tagId];\n setMustHaveTags(newTags);\n break;\n case 'mustNotHave':\n newTags = mustNotHaveTags.includes(tagId)\n ? mustNotHaveTags.filter(id => id !== tagId)\n : [...mustNotHaveTags, tagId];\n setMustNotHaveTags(newTags);\n break;\n case 'shouldHaveAtLeastOne':\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\n : [...shouldHaveAtLeastOneTags, tagId];\n setShouldHaveAtLeastOneTags(newTags);\n break;\n }\n \n if (onChange) {\n onChange({\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\n });\n }\n };\n\n // Render selected tags as labels with remove buttons\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\n const tagValues: Tag[] = [];\n\n if (!Tags || Tags.length == 0 || !Tags.map) return null;\n Tags.forEach((tag) => {\n if (selectedTags.includes(tag.id)) {\n tagValues.push(tag);\n }\n });\n\n if (tagValues.length === 0) {\n return null;\n }\n\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\n {tagValues.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n background: tag.color || '#bfbcbb',\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\"\n }}\n >\n {tag.label}\n <button \n type=\"button\" \n onClick={() => handleTagChange(tag.id, category)}\n className=\"ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined\"\n >\n ×\n </button>\n </span>\n ))}\n </Box>\n );\n };\n\n // Helper function to create an Autocomplete component for a specific category\n const createTagSelector = (category: TagCategory, label: string) => {\n const selectedTags = \n category === 'mustHave' \n ? mustHaveTags \n : category === 'mustNotHave' \n ? mustNotHaveTags \n : shouldHaveAtLeastOneTags;\n \n return (\n <>\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\n {label}\n </Typography>\n \n {renderSelectedTags(selectedTags, category)}\n \n <Autocomplete\n key={`${category}-${selectedTags.join('-')}`}\n options={tagOptions}\n filterOptions={(options, state) => {\n // Determine which tags to exclude based on the current category\n const tagsToExclude = new Set<number>();\n \n // Always exclude tags already selected in the current category\n selectedTags.forEach(id => tagsToExclude.add(id));\n \n // Exclude tags selected in other categories\n if (category !== 'mustHave') {\n mustHaveTags.forEach(id => tagsToExclude.add(id));\n }\n if (category !== 'mustNotHave') {\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\n }\n if (category !== 'shouldHaveAtLeastOne') {\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\n }\n \n return options\n .filter(\n (option) =>\n // Exclude options already selected in any category\n !tagsToExclude.has(option.value) &&\n // Filter based on user input\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3); // Show up to 3 results\n }}\n value={null} // Clearing the selected value immediately\n inputValue={inputValues[category]} // Bind the input value to state\n onInputChange={(event, newInputValue) => {\n // Check if this is clearing after selection\n if (event && event.type === 'change') {\n setInputValues({\n ...inputValues,\n [category]: newInputValue\n });\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n handleTagChange(newValue.value, category); // Update selected tags\n }\n // Clear the text box after selection\n setInputValues({\n ...inputValues,\n [category]: ''\n });\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\n />\n </>\n );\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Tags\n </Typography>\n \n {createTagSelector('mustHave', 'Must Have Tags')}\n \n <Divider sx={{ my: 2 }} />\n \n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\n \n <Divider sx={{ my: 2 }} />\n \n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\n </>\n );\n};\n\n// Custom popper for dropdown placement\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\n },\n },\n {\n name: \"offset\",\n options: {\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\n },\n },\n ]}\n placement=\"top-start\" // Position the dropdown above the input field\n />\n );\n};\n\nexport default TagsFilter;","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport type { SearchResultType } from '@/types/search';\n\ninterface TypeFilterProps {\n onChange?: (selectedTypes: SearchResultType[]) => void;\n}\n\nconst FILTER_TYPES: Array<{ id: SearchResultType; label: string; disabled?: boolean }> = [\n { id: 'player', label: 'Players' },\n { id: 'event', label: 'Events', disabled: true },\n { id: 'table', label: 'Tables', disabled: true },\n];\n\nconst TypeFilter: React.FC<TypeFilterProps> = ({ onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<SearchResultType[]>([]);\n\n const handleTypeChange = (typeId: SearchResultType) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter((id) => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n onChange?.(newSelectedTypes);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {FILTER_TYPES.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox\n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n disabled={type.disabled}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Button from '@mui/material/Button';\nimport SearchIcon from '@mui/icons-material/Search';\nimport TypeFilter from './Filters/TypeFilter';\nimport TagsFilter from './Filters/TagsFilter';\nimport {Tag} from '@/types/tag';\n\ninterface FiltersContainerProps {\n onTypeChange?: (selectedTypes: string[]) => void;\n onTagChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n onSubmit?: () => void;\n tags: Tag[];\n}\n\n/**\n * Container component that combines all filter components\n */\nconst FiltersContainer: React.FC<FiltersContainerProps> = ({\n onTypeChange,\n onTagChange,\n onSubmit,\n tags\n}) => {\n return (\n <Box>\n {/* Type Filters */}\n <TypeFilter onChange={onTypeChange}/>\n \n <Divider sx={{ my: 2 }} />\n \n {/* Tags Filter */}\n <TagsFilter\n tags={tags}\n onChange={onTagChange} \n />\n \n <Divider sx={{ my: 2 }} />\n \n {/* Submit Button */}\n <Box sx={{ display: 'flex', justifyContent: 'center', mt: 2 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n startIcon={<SearchIcon />}\n onClick={onSubmit}\n sx={{\n width: '100%',\n py: 1.5,\n borderRadius: 2,\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\n background: 'linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))',\n '&:hover': {\n background: 'linear-gradient(135deg, rgba(25, 118, 210, 0.9), rgba(25, 118, 210, 1))',\n boxShadow: '0px 6px 15px rgba(0, 0, 0, 0.2)',\n }\n }}\n >\n Search\n </Button>\n </Box>\n </Box>\n );\n};\n\nexport default FiltersContainer;","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\n\nexport function generateTagsDisplay(tag: Tag) {\n return (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n marginTop:\"6px\",\n marginRight: \"6px\",\n marginBottom: \"6px\",\n background: tag.color || '#bfbcbb',\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\"\n }}\n >\n {tag.label}\n </span>\n )\n}\n\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[]) {\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\n const validTags = ids\n .map((id) => legalTags.find((tag) => tag.id === id))\n .filter((tag): tag is Tag => Boolean(tag));\n\n return validTags.map((tag) => generateTagsDisplay(tag));\n}\n","\"use client\"\nimport React from 'react';\nimport { Card, CardContent, Typography, Box } from '@mui/material';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\n\nexport interface BaseSearchResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n tags: Tag[];\n}\n\n/**\n * Base component for displaying search results with common functionality\n */\nexport const BaseSearchResultCard: React.FC<BaseSearchResultCardProps> = ({ \n result,\n onClick,\n children,\n icon,\n tags\n}) => {\n const handleClick = () => {\n if (onClick) {\n onClick(result.id);\n }\n };\n\n return (\n <Card \n elevation={6}\n sx={{ \n width: '100%', \n cursor: onClick ? 'pointer' : 'default',\n boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)',\n transition: 'box-shadow 0.3s ease-in-out',\n '&:hover': {\n boxShadow: '0px 12px 28px rgba(0, 0, 0, 0.2)'\n },\n marginBottom: 2\n }}\n onClick={handleClick}\n >\n <CardContent sx={{ display: 'flex', alignItems: 'flex-start' }}>\n {/* Icon on the left */}\n {icon && (\n <Box sx={{ mr: 2, display: 'flex', alignItems: 'center', pt: 0.5 }}>\n {icon}\n </Box>\n )}\n \n {/* Content on the right */}\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\n {result.title}\n </Typography>\n \n {/* Specialized content will be inserted here */}\n {children}\n \n <Typography variant=\"body1\">\n {result.description}\n </Typography>\n \n {result.tags && result.tags.length > 0 && (\n <Box sx={{ mt: 1 }}>\n <Box sx={{\n display: 'block',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'clip',\n pl: 0.5 // Add some padding to prevent clipping of the leftmost tag\n }}>\n {(() => {\n const MAX_VISIBLE = 5; // heuristic: show up to 5 tags on one line\n const tagObjs = result.tags\n .map((tagId) => tags.find((t) => t.id === tagId))\n .filter((t): t is Tag => Boolean(t));\n const visible = tagObjs.slice(0, MAX_VISIBLE);\n const hiddenCount = Math.max(tagObjs.length - visible.length, 0);\n return (\n <>\n {visible.map((tag) => generateTagsDisplay(tag))}\n {hiddenCount > 0 && (\n <span\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n marginTop: '6px',\n marginRight: '6px',\n marginBottom: '6px',\n background: '#9e9e9e',\n color: 'white',\n textShadow: 'black 0.2em 0.2em 0.4em'\n }}\n >\n +{hiddenCount} more\n </span>\n )}\n </>\n );\n })()}\n </Box>\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default BaseSearchResultCard;","\"use client\"\nimport React from 'react';\nimport Avatar from '@mui/material/Avatar';\nimport BaseSearchResultCard from './BaseSearchResultCard';\nimport { Tag } from \"@/types/tag\";\nimport { SearchResultItem } from '@/types/search';\n\ninterface PlayerResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n tags: Tag[];\n}\n\n/**\n * Component for displaying player search results\n * Displays player avatars with consistent color hashing/fallbacks\n */\nconst PlayerResultCard: React.FC<PlayerResultCardProps> = ({ \n result,\n onClick,\n tags\n}) => {\n // Get the first letter of the username for the avatar fallback\n const firstLetter = result.title.charAt(0).toUpperCase();\n \n // Generate a consistent color based on the username\n const getAvatarColor = (name: string) => {\n const colors = [\n '#F44336', '#E91E63', '#9C27B0', '#673AB7', \n '#3F51B5', '#2196F3', '#03A9F4', '#00BCD4', \n '#009688', '#4CAF50', '#8BC34A', '#CDDC39', \n '#FFEB3B', '#FFC107', '#FF9800', '#FF5722'\n ];\n \n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n \n return colors[Math.abs(hash) % colors.length];\n };\n \n const avatarColor = getAvatarColor(result.title);\n \n const playerIcon = (\n <Avatar \n src={result.imageUrl} \n alt={result.title}\n sx={{ \n width: 40, \n height: 40, \n bgcolor: !result.imageUrl ? avatarColor : undefined\n }}\n >\n {!result.imageUrl && firstLetter}\n </Avatar>\n );\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={playerIcon} tags={tags}>\n {/* No additional content needed */}\n </BaseSearchResultCard>\n );\n};\n\nexport default PlayerResultCard;","\"use client\"\nimport React from 'react';\nimport { BaseSearchResultCard } from './BaseSearchResultCard';\nimport { Box, Typography, LinearProgress, Chip } from '@mui/material';\nimport CasinoIcon from '@mui/icons-material/Casino';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\n\ninterface TableResultCardProps {\n result: SearchResultItem;\n tags: Tag[];\n onClick?: (id: number) => void;\n}\n\nexport const TableResultCard: React.FC<TableResultCardProps> = ({ result, tags, onClick }) => {\n const capacity = result.capacity || 1;\n const numPlayers = result.numPlayers || 0;\n const occupancy = (numPlayers / capacity) * 100;\n \n return (\n <BaseSearchResultCard result={result} tags={tags} onClick={onClick} icon={<CasinoIcon color=\"primary\" />}>\n <Box sx={{ mb: 1 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 0.5 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Players: {numPlayers} / {capacity}\n </Typography>\n {result.dungeonMaster ? (\n <Chip label=\"DM Present\" size=\"small\" color=\"success\" variant=\"outlined\" />\n ) : (\n <Chip label=\"No DM\" size=\"small\" color=\"warning\" variant=\"outlined\" />\n )}\n </Box>\n <LinearProgress variant=\"determinate\" value={occupancy} sx={{ height: 8, borderRadius: 4 }} />\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default TableResultCard;","\"use client\"\nimport React from 'react';\nimport { Box, Typography } from '@mui/material';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport LocationOnIcon from '@mui/icons-material/LocationOn';\nimport EventIcon from '@mui/icons-material/Event';\nimport BaseSearchResultCard from './BaseSearchResultCard';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\n\ninterface EventResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n tags: Tag[];\n}\n\nconst EventResultCard: React.FC<EventResultCardProps> = ({\n result,\n onClick,\n tags,\n}) => {\n const formatDate = (dateString: string) => {\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n\n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', options);\n } catch {\n return dateString;\n }\n };\n\n const formattedDate = result.date ? formatDate(result.date) : 'Date TBD';\n const location = result.location || 'Location TBD';\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={<EventIcon color=\"primary\" />} tags={tags}>\n <Box sx={{ mb: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 0.5 }}>\n <CalendarTodayIcon sx={{ mr: 1, fontSize: 'small', color: 'text.secondary' }} />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {formattedDate}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1 }}>\n <LocationOnIcon sx={{ mr: 1, fontSize: 'small', color: 'text.secondary' }} />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {location}\n </Typography>\n </Box>\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default EventResultCard;\n","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport { SearchResultItem } from '@/types/search';\nimport PlayerResultCard from './Results/PlayerResultCard';\nimport TableResultCard from './Results/TableResultCard';\nimport EventResultCard from './Results/EventResultCard';\nimport { Tag } from '@/types/tag';\n\ninterface ResultsContainerProps {\n results: SearchResultItem[];\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n tags: Tag[]\n}\n\n/**\n * Container component that displays a list of search results\n */\nconst ResultsContainer: React.FC<ResultsContainerProps> = ({\n results,\n onResultClick,\n tags\n}) => {\n if (results.length === 0 || !results.map) {\n return (\n <Box sx={{ textAlign: 'center', py: 4 }}>\n No results found. Try adjusting your filters.\n </Box>\n );\n }\n\n const onPlayerClick = (id: number) => {\n onResultClick?.(id, 'player');\n }\n\n const onTableClick = (id: number) => {\n onResultClick?.(id, 'table');\n }\n\n const onEventClick = (id: number) => {\n onResultClick?.(id, 'event');\n }\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {results.map((result) => {\n // Render the appropriate card based on result type\n switch (result.type) {\n case 'player':\n return (\n <PlayerResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'player' }} \n onClick={onPlayerClick}\n tags={tags}\n />\n );\n case 'table':\n return (\n <TableResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'table' }} \n onClick={onTableClick}\n tags={tags}\n />\n );\n case 'event':\n return (\n <EventResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'event' }} \n onClick={onEventClick}\n tags={tags}\n />\n );\n default:\n // This should never happen with proper typing\n console.error(`Unknown result type: ${result.type}`);\n return null;\n }\n })}\n </Box>\n );\n};\n\nexport default ResultsContainer;","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface ScrollableResultsListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number, type: 'player' | 'event' | 'table') => void;\n emptyText?: string;\n}\n\n/**\n * Generic scrollable list for search results. Reuses ResultsContainer and simply constrains height.\n */\nconst ScrollableResultsList: React.FC<ScrollableResultsListProps> = ({\n results,\n tags,\n maxHeight = 400,\n onResultClick,\n emptyText,\n}) => {\n const hasResults = Array.isArray(results) && results.length > 0;\n\n return (\n <Box sx={{ maxHeight, overflowY: 'auto', pr: 1 }}>\n {hasResults ? (\n <ResultsContainer results={results} onResultClick={onResultClick} tags={tags} />\n ) : (\n <Box sx={{ textAlign: 'center', py: 2 }}>\n {emptyText || 'No results to display.'}\n </Box>\n )}\n </Box>\n );\n};\n\nexport default ScrollableResultsList;\n","\"use client\"\nimport React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface PlayersScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n}\n\n/**\n * Thin wrapper to show only player results in a scrollable list.\n */\nconst PlayersScrollableList: React.FC<PlayersScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n}) => {\n const players = (results || []).filter((r): r is SearchResultItem & { type: 'player' } => r?.type === 'player');\n const handleClick = (id: number) => onResultClick?.(id);\n\n return (\n <ScrollableResultsList\n results={players}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={(id, type) => {\n if (type === 'player') handleClick(id);\n }}\n />\n );\n};\n\nexport default PlayersScrollableList;\n","\"use client\";\n\nimport React from 'react';\r\nimport BaseSearchResultCard from './BaseSearchResultCard';\r\nimport { Tag } from '@/types/tag';\r\n\r\ninterface SearchResultCardProps {\r\n result: any;\r\n onClick?: (id: number) => void;\r\n tags: Tag[];\r\n}\r\n\r\n/**\r\n * @deprecated Use specialized card components (PlayerResultCard, TableResultCard, EventResultCard) instead\r\n * This component is kept for backward compatibility\r\n */\r\nconst SearchResultCard: React.FC<SearchResultCardProps> = ({ \r\n result,\r\n onClick,\r\n tags,\r\n}) => {\r\n return (\r\n <BaseSearchResultCard result={result} onClick={onClick} tags={tags}>\r\n {/* No specialized content for the generic card */}\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default SearchResultCard;","\"use client\"\nimport React from 'react';\nimport Grid from '@mui/material/Grid';\nimport Card from '@mui/material/Card';\nimport CardHeader from '@mui/material/CardHeader';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport { useMediaQuery, useTheme } from '@mui/material';\nimport FiltersContainer from './FiltersContainer';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem } from '@/types/search';\nimport {Tag} from '@/types/tag'\n\ninterface SearchPageLayoutProps {\n /**\n * Search results to display\n */\n results: SearchResultItem[];\n \n /**\n * Optional title for the search page\n */\n title?: string;\n \n /**\n * Optional callback for when a type filter changes\n */\n onTypeChange?: (selectedTypes: string[]) => void;\n \n /**\n * Optional callback for when tag filter changes\n */\n onTagChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n allTags: Tag[];\n validTags: Tag[];\n \n /**\n * Optional callback for when the search button is clicked\n */\n onSubmit?: () => void;\n \n /**\n * Optional callback for when a result is clicked\n */\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n}\n\n/**\n * Layout component for the search page with responsive design\n * - Title bar at the top\n * - Two containers side by side on desktop\n * - Right container takes 9 lanes on desktop, 12 on mobile\n * - Left container takes 3 lanes on desktop, appears above results on mobile\n */\nexport default function SearchPageLayout({\n results,\n title = 'Search Results',\n onTypeChange,\n onTagChange,\n onSubmit,\n onResultClick,\n validTags,\n allTags\n}: SearchPageLayoutProps) {\n \"use client\"\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\n \n return (\n <Box sx={{ padding: 2 }}>\n {/* Title Bar */}\n <Card sx={{ marginBottom: 2 }}>\n <CardHeader \n title={title}\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n </Card>\n \n {/* Main Content */}\n <Grid container spacing={2}>\n {/* Filters Section - Desktop view (side by side) or Mobile view (above results) */}\n {/* For desktop: 3 columns on the left */}\n {/* For mobile: full width above results */}\n <Grid size={{ xs: 12, md: 3 }}>\n <Card sx={{ marginBottom: isMobile ? 2 : 0 }}>\n <CardHeader \n title=\"Filters\"\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n <FiltersContainer \n onTypeChange={onTypeChange}\n onTagChange={onTagChange}\n onSubmit={onSubmit}\n tags={validTags}\n />\n </CardContent>\n </Card>\n </Grid>\n \n {/* Results Section */}\n <Grid size={{ xs: 12, md: 9 }}>\n <Card>\n <CardHeader \n title=\"Results\"\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n {/* Results content */}\n <ResultsContainer \n results={results}\n onResultClick={onResultClick}\n tags={allTags}\n />\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </Box>\n );\n}","\"use client\"\nimport React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface TablesScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n sortBy?: 'none' | 'availability';\n}\n\n/**\n * Thin wrapper to show only table results in a scrollable list.\n * Updated to sort by most available slots first.\n */\nconst TablesScrollableList: React.FC<TablesScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n sortBy = 'availability',\n}) => {\n const tables = (results || []).filter((r): r is SearchResultItem & { type: 'table' } => r?.type === 'table');\n\n // Compute available slots using only the result item; default to safe values when missing\n const getAvailableSlots = (r: SearchResultItem & { type: 'table' }) => {\n const capacity = typeof (r as any).capacity === 'number' ? (r as any).capacity : 0;\n const playersCount = typeof (r as any).numPlayers === 'number' ? (r as any).numPlayers : 0;\n return Math.max(capacity - playersCount, 0);\n };\n\n const sortedTables = sortBy === 'availability'\n ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a))\n : tables;\n\n const handleClick = (id: number) => onResultClick?.(id);\n\n return (\n <ScrollableResultsList\n results={sortedTables}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={(id, type) => {\n if (type === 'table') handleClick(id);\n }}\n />\n );\n};\n\nexport default TablesScrollableList;\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SortOptions, TagsFilter, TypeFilter } from './Filters';
|
|
2
|
+
export { FiltersContainer, PlayersScrollableList, PlayersScrollableListProps, ResultsContainer, ScrollableResultsList, ScrollableResultsListProps, SearchPageLayout, TablesScrollableList, TablesScrollableListProps } from '../SearchPage';
|
|
3
|
+
export { BaseSearchResultCard, BaseSearchResultCardProps, EventResultCard, PlayerResultCard, SearchResultCard, TableResultCard } from './Results';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../types/tag.cjs';
|
|
6
|
+
import '../types/search.cjs';
|
|
7
|
+
import 'react/jsx-runtime';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SortOptions, TagsFilter, TypeFilter } from './Filters';
|
|
2
|
+
export { FiltersContainer, PlayersScrollableList, PlayersScrollableListProps, ResultsContainer, ScrollableResultsList, ScrollableResultsListProps, SearchPageLayout, TablesScrollableList, TablesScrollableListProps } from '../SearchPage';
|
|
3
|
+
export { BaseSearchResultCard, BaseSearchResultCardProps, EventResultCard, PlayerResultCard, SearchResultCard, TableResultCard } from './Results';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../types/tag.js';
|
|
6
|
+
import '../types/search.js';
|
|
7
|
+
import 'react/jsx-runtime';
|