@mbpockets/shared-ui 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/EventPage/index.cjs +209 -121
  2. package/dist/EventPage/index.cjs.map +1 -1
  3. package/dist/EventPage/index.mjs +201 -119
  4. package/dist/EventPage/index.mjs.map +1 -1
  5. package/dist/EventPage.cjs +209 -121
  6. package/dist/EventPage.cjs.map +1 -1
  7. package/dist/EventPage.mjs +201 -119
  8. package/dist/EventPage.mjs.map +1 -1
  9. package/dist/PlayerPage/index.cjs.map +1 -1
  10. package/dist/PlayerPage/index.mjs.map +1 -1
  11. package/dist/PlayerPage.cjs.map +1 -1
  12. package/dist/PlayerPage.mjs.map +1 -1
  13. package/dist/ProfilePage/index.cjs.map +1 -1
  14. package/dist/ProfilePage/index.mjs.map +1 -1
  15. package/dist/ProfilePage.cjs.map +1 -1
  16. package/dist/ProfilePage.mjs.map +1 -1
  17. package/dist/SearchPage/Filters/index.cjs +149 -43
  18. package/dist/SearchPage/Filters/index.cjs.map +1 -1
  19. package/dist/SearchPage/Filters/index.d.cts +1 -2
  20. package/dist/SearchPage/Filters/index.d.ts +1 -2
  21. package/dist/SearchPage/Filters/index.mjs +146 -42
  22. package/dist/SearchPage/Filters/index.mjs.map +1 -1
  23. package/dist/SearchPage/Filters.cjs +149 -43
  24. package/dist/SearchPage/Filters.cjs.map +1 -1
  25. package/dist/SearchPage/Filters.d.cts +38 -3
  26. package/dist/SearchPage/Filters.d.ts +38 -3
  27. package/dist/SearchPage/Filters.mjs +146 -42
  28. package/dist/SearchPage/Filters.mjs.map +1 -1
  29. package/dist/SearchPage/Results/index.cjs +139 -67
  30. package/dist/SearchPage/Results/index.cjs.map +1 -1
  31. package/dist/SearchPage/Results/index.mjs +127 -63
  32. package/dist/SearchPage/Results/index.mjs.map +1 -1
  33. package/dist/SearchPage/Results.cjs +139 -67
  34. package/dist/SearchPage/Results.cjs.map +1 -1
  35. package/dist/SearchPage/Results.d.cts +21 -12
  36. package/dist/SearchPage/Results.d.ts +21 -12
  37. package/dist/SearchPage/Results.mjs +127 -63
  38. package/dist/SearchPage/Results.mjs.map +1 -1
  39. package/dist/SearchPage/index.cjs +496 -221
  40. package/dist/SearchPage/index.cjs.map +1 -1
  41. package/dist/SearchPage/index.d.cts +1 -1
  42. package/dist/SearchPage/index.d.ts +1 -1
  43. package/dist/SearchPage/index.mjs +483 -216
  44. package/dist/SearchPage/index.mjs.map +1 -1
  45. package/dist/SearchPage.cjs +496 -221
  46. package/dist/SearchPage.cjs.map +1 -1
  47. package/dist/SearchPage.d.cts +78 -7
  48. package/dist/SearchPage.d.ts +78 -7
  49. package/dist/SearchPage.mjs +483 -216
  50. package/dist/SearchPage.mjs.map +1 -1
  51. package/dist/TablePage/index.cjs +10 -1
  52. package/dist/TablePage/index.cjs.map +1 -1
  53. package/dist/TablePage/index.d.cts +2 -2
  54. package/dist/TablePage/index.d.ts +2 -2
  55. package/dist/TablePage/index.mjs +10 -2
  56. package/dist/TablePage/index.mjs.map +1 -1
  57. package/dist/TablePage.cjs +10 -1
  58. package/dist/TablePage.cjs.map +1 -1
  59. package/dist/TablePage.d.cts +7 -2
  60. package/dist/TablePage.d.ts +7 -2
  61. package/dist/TablePage.mjs +10 -2
  62. package/dist/TablePage.mjs.map +1 -1
  63. package/dist/index.cjs +447 -178
  64. package/dist/index.cjs.map +1 -1
  65. package/dist/index.d.cts +3 -3
  66. package/dist/index.d.ts +3 -3
  67. package/dist/index.mjs +435 -175
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/mocks/SearchResults.cjs +22 -15
  70. package/dist/mocks/SearchResults.cjs.map +1 -1
  71. package/dist/mocks/SearchResults.d.cts +3 -15
  72. package/dist/mocks/SearchResults.d.ts +3 -15
  73. package/dist/mocks/SearchResults.mjs +22 -15
  74. package/dist/mocks/SearchResults.mjs.map +1 -1
  75. package/dist/mocks/index.cjs +22 -15
  76. package/dist/mocks/index.cjs.map +1 -1
  77. package/dist/mocks/index.d.cts +2 -1
  78. package/dist/mocks/index.d.ts +2 -1
  79. package/dist/mocks/index.mjs +22 -15
  80. package/dist/mocks/index.mjs.map +1 -1
  81. package/dist/mocks.cjs +22 -15
  82. package/dist/mocks.cjs.map +1 -1
  83. package/dist/mocks.d.cts +2 -1
  84. package/dist/mocks.d.ts +2 -1
  85. package/dist/mocks.mjs +22 -15
  86. package/dist/mocks.mjs.map +1 -1
  87. package/dist/{common → shared}/index.cjs.map +1 -1
  88. package/dist/{common → shared}/index.d.cts +1 -1
  89. package/dist/{common → shared}/index.d.ts +1 -1
  90. package/dist/{common → shared}/index.mjs.map +1 -1
  91. package/dist/{common.cjs → shared.cjs} +2 -2
  92. package/dist/{common.cjs.map → shared.cjs.map} +1 -1
  93. package/dist/{common.css → shared.css} +1 -1
  94. package/dist/{common.mjs → shared.mjs} +2 -2
  95. package/dist/{common.mjs.map → shared.mjs.map} +1 -1
  96. package/dist/types/index.d.cts +1 -1
  97. package/dist/types/index.d.ts +1 -1
  98. package/dist/types/search.d.cts +23 -1
  99. package/dist/types/search.d.ts +23 -1
  100. package/dist/types.d.cts +1 -1
  101. package/dist/types.d.ts +1 -1
  102. package/package.json +1 -1
  103. /package/dist/{common → shared}/Modal/index.cjs +0 -0
  104. /package/dist/{common → shared}/Modal/index.cjs.map +0 -0
  105. /package/dist/{common → shared}/Modal/index.css +0 -0
  106. /package/dist/{common → shared}/Modal/index.css.map +0 -0
  107. /package/dist/{common → shared}/Modal/index.d.cts +0 -0
  108. /package/dist/{common → shared}/Modal/index.d.ts +0 -0
  109. /package/dist/{common → shared}/Modal/index.mjs +0 -0
  110. /package/dist/{common → shared}/Modal/index.mjs.map +0 -0
  111. /package/dist/{common → shared}/Modal.cjs +0 -0
  112. /package/dist/{common → shared}/Modal.cjs.map +0 -0
  113. /package/dist/{common → shared}/Modal.css +0 -0
  114. /package/dist/{common → shared}/Modal.css.map +0 -0
  115. /package/dist/{common → shared}/Modal.d.cts +0 -0
  116. /package/dist/{common → shared}/Modal.d.ts +0 -0
  117. /package/dist/{common → shared}/Modal.mjs +0 -0
  118. /package/dist/{common → shared}/Modal.mjs.map +0 -0
  119. /package/dist/{common → shared}/index.cjs +0 -0
  120. /package/dist/{common → shared}/index.css +0 -0
  121. /package/dist/{common → shared}/index.css.map +0 -0
  122. /package/dist/{common → shared}/index.mjs +0 -0
  123. /package/dist/{common.css.map → shared.css.map} +0 -0
  124. /package/dist/{common.d.cts → shared.d.cts} +0 -0
  125. /package/dist/{common.d.ts → shared.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["jsxs","Fragment","jsx","Typography","FormControl","RadioGroup","FormControlLabel","Radio","React","Box","Autocomplete","TextField","Divider","Popper","FormGroup","Checkbox"],"mappings":"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","file":"Filters.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 &times;\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"]}
