@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,124 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import Autocomplete from '@mui/material/Autocomplete';
|
|
4
|
+
import Card from '@mui/material/Card';
|
|
5
|
+
import CardContent from '@mui/material/CardContent';
|
|
6
|
+
import CardHeader from '@mui/material/CardHeader';
|
|
7
|
+
import Grid from '@mui/material/Grid';
|
|
8
|
+
import Popper from '@mui/material/Popper';
|
|
9
|
+
import TextField from '@mui/material/TextField';
|
|
10
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
11
|
+
|
|
12
|
+
// src/components/shared/TagEditor.tsx
|
|
13
|
+
function TagEditor({
|
|
14
|
+
title = "Tags",
|
|
15
|
+
selectedTags,
|
|
16
|
+
possibleTags,
|
|
17
|
+
onToggleTag
|
|
18
|
+
}) {
|
|
19
|
+
const [inputValue, setInputValue] = useState("");
|
|
20
|
+
const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
21
|
+
const options = useMemo(
|
|
22
|
+
() => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
23
|
+
[possibleTags]
|
|
24
|
+
);
|
|
25
|
+
return /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card, { children: [
|
|
26
|
+
/* @__PURE__ */ jsx(
|
|
27
|
+
CardHeader,
|
|
28
|
+
{
|
|
29
|
+
title,
|
|
30
|
+
style: {
|
|
31
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
32
|
+
color: "#FFFFFF",
|
|
33
|
+
fontSize: "1.5rem",
|
|
34
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxs(
|
|
40
|
+
"span",
|
|
41
|
+
{
|
|
42
|
+
className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
|
|
43
|
+
style: {
|
|
44
|
+
background: tag.color || "#bfbcbb",
|
|
45
|
+
color: "white",
|
|
46
|
+
textShadow: "black 0.2em 0.2em 0.4em"
|
|
47
|
+
},
|
|
48
|
+
children: [
|
|
49
|
+
tag.label,
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
"button",
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
onClick: () => onToggleTag(tag.id),
|
|
55
|
+
className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
|
|
56
|
+
children: "\xD7"
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
tag.id
|
|
62
|
+
)) }),
|
|
63
|
+
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
|
|
64
|
+
Autocomplete,
|
|
65
|
+
{
|
|
66
|
+
options,
|
|
67
|
+
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
68
|
+
(option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
69
|
+
).slice(0, 3),
|
|
70
|
+
value: null,
|
|
71
|
+
inputValue,
|
|
72
|
+
onInputChange: (event, newInputValue) => {
|
|
73
|
+
if (event && event.type === "change") {
|
|
74
|
+
setInputValue(newInputValue);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
onChange: (event, newValue) => {
|
|
78
|
+
if (newValue) {
|
|
79
|
+
onToggleTag(newValue.value);
|
|
80
|
+
}
|
|
81
|
+
setInputValue("");
|
|
82
|
+
},
|
|
83
|
+
slots: { popper: CustomPopper },
|
|
84
|
+
renderInput: (params) => /* @__PURE__ */ jsx(TextField, { ...params, label: "Select Tags" })
|
|
85
|
+
},
|
|
86
|
+
selectedIds.join("-")
|
|
87
|
+
) }) })
|
|
88
|
+
] })
|
|
89
|
+
] }) }) });
|
|
90
|
+
}
|
|
91
|
+
var CustomPopper = (props) => {
|
|
92
|
+
return /* @__PURE__ */ jsx(
|
|
93
|
+
Popper,
|
|
94
|
+
{
|
|
95
|
+
...props,
|
|
96
|
+
modifiers: [
|
|
97
|
+
{
|
|
98
|
+
name: "preventOverflow",
|
|
99
|
+
options: { boundary: "viewport" }
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "offset",
|
|
103
|
+
options: { offset: [0, -10] }
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
placement: "top-start"
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
};
|
|
110
|
+
function PlayerTagsEdit(props) {
|
|
111
|
+
return /* @__PURE__ */ jsx(
|
|
112
|
+
TagEditor,
|
|
113
|
+
{
|
|
114
|
+
title: "Player Tags",
|
|
115
|
+
selectedTags: props.PlayerTags,
|
|
116
|
+
possibleTags: props.possibleTags,
|
|
117
|
+
onToggleTag: props.updatePlayerTags
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export { PlayerTagsEdit };
|
|
123
|
+
//# sourceMappingURL=index.mjs.map
|
|
124
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/shared/TagEditor.tsx","../../src/components/ProfilePage/PlayerTagsEdit.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\nimport TextField from \"@mui/material/TextField\";\nimport type { Tag } from \"@/types/tag\";\n\nexport interface TagEditorProps {\n title?: string;\n selectedTags: Tag[];\n possibleTags: Tag[];\n onToggleTag: (id: number) => void;\n}\n\nexport function TagEditor({\n title = \"Tags\",\n selectedTags,\n possibleTags,\n onToggleTag,\n}: TagEditorProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\n\n const options = useMemo(\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\n [possibleTags]\n );\n\n return (\n <Grid container>\n <Grid size={{ xs: 12 }}>\n <Card>\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 <CardContent>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {selectedTags.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={() => onToggleTag(tag.id)}\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 </div>\n <Grid container spacing={3}>\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\n <Autocomplete\n key={selectedIds.join(\"-\")}\n options={options}\n filterOptions={(availableOptions, state) =>\n availableOptions\n .filter(\n (option) =>\n !selectedIds.includes(option.value) &&\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3)\n }\n value={null}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n if (event && event.type === \"change\") {\n setInputValue(newInputValue);\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n onToggleTag(newValue.value);\n }\n setInputValue(\"\");\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n}\n\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: { boundary: \"viewport\" },\n },\n {\n name: \"offset\",\n options: { offset: [0, -10] },\n },\n ]}\n placement=\"top-start\"\n />\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\nimport { TagEditor } from \"@/components/shared/TagEditor\";\n\nexport default function PlayerTagsEdit(props: {\n PlayerTags: Tag[];\n possibleTags: Tag[];\n updatePlayerTags: (id:number) => void;\n}) {\n return (\n <TagEditor\n title=\"Player Tags\"\n selectedTags={props.PlayerTags}\n possibleTags={props.possibleTags}\n onToggleTag={props.updatePlayerTags}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var Autocomplete = require('@mui/material/Autocomplete');
|
|
6
|
+
var Card = require('@mui/material/Card');
|
|
7
|
+
var CardContent = require('@mui/material/CardContent');
|
|
8
|
+
var CardHeader = require('@mui/material/CardHeader');
|
|
9
|
+
var Grid = require('@mui/material/Grid');
|
|
10
|
+
var Popper = require('@mui/material/Popper');
|
|
11
|
+
var TextField = require('@mui/material/TextField');
|
|
12
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
13
|
+
|
|
14
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
|
|
16
|
+
var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
|
|
17
|
+
var Card__default = /*#__PURE__*/_interopDefault(Card);
|
|
18
|
+
var CardContent__default = /*#__PURE__*/_interopDefault(CardContent);
|
|
19
|
+
var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
|
|
20
|
+
var Grid__default = /*#__PURE__*/_interopDefault(Grid);
|
|
21
|
+
var Popper__default = /*#__PURE__*/_interopDefault(Popper);
|
|
22
|
+
var TextField__default = /*#__PURE__*/_interopDefault(TextField);
|
|
23
|
+
|
|
24
|
+
// src/components/shared/TagEditor.tsx
|
|
25
|
+
function TagEditor({
|
|
26
|
+
title = "Tags",
|
|
27
|
+
selectedTags,
|
|
28
|
+
possibleTags,
|
|
29
|
+
onToggleTag
|
|
30
|
+
}) {
|
|
31
|
+
const [inputValue, setInputValue] = react.useState("");
|
|
32
|
+
const selectedIds = react.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
33
|
+
const options = react.useMemo(
|
|
34
|
+
() => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
35
|
+
[possibleTags]
|
|
36
|
+
);
|
|
37
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card__default.default, { children: [
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
39
|
+
CardHeader__default.default,
|
|
40
|
+
{
|
|
41
|
+
title,
|
|
42
|
+
style: {
|
|
43
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
44
|
+
color: "#FFFFFF",
|
|
45
|
+
fontSize: "1.5rem",
|
|
46
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
/* @__PURE__ */ jsxRuntime.jsxs(CardContent__default.default, { children: [
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
52
|
+
"span",
|
|
53
|
+
{
|
|
54
|
+
className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
|
|
55
|
+
style: {
|
|
56
|
+
background: tag.color || "#bfbcbb",
|
|
57
|
+
color: "white",
|
|
58
|
+
textShadow: "black 0.2em 0.2em 0.4em"
|
|
59
|
+
},
|
|
60
|
+
children: [
|
|
61
|
+
tag.label,
|
|
62
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
63
|
+
"button",
|
|
64
|
+
{
|
|
65
|
+
type: "button",
|
|
66
|
+
onClick: () => onToggleTag(tag.id),
|
|
67
|
+
className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
|
|
68
|
+
children: "\xD7"
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
tag.id
|
|
74
|
+
)) }),
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
Autocomplete__default.default,
|
|
77
|
+
{
|
|
78
|
+
options,
|
|
79
|
+
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
80
|
+
(option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
81
|
+
).slice(0, 3),
|
|
82
|
+
value: null,
|
|
83
|
+
inputValue,
|
|
84
|
+
onInputChange: (event, newInputValue) => {
|
|
85
|
+
if (event && event.type === "change") {
|
|
86
|
+
setInputValue(newInputValue);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
onChange: (event, newValue) => {
|
|
90
|
+
if (newValue) {
|
|
91
|
+
onToggleTag(newValue.value);
|
|
92
|
+
}
|
|
93
|
+
setInputValue("");
|
|
94
|
+
},
|
|
95
|
+
slots: { popper: CustomPopper },
|
|
96
|
+
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField__default.default, { ...params, label: "Select Tags" })
|
|
97
|
+
},
|
|
98
|
+
selectedIds.join("-")
|
|
99
|
+
) }) })
|
|
100
|
+
] })
|
|
101
|
+
] }) }) });
|
|
102
|
+
}
|
|
103
|
+
var CustomPopper = (props) => {
|
|
104
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
105
|
+
Popper__default.default,
|
|
106
|
+
{
|
|
107
|
+
...props,
|
|
108
|
+
modifiers: [
|
|
109
|
+
{
|
|
110
|
+
name: "preventOverflow",
|
|
111
|
+
options: { boundary: "viewport" }
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "offset",
|
|
115
|
+
options: { offset: [0, -10] }
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
placement: "top-start"
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
function PlayerTagsEdit(props) {
|
|
123
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
124
|
+
TagEditor,
|
|
125
|
+
{
|
|
126
|
+
title: "Player Tags",
|
|
127
|
+
selectedTags: props.PlayerTags,
|
|
128
|
+
possibleTags: props.possibleTags,
|
|
129
|
+
onToggleTag: props.updatePlayerTags
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
exports.PlayerTagsEdit = PlayerTagsEdit;
|
|
135
|
+
//# sourceMappingURL=ProfilePage.cjs.map
|
|
136
|
+
//# sourceMappingURL=ProfilePage.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/shared/TagEditor.tsx","../src/components/ProfilePage/PlayerTagsEdit.tsx"],"names":["useState","useMemo","jsx","Grid","jsxs","Card","CardHeader","CardContent","Autocomplete","TextField","Popper"],"mappings":"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","file":"ProfilePage.cjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\nimport TextField from \"@mui/material/TextField\";\nimport type { Tag } from \"@/types/tag\";\n\nexport interface TagEditorProps {\n title?: string;\n selectedTags: Tag[];\n possibleTags: Tag[];\n onToggleTag: (id: number) => void;\n}\n\nexport function TagEditor({\n title = \"Tags\",\n selectedTags,\n possibleTags,\n onToggleTag,\n}: TagEditorProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\n\n const options = useMemo(\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\n [possibleTags]\n );\n\n return (\n <Grid container>\n <Grid size={{ xs: 12 }}>\n <Card>\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 <CardContent>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {selectedTags.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={() => onToggleTag(tag.id)}\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 </div>\n <Grid container spacing={3}>\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\n <Autocomplete\n key={selectedIds.join(\"-\")}\n options={options}\n filterOptions={(availableOptions, state) =>\n availableOptions\n .filter(\n (option) =>\n !selectedIds.includes(option.value) &&\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3)\n }\n value={null}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n if (event && event.type === \"change\") {\n setInputValue(newInputValue);\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n onToggleTag(newValue.value);\n }\n setInputValue(\"\");\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n}\n\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: { boundary: \"viewport\" },\n },\n {\n name: \"offset\",\n options: { offset: [0, -10] },\n },\n ]}\n placement=\"top-start\"\n />\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\nimport { TagEditor } from \"@/components/shared/TagEditor\";\n\nexport default function PlayerTagsEdit(props: {\n PlayerTags: Tag[];\n possibleTags: Tag[];\n updatePlayerTags: (id:number) => void;\n}) {\n return (\n <TagEditor\n title=\"Player Tags\"\n selectedTags={props.PlayerTags}\n possibleTags={props.possibleTags}\n onToggleTag={props.updatePlayerTags}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Tag } from './types/tag';
|
|
3
|
+
|
|
4
|
+
declare function PlayerTagsEdit(props: {
|
|
5
|
+
PlayerTags: Tag[];
|
|
6
|
+
possibleTags: Tag[];
|
|
7
|
+
updatePlayerTags: (id: number) => void;
|
|
8
|
+
}): react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { PlayerTagsEdit };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Tag } from './types/tag';
|
|
3
|
+
|
|
4
|
+
declare function PlayerTagsEdit(props: {
|
|
5
|
+
PlayerTags: Tag[];
|
|
6
|
+
possibleTags: Tag[];
|
|
7
|
+
updatePlayerTags: (id: number) => void;
|
|
8
|
+
}): react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { PlayerTagsEdit };
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import Autocomplete from '@mui/material/Autocomplete';
|
|
4
|
+
import Card from '@mui/material/Card';
|
|
5
|
+
import CardContent from '@mui/material/CardContent';
|
|
6
|
+
import CardHeader from '@mui/material/CardHeader';
|
|
7
|
+
import Grid from '@mui/material/Grid';
|
|
8
|
+
import Popper from '@mui/material/Popper';
|
|
9
|
+
import TextField from '@mui/material/TextField';
|
|
10
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
11
|
+
|
|
12
|
+
// src/components/shared/TagEditor.tsx
|
|
13
|
+
function TagEditor({
|
|
14
|
+
title = "Tags",
|
|
15
|
+
selectedTags,
|
|
16
|
+
possibleTags,
|
|
17
|
+
onToggleTag
|
|
18
|
+
}) {
|
|
19
|
+
const [inputValue, setInputValue] = useState("");
|
|
20
|
+
const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
21
|
+
const options = useMemo(
|
|
22
|
+
() => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
23
|
+
[possibleTags]
|
|
24
|
+
);
|
|
25
|
+
return /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card, { children: [
|
|
26
|
+
/* @__PURE__ */ jsx(
|
|
27
|
+
CardHeader,
|
|
28
|
+
{
|
|
29
|
+
title,
|
|
30
|
+
style: {
|
|
31
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
32
|
+
color: "#FFFFFF",
|
|
33
|
+
fontSize: "1.5rem",
|
|
34
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxs(
|
|
40
|
+
"span",
|
|
41
|
+
{
|
|
42
|
+
className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
|
|
43
|
+
style: {
|
|
44
|
+
background: tag.color || "#bfbcbb",
|
|
45
|
+
color: "white",
|
|
46
|
+
textShadow: "black 0.2em 0.2em 0.4em"
|
|
47
|
+
},
|
|
48
|
+
children: [
|
|
49
|
+
tag.label,
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
"button",
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
onClick: () => onToggleTag(tag.id),
|
|
55
|
+
className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
|
|
56
|
+
children: "\xD7"
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
tag.id
|
|
62
|
+
)) }),
|
|
63
|
+
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
|
|
64
|
+
Autocomplete,
|
|
65
|
+
{
|
|
66
|
+
options,
|
|
67
|
+
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
68
|
+
(option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
69
|
+
).slice(0, 3),
|
|
70
|
+
value: null,
|
|
71
|
+
inputValue,
|
|
72
|
+
onInputChange: (event, newInputValue) => {
|
|
73
|
+
if (event && event.type === "change") {
|
|
74
|
+
setInputValue(newInputValue);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
onChange: (event, newValue) => {
|
|
78
|
+
if (newValue) {
|
|
79
|
+
onToggleTag(newValue.value);
|
|
80
|
+
}
|
|
81
|
+
setInputValue("");
|
|
82
|
+
},
|
|
83
|
+
slots: { popper: CustomPopper },
|
|
84
|
+
renderInput: (params) => /* @__PURE__ */ jsx(TextField, { ...params, label: "Select Tags" })
|
|
85
|
+
},
|
|
86
|
+
selectedIds.join("-")
|
|
87
|
+
) }) })
|
|
88
|
+
] })
|
|
89
|
+
] }) }) });
|
|
90
|
+
}
|
|
91
|
+
var CustomPopper = (props) => {
|
|
92
|
+
return /* @__PURE__ */ jsx(
|
|
93
|
+
Popper,
|
|
94
|
+
{
|
|
95
|
+
...props,
|
|
96
|
+
modifiers: [
|
|
97
|
+
{
|
|
98
|
+
name: "preventOverflow",
|
|
99
|
+
options: { boundary: "viewport" }
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "offset",
|
|
103
|
+
options: { offset: [0, -10] }
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
placement: "top-start"
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
};
|
|
110
|
+
function PlayerTagsEdit(props) {
|
|
111
|
+
return /* @__PURE__ */ jsx(
|
|
112
|
+
TagEditor,
|
|
113
|
+
{
|
|
114
|
+
title: "Player Tags",
|
|
115
|
+
selectedTags: props.PlayerTags,
|
|
116
|
+
possibleTags: props.possibleTags,
|
|
117
|
+
onToggleTag: props.updatePlayerTags
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export { PlayerTagsEdit };
|
|
123
|
+
//# sourceMappingURL=ProfilePage.mjs.map
|
|
124
|
+
//# sourceMappingURL=ProfilePage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/shared/TagEditor.tsx","../src/components/ProfilePage/PlayerTagsEdit.tsx"],"names":["jsx"],"mappings":"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","file":"ProfilePage.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\nimport TextField from \"@mui/material/TextField\";\nimport type { Tag } from \"@/types/tag\";\n\nexport interface TagEditorProps {\n title?: string;\n selectedTags: Tag[];\n possibleTags: Tag[];\n onToggleTag: (id: number) => void;\n}\n\nexport function TagEditor({\n title = \"Tags\",\n selectedTags,\n possibleTags,\n onToggleTag,\n}: TagEditorProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\n\n const options = useMemo(\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\n [possibleTags]\n );\n\n return (\n <Grid container>\n <Grid size={{ xs: 12 }}>\n <Card>\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 <CardContent>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {selectedTags.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={() => onToggleTag(tag.id)}\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 </div>\n <Grid container spacing={3}>\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\n <Autocomplete\n key={selectedIds.join(\"-\")}\n options={options}\n filterOptions={(availableOptions, state) =>\n availableOptions\n .filter(\n (option) =>\n !selectedIds.includes(option.value) &&\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3)\n }\n value={null}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n if (event && event.type === \"change\") {\n setInputValue(newInputValue);\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n onToggleTag(newValue.value);\n }\n setInputValue(\"\");\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n}\n\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: { boundary: \"viewport\" },\n },\n {\n name: \"offset\",\n options: { offset: [0, -10] },\n },\n ]}\n placement=\"top-start\"\n />\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\nimport { TagEditor } from \"@/components/shared/TagEditor\";\n\nexport default function PlayerTagsEdit(props: {\n PlayerTags: Tag[];\n possibleTags: Tag[];\n updatePlayerTags: (id:number) => void;\n}) {\n return (\n <TagEditor\n title=\"Player Tags\"\n selectedTags={props.PlayerTags}\n possibleTags={props.possibleTags}\n onToggleTag={props.updatePlayerTags}\n />\n );\n}\n"]}
|