@mbpockets/shared-ui 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +681 -0
- package/README.md +85 -0
- package/dist/EventPage/editMode/index.cjs +573 -0
- package/dist/EventPage/editMode/index.cjs.map +1 -0
- package/dist/EventPage/editMode/index.d.cts +5 -0
- package/dist/EventPage/editMode/index.d.ts +5 -0
- package/dist/EventPage/editMode/index.mjs +559 -0
- package/dist/EventPage/editMode/index.mjs.map +1 -0
- package/dist/EventPage/editMode.cjs +573 -0
- package/dist/EventPage/editMode.cjs.map +1 -0
- package/dist/EventPage/editMode.d.cts +5 -0
- package/dist/EventPage/editMode.d.ts +5 -0
- package/dist/EventPage/editMode.mjs +559 -0
- package/dist/EventPage/editMode.mjs.map +1 -0
- package/dist/EventPage/index.cjs +1245 -0
- package/dist/EventPage/index.cjs.map +1 -0
- package/dist/EventPage/index.d.cts +6 -0
- package/dist/EventPage/index.d.ts +6 -0
- package/dist/EventPage/index.mjs +1215 -0
- package/dist/EventPage/index.mjs.map +1 -0
- package/dist/EventPage.cjs +1245 -0
- package/dist/EventPage.cjs.map +1 -0
- package/dist/EventPage.d.cts +42 -0
- package/dist/EventPage.d.ts +42 -0
- package/dist/EventPage.mjs +1215 -0
- package/dist/EventPage.mjs.map +1 -0
- package/dist/PlayerPage/index.cjs +370 -0
- package/dist/PlayerPage/index.cjs.map +1 -0
- package/dist/PlayerPage/index.d.cts +4 -0
- package/dist/PlayerPage/index.d.ts +4 -0
- package/dist/PlayerPage/index.mjs +358 -0
- package/dist/PlayerPage/index.mjs.map +1 -0
- package/dist/PlayerPage.cjs +370 -0
- package/dist/PlayerPage.cjs.map +1 -0
- package/dist/PlayerPage.d.cts +32 -0
- package/dist/PlayerPage.d.ts +32 -0
- package/dist/PlayerPage.mjs +358 -0
- package/dist/PlayerPage.mjs.map +1 -0
- package/dist/ProfilePage/index.cjs +136 -0
- package/dist/ProfilePage/index.cjs.map +1 -0
- package/dist/ProfilePage/index.d.cts +3 -0
- package/dist/ProfilePage/index.d.ts +3 -0
- package/dist/ProfilePage/index.mjs +124 -0
- package/dist/ProfilePage/index.mjs.map +1 -0
- package/dist/ProfilePage.cjs +136 -0
- package/dist/ProfilePage.cjs.map +1 -0
- package/dist/ProfilePage.d.cts +10 -0
- package/dist/ProfilePage.d.ts +10 -0
- package/dist/ProfilePage.mjs +124 -0
- package/dist/ProfilePage.mjs.map +1 -0
- package/dist/SearchPage/Filters/index.cjs +270 -0
- package/dist/SearchPage/Filters/index.cjs.map +1 -0
- package/dist/SearchPage/Filters/index.d.cts +4 -0
- package/dist/SearchPage/Filters/index.d.ts +4 -0
- package/dist/SearchPage/Filters/index.mjs +250 -0
- package/dist/SearchPage/Filters/index.mjs.map +1 -0
- package/dist/SearchPage/Filters.cjs +270 -0
- package/dist/SearchPage/Filters.cjs.map +1 -0
- package/dist/SearchPage/Filters.d.cts +31 -0
- package/dist/SearchPage/Filters.d.ts +31 -0
- package/dist/SearchPage/Filters.mjs +250 -0
- package/dist/SearchPage/Filters.mjs.map +1 -0
- package/dist/SearchPage/Results/index.cjs +226 -0
- package/dist/SearchPage/Results/index.cjs.map +1 -0
- package/dist/SearchPage/Results/index.d.cts +4 -0
- package/dist/SearchPage/Results/index.d.ts +4 -0
- package/dist/SearchPage/Results/index.mjs +212 -0
- package/dist/SearchPage/Results/index.mjs.map +1 -0
- package/dist/SearchPage/Results.cjs +226 -0
- package/dist/SearchPage/Results.cjs.map +1 -0
- package/dist/SearchPage/Results.d.cts +53 -0
- package/dist/SearchPage/Results.d.ts +53 -0
- package/dist/SearchPage/Results.mjs +212 -0
- package/dist/SearchPage/Results.mjs.map +1 -0
- package/dist/SearchPage/index.cjs +737 -0
- package/dist/SearchPage/index.cjs.map +1 -0
- package/dist/SearchPage/index.d.cts +7 -0
- package/dist/SearchPage/index.d.ts +7 -0
- package/dist/SearchPage/index.mjs +695 -0
- package/dist/SearchPage/index.mjs.map +1 -0
- package/dist/SearchPage.cjs +737 -0
- package/dist/SearchPage.cjs.map +1 -0
- package/dist/SearchPage.d.cts +110 -0
- package/dist/SearchPage.d.ts +110 -0
- package/dist/SearchPage.mjs +695 -0
- package/dist/SearchPage.mjs.map +1 -0
- package/dist/TablePage/GameTableProvider/index.cjs +26 -0
- package/dist/TablePage/GameTableProvider/index.cjs.map +1 -0
- package/dist/TablePage/GameTableProvider/index.d.cts +4 -0
- package/dist/TablePage/GameTableProvider/index.d.ts +4 -0
- package/dist/TablePage/GameTableProvider/index.mjs +19 -0
- package/dist/TablePage/GameTableProvider/index.mjs.map +1 -0
- package/dist/TablePage/GameTableProvider.cjs +26 -0
- package/dist/TablePage/GameTableProvider.cjs.map +1 -0
- package/dist/TablePage/GameTableProvider.d.cts +15 -0
- package/dist/TablePage/GameTableProvider.d.ts +15 -0
- package/dist/TablePage/GameTableProvider.mjs +19 -0
- package/dist/TablePage/GameTableProvider.mjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.cjs +83 -0
- package/dist/TablePage/ModalProvider/index.cjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.css +49 -0
- package/dist/TablePage/ModalProvider/index.css.map +1 -0
- package/dist/TablePage/ModalProvider/index.d.cts +3 -0
- package/dist/TablePage/ModalProvider/index.d.ts +3 -0
- package/dist/TablePage/ModalProvider/index.mjs +79 -0
- package/dist/TablePage/ModalProvider/index.mjs.map +1 -0
- package/dist/TablePage/ModalProvider.cjs +83 -0
- package/dist/TablePage/ModalProvider.cjs.map +1 -0
- package/dist/TablePage/ModalProvider.css +49 -0
- package/dist/TablePage/ModalProvider.css.map +1 -0
- package/dist/TablePage/ModalProvider.d.cts +17 -0
- package/dist/TablePage/ModalProvider.d.ts +17 -0
- package/dist/TablePage/ModalProvider.mjs +79 -0
- package/dist/TablePage/ModalProvider.mjs.map +1 -0
- package/dist/TablePage/index.cjs +606 -0
- package/dist/TablePage/index.cjs.map +1 -0
- package/dist/TablePage/index.css +49 -0
- package/dist/TablePage/index.css.map +1 -0
- package/dist/TablePage/index.d.cts +10 -0
- package/dist/TablePage/index.d.ts +10 -0
- package/dist/TablePage/index.mjs +579 -0
- package/dist/TablePage/index.mjs.map +1 -0
- package/dist/TablePage/players/index.cjs +85 -0
- package/dist/TablePage/players/index.cjs.map +1 -0
- package/dist/TablePage/players/index.d.cts +4 -0
- package/dist/TablePage/players/index.d.ts +4 -0
- package/dist/TablePage/players/index.mjs +76 -0
- package/dist/TablePage/players/index.mjs.map +1 -0
- package/dist/TablePage/players.cjs +85 -0
- package/dist/TablePage/players.cjs.map +1 -0
- package/dist/TablePage/players.d.cts +22 -0
- package/dist/TablePage/players.d.ts +22 -0
- package/dist/TablePage/players.mjs +76 -0
- package/dist/TablePage/players.mjs.map +1 -0
- package/dist/TablePage.cjs +606 -0
- package/dist/TablePage.cjs.map +1 -0
- package/dist/TablePage.css +49 -0
- package/dist/TablePage.css.map +1 -0
- package/dist/TablePage.d.cts +54 -0
- package/dist/TablePage.d.ts +54 -0
- package/dist/TablePage.mjs +579 -0
- package/dist/TablePage.mjs.map +1 -0
- package/dist/common/Modal/index.cjs +64 -0
- package/dist/common/Modal/index.cjs.map +1 -0
- package/dist/common/Modal/index.css +49 -0
- package/dist/common/Modal/index.css.map +1 -0
- package/dist/common/Modal/index.d.cts +2 -0
- package/dist/common/Modal/index.d.ts +2 -0
- package/dist/common/Modal/index.mjs +62 -0
- package/dist/common/Modal/index.mjs.map +1 -0
- package/dist/common/Modal.cjs +64 -0
- package/dist/common/Modal.cjs.map +1 -0
- package/dist/common/Modal.css +49 -0
- package/dist/common/Modal.css.map +1 -0
- package/dist/common/Modal.d.cts +9 -0
- package/dist/common/Modal.d.ts +9 -0
- package/dist/common/Modal.mjs +62 -0
- package/dist/common/Modal.mjs.map +1 -0
- package/dist/common/index.cjs +210 -0
- package/dist/common/index.cjs.map +1 -0
- package/dist/common/index.css +49 -0
- package/dist/common/index.css.map +1 -0
- package/dist/common/index.d.cts +4 -0
- package/dist/common/index.d.ts +4 -0
- package/dist/common/index.mjs +194 -0
- package/dist/common/index.mjs.map +1 -0
- package/dist/common.cjs +210 -0
- package/dist/common.cjs.map +1 -0
- package/dist/common.css +49 -0
- package/dist/common.css.map +1 -0
- package/dist/common.d.cts +28 -0
- package/dist/common.d.ts +28 -0
- package/dist/common.mjs +194 -0
- package/dist/common.mjs.map +1 -0
- package/dist/index-D7WHhl3Q.d.ts +64 -0
- package/dist/index-DC0kK3aC.d.cts +64 -0
- package/dist/index.cjs +2608 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +49 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +20 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.mjs +2529 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mocks/EventDB.cjs +171 -0
- package/dist/mocks/EventDB.cjs.map +1 -0
- package/dist/mocks/EventDB.d.cts +6 -0
- package/dist/mocks/EventDB.d.ts +6 -0
- package/dist/mocks/EventDB.mjs +169 -0
- package/dist/mocks/EventDB.mjs.map +1 -0
- package/dist/mocks/Events.cjs +59 -0
- package/dist/mocks/Events.cjs.map +1 -0
- package/dist/mocks/Events.d.cts +13 -0
- package/dist/mocks/Events.d.ts +13 -0
- package/dist/mocks/Events.mjs +57 -0
- package/dist/mocks/Events.mjs.map +1 -0
- package/dist/mocks/Players.cjs +75 -0
- package/dist/mocks/Players.cjs.map +1 -0
- package/dist/mocks/Players.d.cts +15 -0
- package/dist/mocks/Players.d.ts +15 -0
- package/dist/mocks/Players.mjs +73 -0
- package/dist/mocks/Players.mjs.map +1 -0
- package/dist/mocks/SearchResults.cjs +143 -0
- package/dist/mocks/SearchResults.cjs.map +1 -0
- package/dist/mocks/SearchResults.d.cts +30 -0
- package/dist/mocks/SearchResults.d.ts +30 -0
- package/dist/mocks/SearchResults.mjs +137 -0
- package/dist/mocks/SearchResults.mjs.map +1 -0
- package/dist/mocks/Tables.cjs +133 -0
- package/dist/mocks/Tables.cjs.map +1 -0
- package/dist/mocks/Tables.d.cts +38 -0
- package/dist/mocks/Tables.d.ts +38 -0
- package/dist/mocks/Tables.mjs +131 -0
- package/dist/mocks/Tables.mjs.map +1 -0
- package/dist/mocks/Tags.cjs +142 -0
- package/dist/mocks/Tags.cjs.map +1 -0
- package/dist/mocks/Tags.d.cts +5 -0
- package/dist/mocks/Tags.d.ts +5 -0
- package/dist/mocks/Tags.mjs +140 -0
- package/dist/mocks/Tags.mjs.map +1 -0
- package/dist/mocks/index.cjs +566 -0
- package/dist/mocks/index.cjs.map +1 -0
- package/dist/mocks/index.d.cts +8 -0
- package/dist/mocks/index.d.ts +8 -0
- package/dist/mocks/index.mjs +555 -0
- package/dist/mocks/index.mjs.map +1 -0
- package/dist/mocks.cjs +566 -0
- package/dist/mocks.cjs.map +1 -0
- package/dist/mocks.d.cts +8 -0
- package/dist/mocks.d.ts +8 -0
- package/dist/mocks.mjs +555 -0
- package/dist/mocks.mjs.map +1 -0
- package/dist/types/event.cjs +4 -0
- package/dist/types/event.cjs.map +1 -0
- package/dist/types/event.d.cts +37 -0
- package/dist/types/event.d.ts +37 -0
- package/dist/types/event.mjs +3 -0
- package/dist/types/event.mjs.map +1 -0
- package/dist/types/index.cjs +4 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +6 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.mjs +3 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/player.cjs +4 -0
- package/dist/types/player.cjs.map +1 -0
- package/dist/types/player.d.cts +20 -0
- package/dist/types/player.d.ts +20 -0
- package/dist/types/player.mjs +3 -0
- package/dist/types/player.mjs.map +1 -0
- package/dist/types/search.cjs +4 -0
- package/dist/types/search.cjs.map +1 -0
- package/dist/types/search.d.cts +20 -0
- package/dist/types/search.d.ts +20 -0
- package/dist/types/search.mjs +3 -0
- package/dist/types/search.mjs.map +1 -0
- package/dist/types/table.cjs +4 -0
- package/dist/types/table.cjs.map +1 -0
- package/dist/types/table.d.cts +21 -0
- package/dist/types/table.d.ts +21 -0
- package/dist/types/table.mjs +3 -0
- package/dist/types/table.mjs.map +1 -0
- package/dist/types/tables.cjs +4 -0
- package/dist/types/tables.cjs.map +1 -0
- package/dist/types/tables.d.cts +21 -0
- package/dist/types/tables.d.ts +21 -0
- package/dist/types/tables.mjs +3 -0
- package/dist/types/tables.mjs.map +1 -0
- package/dist/types/tag.cjs +4 -0
- package/dist/types/tag.cjs.map +1 -0
- package/dist/types/tag.d.cts +14 -0
- package/dist/types/tag.d.ts +14 -0
- package/dist/types/tag.mjs +3 -0
- package/dist/types/tag.mjs.map +1 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +6 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/EventPage/editMode/EventEditContext.tsx","../../src/components/shared/TagComponents.tsx","../../src/components/EventPage/editMode/EventBannerEdit.tsx","../../src/components/EventPage/EventBasicInfo.tsx","../../src/components/EventPage/editMode/EventBasicInfoEdit.tsx"],"names":["jsx","useState","Card","jsxs","CardContent","Box","Tooltip","IconButton","CircularProgress","Typography","Grid","TextField"],"mappings":"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","file":"editMode.mjs","sourcesContent":["\"use client\"\r\nimport React, { createContext, useContext, ReactNode, useState, useEffect } from \"react\";\r\nimport { EventEditContextValue, EventDB } from \"@/types/event\";\r\n\r\ntype ExtendedEventEditContextValue = EventEditContextValue & {\r\n event: EventDB | null;\r\n};\r\n\r\n/**\r\n * Default Values for stability\r\n */\r\nconst defaultValue: ExtendedEventEditContextValue = {\r\n isOwner: false,\r\n updateEvent: async () => false,\r\n updateImages: () => {},\r\n event: null,\r\n}\r\n\r\n/**\r\n * Default call (safe fallback)\r\n * Components using this without a provider will behave as non-owner.\r\n */\r\nconst EventEditContext = createContext<ExtendedEventEditContextValue>(defaultValue);\r\n\r\n/**\r\n * Provider props\r\n */\r\ntype EventEditProviderProps = {\r\n value?: Partial<EventEditContextValue>;\r\n initialEvent: EventDB;\r\n children: ReactNode;\r\n};\r\n\r\n/**\r\n * Provider component\r\n */\r\nexport function EventEditProvider({\r\n value,\r\n initialEvent,\r\n children,\r\n }: EventEditProviderProps) {\r\n const [event, setEvent] = useState<EventDB>(initialEvent);\r\n\r\n // Update internal state if initialEvent changes (e.g. from parent fetch)\r\n useEffect(() => {\r\n setEvent(initialEvent);\r\n }, [initialEvent]);\r\n\r\n const handleUpdateEvent = async (patch: Partial<EventDB>) => {\r\n if (value?.updateEvent) {\r\n const result = value.updateEvent(patch);\r\n \r\n // Handle both Promise<boolean> and void/boolean return\r\n if (result instanceof Promise) {\r\n const success = await result;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n } else {\r\n // If it's a boolean, use it. If void, assume true.\r\n const success = result === false ? false : true;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * automatically fill in default values if data is missing or incomplete\r\n */\r\n const mergedValue: ExtendedEventEditContextValue = {\r\n ...defaultValue,\r\n ...value,\r\n event,\r\n updateEvent: handleUpdateEvent,\r\n }\r\n\r\n return (\r\n <EventEditContext.Provider value={mergedValue}>\r\n {children}\r\n </EventEditContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook for consuming context\r\n */\r\nexport function useEventEdit(): ExtendedEventEditContextValue {\r\n const context = useContext(EventEditContext);\r\n\r\n // Optional guard (useful during development)\r\n if (!context) {\r\n throw new Error(\"useEventEdit must be used within an EventEditProvider\");\r\n }\r\n\r\n return context;\r\n}","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\n\nexport function generateTagsDisplay(tag: Tag) {\n return (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n marginTop:\"6px\",\n marginRight: \"6px\",\n marginBottom: \"6px\",\n background: tag.color || '#bfbcbb',\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\"\n }}\n >\n {tag.label}\n </span>\n )\n}\n\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[]) {\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\n const validTags = ids\n .map((id) => legalTags.find((tag) => tag.id === id))\n .filter((tag): tag is Tag => Boolean(tag));\n\n return validTags.map((tag) => generateTagsDisplay(tag));\n}\n","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { useEventEdit } from \"./EventEditContext\";\r\nimport type { EventBannerEditPayload } from \"../EventBanner\";\r\nimport { \r\n Box, \r\n Button, \r\n Grid, \r\n TextField, \r\n IconButton, \r\n Tooltip, \r\n Dialog, \r\n DialogTitle, \r\n DialogContent, \r\n DialogActions,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport ColorizeIcon from \"@mui/icons-material/Colorize\";\r\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\r\n\r\ntype EventBannerEditProps = {\r\n initialValue: EventBannerEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBannerEditPayload>) => Promise<void> | void;\r\n};\r\n\r\ntype LinkEditState = {\r\n index: number;\r\n text: string;\r\n url: string;\r\n} | null;\r\n\r\nexport default function EventBannerEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBannerEditProps) {\r\n const { updateImages } = useEventEdit();\r\n const [title, setTitle] = useState(initialValue.title);\r\n const [bannerColor, setBannerColor] = useState(initialValue.bannerColor || \"\");\r\n const [desktopBanner, setDesktopBanner] = useState(initialValue.bannerUrl.desktop);\r\n const [mobileBanner, setMobileBanner] = useState(initialValue.bannerUrl.mobile || \"\");\r\n const [links, setLinks] = useState(initialValue.links);\r\n const [linkToEdit, setLinkToEdit] = useState<LinkEditState>(null);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBannerEditPayload> = {};\r\n\r\n if (title !== initialValue.title) {\r\n patch.title = title;\r\n }\r\n\r\n const currentBannerColor = bannerColor || undefined;\r\n const initialBannerColor = initialValue.bannerColor || undefined;\r\n if (currentBannerColor !== initialBannerColor) {\r\n patch.bannerColor = currentBannerColor;\r\n }\r\n\r\n const currentMobile = mobileBanner || undefined;\r\n const initialMobile = initialValue.bannerUrl.mobile || undefined;\r\n if (desktopBanner !== initialValue.bannerUrl.desktop || currentMobile !== initialMobile) {\r\n patch.bannerUrl = {\r\n desktop: desktopBanner,\r\n mobile: currentMobile,\r\n };\r\n }\r\n\r\n // Deep comparison for links\r\n if (JSON.stringify(links) !== JSON.stringify(initialValue.links)) {\r\n patch.links = links;\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel(); // Nothing changed\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save banner changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n const removeLink = (index: number) => {\r\n setLinks(links.filter((_, i) => i !== index));\r\n };\r\n\r\n const openEditLink = (index: number) => {\r\n setLinkToEdit({\r\n index,\r\n text: links[index].text,\r\n url: links[index].url\r\n });\r\n };\r\n\r\n const saveEditedLink = () => {\r\n if (linkToEdit) {\r\n const newLinks = [...links];\r\n if (linkToEdit.index === -1) {\r\n newLinks.push({ text: linkToEdit.text, url: linkToEdit.url });\r\n } else {\r\n newLinks[linkToEdit.index] = { text: linkToEdit.text, url: linkToEdit.url };\r\n }\r\n setLinks(newLinks);\r\n setLinkToEdit(null);\r\n }\r\n };\r\n\r\n const handleEyeDropper = async () => {\r\n if (!(window as any).EyeDropper) {\r\n alert(\"EyeDropper API is not supported in this browser\");\r\n return;\r\n }\r\n const eyeDropper = new (window as any).EyeDropper();\r\n try {\r\n const result = await eyeDropper.open();\r\n setBannerColor(result.sRGBHex);\r\n } catch (e) {\r\n console.log(\"EyeDropper cancelled or failed\", e);\r\n }\r\n };\r\n\r\n return (\r\n <Box sx={{ position: 'relative', width: '100%' }}>\r\n <Grid\r\n sx={{\r\n background: backgroundColor,\r\n paddingTop: \"8px\",\r\n position: 'relative',\r\n border: '2px dashed rgba(255,255,255,0.5)',\r\n borderRadius: 1\r\n }}\r\n >\r\n {/* SETTINGS OVERLAY */}\r\n <Box sx={{ \r\n position: 'absolute', \r\n top: 8, \r\n left: 8, \r\n zIndex: 10, \r\n display: 'flex', \r\n flexDirection: 'column', \r\n gap: 1,\r\n bgcolor: 'rgba(0,0,0,0.5)',\r\n p: 1,\r\n borderRadius: 1,\r\n width: '300px'\r\n }}>\r\n <TextField\r\n label=\"Title\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n sx={{ input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <TextField\r\n label=\"Banner Color\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={bannerColor}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n placeholder=\"#HEX or linear-gradient(...)\"\r\n sx={{ flex: 1, input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Tooltip title=\"Eye Dropper\">\r\n <IconButton \r\n size=\"small\" \r\n onClick={handleEyeDropper}\r\n sx={{ color: 'white', bgcolor: 'rgba(255,255,255,0.1)', '&:hover': { bgcolor: 'rgba(255,255,255,0.2)' } }}\r\n >\r\n <ColorizeIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n <input\r\n type=\"color\"\r\n value={bannerColor.startsWith('#') ? bannerColor : '#1976d2'}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n style={{ width: '40px', height: '40px', padding: 0, border: 'none', background: 'transparent', cursor: 'pointer' }}\r\n />\r\n </Box>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button \r\n variant=\"contained\" \r\n size=\"small\" \r\n fullWidth \r\n onClick={updateImages}\r\n >\r\n Update Images\r\n </Button>\r\n </Box>\r\n </Box>\r\n\r\n {/* VISUAL PREVIEW */}\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n opacity: 0.8\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={desktopBanner}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n }}\r\n />\r\n </Box>\r\n\r\n <Grid\r\n display=\"flex\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n paddingTop=\"3px\"\r\n paddingBottom=\"3px\"\r\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\r\n >\r\n {/* Placeholder for Stats (not editable here as per instructions) */}\r\n <Box sx={{ px: 1.5, py: 0.5, color: \"rgba(255,255,255,0.5)\", bgcolor: \"rgba(0,0,0,0.4)\", borderRadius: 2, border: \"1px dashed rgba(255,255,255,0.2)\" }}>\r\n Stats Placeholder\r\n </Box>\r\n\r\n {generateTagsDisplay(initialValue.eventTag)}\r\n\r\n {links.map((link, index) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n }}\r\n >\r\n {link.text}\r\n <Box sx={{ ml: 1, display: 'flex' }}>\r\n <Tooltip title=\"Edit Link\">\r\n <IconButton size=\"small\" onClick={() => openEditLink(index)} sx={{ color: 'white', p: 0.2 }}>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Remove Link\">\r\n <IconButton size=\"small\" onClick={() => removeLink(index)} sx={{ color: 'error.light', p: 0.2 }}>\r\n <DeleteIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n ))}\r\n\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n startIcon={<AddIcon />}\r\n onClick={() => setLinkToEdit({ index: -1, text: \"\", url: \"\" })}\r\n sx={{\r\n color: 'white',\r\n borderColor: 'rgba(255,255,255,0.5)',\r\n borderRadius: 2,\r\n '&:hover': { borderColor: 'white', bgcolor: 'rgba(255,255,255,0.1)' }\r\n }}\r\n >\r\n Add Link\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n\r\n {/* ACTION BUTTONS */}\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 2, mt: 2 }}>\r\n <Button onClick={onCancel} color=\"inherit\" disabled={isSaving}>Cancel</Button>\r\n <Button \r\n onClick={handleSave} \r\n variant=\"contained\" \r\n color=\"primary\" \r\n disabled={isSaving}\r\n startIcon={isSaving ? <CircularProgress size={20} color=\"inherit\" /> : null}\r\n >\r\n {isSaving ? \"Saving...\" : \"Save Changes\"}\r\n </Button>\r\n </Box>\r\n\r\n {/* LINK EDIT DIALOG */}\r\n <Dialog open={linkToEdit !== null} onClose={() => setLinkToEdit(null)}>\r\n <DialogTitle>{linkToEdit?.index === -1 ? \"Add Link\" : \"Edit Link\"}</DialogTitle>\r\n <DialogContent>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1, width: '400px' }}>\r\n <TextField\r\n label=\"Link Text\"\r\n fullWidth\r\n value={linkToEdit?.text || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, text: e.target.value } : null)}\r\n />\r\n <TextField\r\n label=\"Link URL\"\r\n fullWidth\r\n value={linkToEdit?.url || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, url: e.target.value } : null)}\r\n />\r\n </Box>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => setLinkToEdit(null)}>Cancel</Button>\r\n <Button onClick={saveEditedLink} variant=\"contained\">Confirm</Button>\r\n </DialogActions>\r\n </Dialog>\r\n </Box>\r\n );\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport {Card, CardContent, Typography, Button} from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { useEventEdit } from \"./editMode/EventEditContext\";\r\nimport EventBasicInfoEdit from \"./editMode/EventBasicInfoEdit\";\r\n\r\nexport type EventBasicInfoProps = {\r\n locationId: string,\r\n description?: string,\r\n startingDate?: Date | string,\r\n endingDate?: Date | string,\r\n timeInfo?: string,\r\n timezone?: string\r\n}\r\n\r\nexport const CANDIDATE_TIMEZONES = [\r\n \"America/New_York\",\r\n \"America/Chicago\",\r\n \"America/Denver\",\r\n \"America/Los_Angeles\",\r\n \"America/Anchorage\",\r\n \"America/Adak\",\r\n \"Pacific/Honolulu\",\r\n \"UTC\"\r\n];\r\n\r\nexport default function EventBasicInfo(props: EventBasicInfoProps) {\r\n const { isOwner, updateEvent, event } = useEventEdit();\r\n const [isEditing, setIsEditing] = useState(false);\r\n\r\n // Fallback to context if props are not provided\r\n const description = props.description ?? event?.description ?? \"\";\r\n const startingDate = props.startingDate ?? event?.startingDate;\r\n const endingDate = props.endingDate ?? event?.endingDate;\r\n const timeInfo = props.timeInfo ?? event?.date ?? \"\";\r\n const timezone = props.timezone ?? event?.timezone ?? \"UTC\";\r\n\r\n if (isEditing) {\r\n return (\r\n <EventBasicInfoEdit\r\n initialValue={{\r\n description: description,\r\n startingDate: typeof startingDate === 'string' ? startingDate : startingDate?.toISOString(),\r\n endingDate: typeof endingDate === 'string' ? endingDate : endingDate?.toISOString(),\r\n date: timeInfo,\r\n timezone: timezone\r\n }}\r\n onCancel={() => setIsEditing(false)}\r\n onSave={async (payload) => {\r\n const success = await updateEvent(payload);\r\n if (success) {\r\n setIsEditing(false);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <EventBasicInfoView\r\n {...props}\r\n description={description}\r\n startingDate={startingDate}\r\n endingDate={endingDate}\r\n timeInfo={timeInfo}\r\n timezone={timezone}\r\n isOwner={isOwner}\r\n onEdit={() => setIsEditing(true)}\r\n />\r\n );\r\n}\r\n\r\ntype EventBasicInfoViewProps = {\r\n locationId: string;\r\n description: string;\r\n startingDate?: Date | string;\r\n endingDate?: Date | string;\r\n timeInfo: string;\r\n timezone: string;\r\n isOwner: boolean;\r\n onEdit: () => void;\r\n};\r\n\r\nfunction EventBasicInfoView({description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit} : EventBasicInfoViewProps) {\r\n return (\r\n <Grid sx={{ position: 'relative' }}>\r\n <Card style={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n }}>\r\n <CardContent>\r\n {isOwner && (\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\r\n <Button size=\"small\" onClick={onEdit} variant=\"outlined\">Edit</Button>\r\n </Box>\r\n )}\r\n {generateTimeInfo(timeInfo, timezone || \"UTC\", startingDate, endingDate)}\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <Typography sx={{whiteSpace: 'pre-wrap'}} paddingTop={1}>\r\n {description}\r\n </Typography>\r\n {getLocation(locationId)}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n )\r\n}\r\n\r\n\r\nconst generateTimeInfo = function (timeInfo: string, timezone: string, startingDate?: Date | string, endingDate?: Date | string) {\r\n\r\n const formatDateTime = (dateInput: Date | string) => {\r\n const d = typeof dateInput === 'string' ? new Date(dateInput) : dateInput;\r\n if (!d || isNaN(d.getTime())) return \"\";\r\n\r\n try {\r\n return new Intl.DateTimeFormat('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric',\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone: timezone,\r\n timeZoneName: 'shortGeneric'\r\n }).format(d).replace(',', ' @');\r\n } catch (e) {\r\n // Fallback for invalid timezones\r\n return d.toUTCString();\r\n }\r\n }\r\n\r\n let rangeText: string | null = null;\r\n if (startingDate && endingDate) {\r\n rangeText = `From ${formatDateTime(startingDate)}\\nUntil ${formatDateTime(endingDate)}`;\r\n } else if (startingDate) {\r\n rangeText = `starting ${formatDateTime(startingDate)}`;\r\n } else if (endingDate) {\r\n rangeText = `until ${formatDateTime(endingDate)}`;\r\n }\r\n\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n {rangeText && (\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {rangeText}\r\n </Typography>\r\n )}\r\n {timeInfo && (\r\n <Box sx={{ mt: 1 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <Typography variant={\"body1\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {timeInfo}\r\n </Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n )\r\n}\r\n\r\n\r\n/*\r\n DUMMY FUNCTIONS -- these relate heavily to sensitive data, so the functions below are simply placeholders\r\n */\r\n\r\nconst getLocation = function(locationId: string) {\r\n return (<Box sx={{\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n mt: 2\r\n }}>\r\n Location Data goes here\r\n </Box>\r\n )\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { \r\n Box, \r\n Button, \r\n TextField, \r\n Grid, \r\n Card, \r\n CardContent, \r\n Typography, \r\n IconButton, \r\n Tooltip, \r\n Select, \r\n MenuItem, \r\n FormControl, \r\n InputLabel,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport CancelIcon from \"@mui/icons-material/Cancel\";\r\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\r\nimport { CANDIDATE_TIMEZONES } from \"../EventBasicInfo\";\r\n\r\nexport type EventBasicInfoEditPayload = {\r\n description: string;\r\n startingDate?: string;\r\n endingDate?: string;\r\n date: string; // timeInfo\r\n timezone: string;\r\n};\r\n\r\ntype EventBasicInfoEditProps = {\r\n initialValue: EventBasicInfoEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBasicInfoEditPayload>) => Promise<void> | void;\r\n};\r\n\r\nexport default function EventBasicInfoEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBasicInfoEditProps) {\r\n\r\n // Helper to get YYYY-MM-DDThh:mm wall time for a specific timezone\r\n const toWallTimeISO = (dateInput: string | undefined, timeZone: string) => {\r\n if (!dateInput) return \"\";\r\n const d = new Date(dateInput);\r\n if (isNaN(d.getTime())) return \"\";\r\n\r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric', month: '2-digit', day: '2-digit',\r\n hour: '2-digit', minute: '2-digit', hour12: false,\r\n timeZone: timeZone\r\n }).formatToParts(d);\r\n \r\n const f = (type: string) => parts.find(p => p.type === type)?.value;\r\n // Some environments might return 24 for hour 0 if hour12 is false, but usually 00.\r\n // Also handle the order of parts.\r\n const year = f('year');\r\n const month = f('month');\r\n const day = f('day');\r\n let hour = f('hour');\r\n if (hour === '24') hour = '00';\r\n const minute = f('minute');\r\n\r\n return `${year}-${month}-${day}T${hour}:${minute}`;\r\n };\r\n\r\n // Helper to combine wall time + timezone into UTC ISO string\r\n const toUTCISOString = (wallTime: string, timeZone: string) => {\r\n if (!wallTime) return undefined;\r\n \r\n // We need to find the offset for this wall time in the target timezone.\r\n const d = new Date(wallTime + \":00Z\"); \r\n \r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n timeZone: timeZone,\r\n timeZoneName: 'longOffset'\r\n }).formatToParts(d);\r\n \r\n const offsetPart = parts.find(p => p.type === 'timeZoneName')?.value || \"GMT\";\r\n const offset = offsetPart.replace('GMT', ''); \r\n \r\n const isoWithOffset = `${wallTime}:00${offset || \"+00:00\"}`;\r\n return new Date(isoWithOffset).toISOString();\r\n };\r\n\r\n const [description, setDescription] = useState(initialValue.description);\r\n const [timezone, setTimezone] = useState(initialValue.timezone);\r\n const [startingDate, setStartingDate] = useState(toWallTimeISO(initialValue.startingDate, initialValue.timezone));\r\n const [endingDate, setEndingDate] = useState(toWallTimeISO(initialValue.endingDate, initialValue.timezone));\r\n const [timeInfo, setTimeInfo] = useState(initialValue.date);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBasicInfoEditPayload> = {};\r\n\r\n if (description !== initialValue.description) patch.description = description;\r\n if (timeInfo !== initialValue.date) patch.date = timeInfo;\r\n if (timezone !== initialValue.timezone) patch.timezone = timezone;\r\n\r\n if (startingDate !== toWallTimeISO(initialValue.startingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.startingDate = toUTCISOString(startingDate, timezone);\r\n }\r\n\r\n if (endingDate !== toWallTimeISO(initialValue.endingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.endingDate = toUTCISOString(endingDate, timezone);\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel();\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save basic info changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n return (\r\n <Card sx={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n border: '2px dashed rgba(25,118,210,0.5)',\r\n width: '100%'\r\n }}>\r\n <CardContent sx={{ position: 'relative' }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 1, gap: 1 }}>\r\n <Tooltip title=\"Cancel\">\r\n <IconButton size=\"small\" onClick={onCancel} color=\"error\" disabled={isSaving}>\r\n <CancelIcon />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Apply Changes\">\r\n <IconButton size=\"small\" onClick={handleSave} color=\"primary\" disabled={isSaving}>\r\n {isSaving ? <CircularProgress size={24} /> : <CheckCircleIcon />}\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{ mb: 1 }}>\r\n Event Dates & Times:\r\n </Typography>\r\n <Grid container spacing={2}>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Starting Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={startingDate}\r\n onChange={(e) => setStartingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Ending Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={endingDate}\r\n onChange={(e) => setEndingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <FormControl fullWidth size=\"small\">\r\n <InputLabel>Display Timezone</InputLabel>\r\n <Select\r\n label=\"Display Timezone\"\r\n value={timezone}\r\n onChange={(e) => setTimezone(e.target.value)}\r\n >\r\n {CANDIDATE_TIMEZONES.map(tz => (\r\n <MenuItem key={tz} value={tz}>{tz}</MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n placeholder=\"e.g. Mon-Fri 9am-5pm\"\r\n value={timeInfo}\r\n onChange={(e) => setTimeInfo(e.target.value)}\r\n sx={{ mt: 1 }}\r\n />\r\n </Box>\r\n </Box>\r\n\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n sx={{\r\n paddingTop: 1,\r\n '& .MuiInputBase-root': {\r\n lineHeight: 1.5,\r\n whiteSpace: 'pre-wrap'\r\n }\r\n }}\r\n />\r\n\r\n <Box sx={{\r\n mt: 2,\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n color: 'rgba(0,0,0,0.5)',\r\n border: '1px dashed rgba(0,0,0,0.2)'\r\n }}>\r\n Location Data (Not Editable)\r\n </Box>\r\n </CardContent>\r\n </Card>\r\n );\r\n}\r\n"]}
|