1
+ {"version":3,"sources":["../../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/shared/Chip.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TextSearchCard.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["Box","jsx","FormControlLabel","Checkbox","jsxs","Fragment","Typography","FormControl","RadioGroup","Radio","React","Autocomplete","TextField","Divider","Popper","useEffect","FormGroup"],"mappings":"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","file":"Filters.cjs","sourcesContent":["\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\"\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n \r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n if (!Tags || Tags.length === 0 || !Tags.map) return [];\r\n return Tags.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n }));\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n if (!Tags || Tags.length === 0 || !Tags.map) return null;\r\n Tags.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n disabled={type.id === 'event'}\n title={type.id === 'event' ? 'Coming soon! Currently only player and table search are supported.' : ''}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n"]}
@@ -1,6 +1,11 @@
1
1
  import React__default from 'react';
2
2
  import { Tag } from '../types/tag';
3
- import { SearchResultType } from '../types/search';
3
+
4
+ interface ExpiredTablesFilterProps {
5
+ includeExpiredTables: boolean;
6
+ onChange: (include: boolean) => void;
7
+ }
8
+ declare const ExpiredTablesFilter: React__default.FC<ExpiredTablesFilterProps>;
4
9
 
5
10
  interface SortOptionsProps {
6
11
  defaultValue?: string;
@@ -9,6 +14,11 @@ interface SortOptionsProps {
9
14
  declare const SortOptions: React__default.FC<SortOptionsProps>;
10
15
 
11
16
  interface TagsFilterProps {
17
+ initialSelectedTags?: {
18
+ mustHave: number[];
19
+ mustNotHave: number[];
20
+ shouldHaveAtLeastOne: number[];
21
+ };
12
22
  onChange?: (selectedTags: {
13
23
  mustHave: number[];
14
24
  mustNotHave: number[];
@@ -23,9 +33,34 @@ interface TagsFilterProps {
23
33
  */
24
34
  declare const TagsFilter: React__default.FC<TagsFilterProps>;
25
35
 
36
+ interface TextSearchCardProps {
37
+ onChange?: (textSearch: {
38
+ query: string;
39
+ titleOnly: boolean;
40
+ }) => void;
41
+ selectedTypes: string[];
42
+ initialTextSearch?: {
43
+ query: string;
44
+ titleOnly: boolean;
45
+ };
46
+ }
47
+ /**
48
+ * Component for searching text within tables and events
49
+ * Only shown when table or event types are selected
50
+ */
51
+ declare const TextSearchCard: React__default.FC<TextSearchCardProps>;
52
+
26
53
  interface TypeFilterProps {
27
- onChange?: (selectedTypes: SearchResultType[]) => void;
54
+ types: {
55
+ id: string;
56
+ label: string;
57
+ }[];
58
+ initialSelectedTypes?: string[];
59
+ onChange?: (selectedTypes: string[]) => void;
28
60
  }
61
+ /**
62
+ * Component for filtering search results by type (player, event, table)
63
+ */
29
64
  declare const TypeFilter: React__default.FC<TypeFilterProps>;
30
65
 
31
- export { SortOptions, TagsFilter, TypeFilter };
66
+ export { ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter };
@@ -1,6 +1,11 @@
1
1
  import React__default from 'react';
2
2
  import { Tag } from '../types/tag';
3
- import { SearchResultType } from '../types/search';
3
+
4
+ interface ExpiredTablesFilterProps {
5
+ includeExpiredTables: boolean;
6
+ onChange: (include: boolean) => void;
7
+ }
8
+ declare const ExpiredTablesFilter: React__default.FC<ExpiredTablesFilterProps>;
4
9
 
5
10
  interface SortOptionsProps {
6
11
  defaultValue?: string;
@@ -9,6 +14,11 @@ interface SortOptionsProps {
9
14
  declare const SortOptions: React__default.FC<SortOptionsProps>;
10
15
 
11
16
  interface TagsFilterProps {
17
+ initialSelectedTags?: {
18
+ mustHave: number[];
19
+ mustNotHave: number[];
20
+ shouldHaveAtLeastOne: number[];
21
+ };
12
22
  onChange?: (selectedTags: {
13
23
  mustHave: number[];
14
24
  mustNotHave: number[];
@@ -23,9 +33,34 @@ interface TagsFilterProps {
23
33
  */
24
34
  declare const TagsFilter: React__default.FC<TagsFilterProps>;
25
35
 
36
+ interface TextSearchCardProps {
37
+ onChange?: (textSearch: {
38
+ query: string;
39
+ titleOnly: boolean;
40
+ }) => void;
41
+ selectedTypes: string[];
42
+ initialTextSearch?: {
43
+ query: string;
44
+ titleOnly: boolean;
45
+ };
46
+ }
47
+ /**
48
+ * Component for searching text within tables and events
49
+ * Only shown when table or event types are selected
50
+ */
51
+ declare const TextSearchCard: React__default.FC<TextSearchCardProps>;
52
+
26
53
  interface TypeFilterProps {
27
- onChange?: (selectedTypes: SearchResultType[]) => void;
54
+ types: {
55
+ id: string;
56
+ label: string;
57
+ }[];
58
+ initialSelectedTypes?: string[];
59
+ onChange?: (selectedTypes: string[]) => void;
28
60
  }
61
+ /**
62
+ * Component for filtering search results by type (player, event, table)
63
+ */
29
64
  declare const TypeFilter: React__default.FC<TypeFilterProps>;
30
65
 
31
- export { SortOptions, TagsFilter, TypeFilter };
66
+ export { ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter };
@@ -1,19 +1,39 @@
1
1
  "use client";
2
+ import FormControlLabel from '@mui/material/FormControlLabel';
3
+ import Checkbox from '@mui/material/Checkbox';
4
+ import Box from '@mui/material/Box';
5
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
6
  import Typography2 from '@mui/material/Typography';
3
7
  import FormControl from '@mui/material/FormControl';
4
8
  import RadioGroup from '@mui/material/RadioGroup';
5
- import FormControlLabel from '@mui/material/FormControlLabel';
6
9
  import Radio from '@mui/material/Radio';
7
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
8
- import React from 'react';
9
- import Box from '@mui/material/Box';
10
+ import React, { useEffect } from 'react';
10
11
  import Autocomplete from '@mui/material/Autocomplete';
11
12
  import TextField from '@mui/material/TextField';
12
13
  import Popper from '@mui/material/Popper';
13
14
  import Divider from '@mui/material/Divider';
14
15
  import FormGroup from '@mui/material/FormGroup';
15
- import Checkbox from '@mui/material/Checkbox';
16
16
 
17
+ var ExpiredTablesFilter = ({
18
+ includeExpiredTables,
19
+ onChange
20
+ }) => {
21
+ return /* @__PURE__ */ jsx(Box, { sx: { mt: 2 }, children: /* @__PURE__ */ jsx(
22
+ FormControlLabel,
23
+ {
24
+ control: /* @__PURE__ */ jsx(
25
+ Checkbox,
26
+ {
27
+ checked: includeExpiredTables,
28
+ onChange: (e) => onChange(e.target.checked),
29
+ color: "primary"
30
+ }
31
+ ),
32
+ label: "Show expired tables"
33
+ }
34
+ ) });
35
+ };
36
+ var ExpiredTablesFilter_default = ExpiredTablesFilter;
17
37
  var SORT_OPTIONS = [
18
38
  { id: "relevance", label: "Relevance" },
19
39
  { id: "newest", label: "Newest" },
@@ -40,13 +60,53 @@ var SortOptions = ({
40
60
  ] });
41
61
  };
42
62
  var SortOptions_default = SortOptions;
63
+ function Chip({ tag, removeCallback }) {
64
+ var _a;
65
+ const color = (_a = tag.color) != null ? _a : "#bfbcbb";
66
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
67
+ "span",
68
+ {
69
+ 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",
70
+ style: {
71
+ borderColor: `color-mix(in srgb, ${color}, black 50%)`,
72
+ background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,
73
+ textShadow: "black 1.5px 1px 1.5px",
74
+ filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`
75
+ },
76
+ children: [
77
+ tag.label,
78
+ removeCallback && /* @__PURE__ */ jsx(
79
+ "button",
80
+ {
81
+ type: "button",
82
+ onClick: () => removeCallback(tag.id),
83
+ className: "ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full",
84
+ style: {
85
+ textShadow: "black 1px 1px 1px"
86
+ },
87
+ children: "X"
88
+ }
89
+ )
90
+ ]
91
+ },
92
+ tag.id
93
+ ) });
94
+ }
43
95
  var TagsFilter = ({
44
96
  onChange,
45
- tags: Tags = []
97
+ tags: Tags = [],
98
+ initialSelectedTags
46
99
  }) => {
47
- const [mustHaveTags, setMustHaveTags] = React.useState([]);
48
- const [mustNotHaveTags, setMustNotHaveTags] = React.useState([]);
49
- const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState([]);
100
+ const [mustHaveTags, setMustHaveTags] = React.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustHave) || []);
101
+ const [mustNotHaveTags, setMustNotHaveTags] = React.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustNotHave) || []);
102
+ const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.shouldHaveAtLeastOne) || []);
103
+ React.useEffect(() => {
104
+ if (initialSelectedTags) {
105
+ setMustHaveTags(initialSelectedTags.mustHave || []);
106
+ setMustNotHaveTags(initialSelectedTags.mustNotHave || []);
107
+ setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);
108
+ }
109
+ }, [initialSelectedTags]);
50
110
  Tags = !!Tags ? Tags : [];
51
111
  const [inputValues, setInputValues] = React.useState({
52
112
  mustHave: "",
@@ -56,7 +116,7 @@ var TagsFilter = ({
56
116
  const tagOptions = React.useMemo(() => {
57
117
  console.log("available tags: " + JSON.stringify(Tags));
58
118
  console.log(!Tags);
59
- if (!Tags || Tags.length == 0 || !Tags.map) return [];
119
+ if (!Tags || Tags.length === 0 || !Tags.map) return [];
60
120
  return Tags.map((tag) => ({
61
121
  value: tag.id,
62
122
  label: tag.label
@@ -88,7 +148,7 @@ var TagsFilter = ({
88
148
  };
89
149
  const renderSelectedTags = (selectedTags, category) => {
90
150
  const tagValues = [];
91
- if (!Tags || Tags.length == 0 || !Tags.map) return null;
151
+ if (!Tags || Tags.length === 0 || !Tags.map) return null;
92
152
  Tags.forEach((tag) => {
93
153
  if (selectedTags.includes(tag.id)) {
94
154
  tagValues.push(tag);
@@ -97,27 +157,11 @@ var TagsFilter = ({
97
157
  if (tagValues.length === 0) {
98
158
  return null;
99
159
  }
100
- return /* @__PURE__ */ jsx(Box, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsxs(
101
- "span",
160
+ return /* @__PURE__ */ jsx(Box, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsx(
161
+ Chip,
102
162
  {
103
- className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
104
- style: {
105
- background: tag.color || "#bfbcbb",
106
- color: "white",
107
- textShadow: "black 0.2em 0.2em 0.4em"
108
- },
109
- children: [
110
- tag.label,
111
- /* @__PURE__ */ jsx(
112
- "button",
113
- {
114
- type: "button",
115
- onClick: () => handleTagChange(tag.id, category),
116
- className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
117
- children: "\xD7"
118
- }
119
- )
120
- ]
163
+ tag,
164
+ removeCallback: (tagId) => handleTagChange(tagId, category)
121
165
  },
122
166
  tag.id
123
167
  )) });
@@ -212,21 +256,80 @@ var CustomPopper = (props) => {
212
256
  );
213
257
  };
214
258
  var TagsFilter_default = TagsFilter;
215
- var FILTER_TYPES = [
216
- { id: "player", label: "Players" },
217
- { id: "event", label: "Events", disabled: true },
218
- { id: "table", label: "Tables", disabled: true }
219
- ];
220
- var TypeFilter = ({ onChange }) => {
221
- const [selectedTypes, setSelectedTypes] = React.useState([]);
259
+ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
260
+ const [query, setQuery] = React.useState((initialTextSearch == null ? void 0 : initialTextSearch.query) || "");
261
+ const [titleOnly, setTitleOnly] = React.useState((initialTextSearch == null ? void 0 : initialTextSearch.titleOnly) || false);
262
+ useEffect(() => {
263
+ if (initialTextSearch) {
264
+ setQuery(initialTextSearch.query || "");
265
+ setTitleOnly(initialTextSearch.titleOnly || false);
266
+ }
267
+ }, [initialTextSearch]);
268
+ const shouldShow = selectedTypes.includes("table") || selectedTypes.includes("event");
269
+ if (!shouldShow) {
270
+ return null;
271
+ }
272
+ const handleQueryChange = (e) => {
273
+ const newQuery = e.target.value;
274
+ setQuery(newQuery);
275
+ if (onChange) {
276
+ onChange({ query: newQuery, titleOnly });
277
+ }
278
+ };
279
+ const handleTitleOnlyChange = (e) => {
280
+ const newTitleOnly = e.target.checked;
281
+ setTitleOnly(newTitleOnly);
282
+ if (onChange) {
283
+ onChange({ query, titleOnly: newTitleOnly });
284
+ }
285
+ };
286
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
287
+ /* @__PURE__ */ jsx(Typography2, { variant: "h6", gutterBottom: true, children: "Text Search" }),
288
+ /* @__PURE__ */ jsxs(Box, { sx: { mb: 2 }, children: [
289
+ /* @__PURE__ */ jsx(
290
+ TextField,
291
+ {
292
+ fullWidth: true,
293
+ label: "Search in title and description",
294
+ variant: "outlined",
295
+ value: query,
296
+ onChange: handleQueryChange,
297
+ placeholder: "Enter search terms...",
298
+ sx: { mb: 1 }
299
+ }
300
+ ),
301
+ /* @__PURE__ */ jsx(
302
+ FormControlLabel,
303
+ {
304
+ control: /* @__PURE__ */ jsx(
305
+ Checkbox,
306
+ {
307
+ checked: titleOnly,
308
+ onChange: handleTitleOnlyChange
309
+ }
310
+ ),
311
+ label: "Search in title only"
312
+ }
313
+ )
314
+ ] })
315
+ ] });
316
+ };
317
+ var TextSearchCard_default = TextSearchCard;
318
+ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
319
+ const [selectedTypes, setSelectedTypes] = React.useState(initialSelectedTypes);
320
+ useEffect(() => {
321
+ setSelectedTypes(initialSelectedTypes);
322
+ }, [initialSelectedTypes]);
222
323
  const handleTypeChange = (typeId) => {
223
324
  const newSelectedTypes = selectedTypes.includes(typeId) ? selectedTypes.filter((id) => id !== typeId) : [...selectedTypes, typeId];
224
325
  setSelectedTypes(newSelectedTypes);
225
- onChange == null ? void 0 : onChange(newSelectedTypes);
326
+ if (onChange) {
327
+ onChange(newSelectedTypes);
328
+ }
226
329
  };
227
330
  return /* @__PURE__ */ jsxs(Fragment, { children: [
228
331
  /* @__PURE__ */ jsx(Typography2, { variant: "h6", gutterBottom: true, children: "Type" }),
229
- /* @__PURE__ */ jsx(FormGroup, { children: FILTER_TYPES.map((type) => /* @__PURE__ */ jsx(
332
+ /* @__PURE__ */ jsx(FormGroup, { children: types.map((type) => /* @__PURE__ */ jsx(
230
333
  FormControlLabel,
231
334
  {
232
335
  control: /* @__PURE__ */ jsx(
@@ -234,7 +337,8 @@ var TypeFilter = ({ onChange }) => {
234
337
  {
235
338
  checked: selectedTypes.includes(type.id),
236
339
  onChange: () => handleTypeChange(type.id),
237
- disabled: type.disabled
340
+ disabled: type.id === "event",
341
+ title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
238
342
  }
239
343
  ),
240
344
  label: type.label
@@ -245,6 +349,6 @@ var TypeFilter = ({ onChange }) => {
245
349
  };
246
350
  var TypeFilter_default = TypeFilter;
247
351
 
248
- export { SortOptions_default as SortOptions, TagsFilter_default as TagsFilter, TypeFilter_default as TypeFilter };
352
+ export { ExpiredTablesFilter_default as ExpiredTablesFilter, SortOptions_default as SortOptions, TagsFilter_default as TagsFilter, TextSearchCard_default as TextSearchCard, TypeFilter_default as TypeFilter };
249
353
  //# sourceMappingURL=Filters.mjs.map
250
354
  //# sourceMappingURL=Filters.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["Typography","jsx","jsxs","Fragment","React","FormControlLabel"],"mappings":"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","file":"Filters.mjs","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 &times;\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"]}
1
+ {"version":3,"sources":["../../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../../src/components/SearchPage/Filters/SortOptions.tsx","../../src/components/shared/Chip.tsx","../../src/components/SearchPage/Filters/TagsFilter.tsx","../../src/components/SearchPage/Filters/TextSearchCard.tsx","../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["jsx","Typography","FormControlLabel","Fragment","jsxs","Box","React","TextField","Checkbox","useEffect"],"mappings":"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","file":"Filters.mjs","sourcesContent":["\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\"\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n \r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n if (!Tags || Tags.length === 0 || !Tags.map) return [];\r\n return Tags.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n }));\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n if (!Tags || Tags.length === 0 || !Tags.map) return null;\r\n Tags.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n disabled={type.id === 'event'}\n title={type.id === 'event' ? 'Coming soon! Currently only player and table search are supported.' : ''}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n"]}