{"version":3,"file":"static/js/66346.2b9b0414.chunk.js","mappings":"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","sources":["templates/marketing/component/section/titles/getCroppedImg.js","templates/marketing/component/section/titles/title_form.jsx"],"sourcesContent":["import React from 'react';\n// getCroppedImg.js\nexport default async function getCroppedImg(imageSrc, pixelCrop) {\n    const image = new Image();\n    image.src = imageSrc;\n    const canvas = document.createElement('canvas');\n    const ctx = canvas.getContext('2d');\n\n    canvas.width = pixelCrop.width;\n    canvas.height = pixelCrop.height;\n    ctx.drawImage(\n        image,\n        pixelCrop.x,\n        pixelCrop.y,\n        pixelCrop.width,\n        pixelCrop.height,\n        0,\n        0,\n        pixelCrop.width,\n        pixelCrop.height\n    );\n\n    return new Promise((resolve, reject) => {\n        canvas.toBlob(blob => {\n            if (!blob) {\n                reject(new Error('Canvas is empty'));\n                return;\n            }\n            blob.name = 'newFile.jpeg';\n            window.URL.revokeObjectURL(blob);\n            resolve(blob);\n        }, 'image/jpeg');\n    });\n}\n","import React, { useState, useCallback, useEffect } from 'react';\nimport Glitch from 'glitch-javascript-sdk';\nimport Danger from '../../alerts/Danger';\nimport Data from '../../../../../util/Data';\nimport Cropper from 'react-easy-crop';\nimport getCroppedImg from './getCroppedImg'; // Helper function you'll create to handle cropping\nimport RequiredAsterisk from '../../form/required_asterisk';\nimport Wysiwyg from '../../form/wysiwyg';\nimport Select from '../../form/select'; // Assuming you have a Select component\nimport Navigate from '../../../../../util/Navigate';\nimport { ProgressBar } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\n\nconst GameTitleForm = ({\n  // Main props\n  gameTitle,\n  campaignData,\n  setGameTitle,\n\n  // Image upload/crop props\n  onMainImageUpdate,\n  onBannerImageUpdate,\n  setMainImageBlob,\n  setBannerImageBlob,\n\n  // Possibly an external object from AI or external store\n  externalGameData,\n\n  // Form errors\n  errors,\n\n  // Toggles for extra fields\n  showPressKit,\n  showPlayTest,\n  requireCommunity = false,\n  isCreate,\n  editorMode = 'advanced',\n\n  // Communities list if needed\n  communities = [],\n\n  // For controlling pivot media\n  onMediaIdsUpdate,        // callback to pass pending/removed IDs to parent\n  currentMediaFiles = [],  // already-associated media passed from parent\n  setTmpMediaFiles = null,  // an optional way to store media in parent\n  setOrderOfMediaFiles = null //For when the media files or re-order, the parent should get the new order\n\n}) => {\n\n  const [showAdditionalInfo, setShowAdditionalInfo] = useState(false);\n\n  // Local state for main & banner images (raw data used for cropping)\n  const [mainImage, setMainImage] = useState(null);\n  const [bannerImage, setBannerImage] = useState(null);\n\n  // Crop-related state\n  const [cropMain, setCropMain] = useState({ x: 0, y: 0 });\n  const [cropBanner, setCropBanner] = useState({ x: 0, y: 0 });\n  const [zoomMain, setZoomMain] = useState(1);\n  const [zoomBanner, setZoomBanner] = useState(1);\n  const [croppedAreaPixelsMain, setCroppedAreaPixelsMain] = useState(null);\n  const [croppedAreaPixelsBanner, setCroppedAreaPixelsBanner] = useState(null);\n\n  // Once cropped images are generated, we store them as base64 or object URLs\n  const [croppedImageSrc, setCroppedImageSrc] = useState(null);\n  const [croppedBannerImageSrc, setBannerCroppedImageSrc] = useState(null);\n\n  // Whether to show the cropping modals\n  const [showMainCropper, setShowMainCropper] = useState(false);\n  const [showBannerCropper, setShowBannerCropper] = useState(false);\n\n  // If reusing a past title\n  const [selectedPastTitleId, setSelectedPastTitleId] = useState('');\n\n  // The array of media files for drag-and-drop\n  const [mediaFiles, setMediaFiles] = useState(currentMediaFiles || []);\n\n  // Track upload progress by file name\n  const [uploadProgress, setUploadProgress] = useState({});\n\n  // If you want a modal to show more media details (unused here)\n  const [showMediaModal, setShowMediaModal] = useState(false);\n  const [selectedFile, setSelectedFile] = useState(null);\n\n  // Keep track of which media IDs we have added or removed (if you still need that approach)\n  const [pendingMediaIds, setPendingMediaIds] = useState([]);\n  const [removedMediaIds, setRemovedMediaIds] = useState([]);\n\n  // We might fetch admin titles if needed\n  const [adminTitles, setAdminTitles] = useState([]);\n\n  // Constants to identify promotion types, etc.\n  const PROMOTION_TYPE_GAME = 0;\n  const PROMOTION_TYPE_EVENT = 1;\n\n  // A sample set of currency choices\n  const currencies = [\n    { code: 'USD', name: 'US Dollar' },\n    { code: 'EUR', name: 'Euro' },\n    { code: 'GBP', name: 'British Pound' },\n    { code: 'JPY', name: 'Japanese Yen' },\n    { code: 'AUD', name: 'Australian Dollar' },\n    { code: 'CAD', name: 'Canadian Dollar' },\n    { code: 'CHF', name: 'Swiss Franc' },\n    { code: 'CNY', name: 'Chinese Yuan' },\n    { code: 'SEK', name: 'Swedish Krona' },\n    { code: 'NZD', name: 'New Zealand Dollar' },\n    { code: 'MXN', name: 'Mexican Peso' },\n    { code: 'SGD', name: 'Singapore Dollar' },\n    { code: 'HKD', name: 'Hong Kong Dollar' },\n    { code: 'NOK', name: 'Norwegian Krone' },\n    { code: 'KRW', name: 'South Korean Won' },\n    { code: 'TRY', name: 'Turkish Lira' },\n    { code: 'RUB', name: 'Russian Ruble' },\n    { code: 'INR', name: 'Indian Rupee' },\n    { code: 'BRL', name: 'Brazilian Real' },\n    { code: 'ZAR', name: 'South African Rand' },\n    { code: 'PLN', name: 'Polish Zloty' },\n    { code: 'DKK', name: 'Danish Krone' },\n    { code: 'TWD', name: 'New Taiwan Dollar' },\n    { code: 'THB', name: 'Thai Baht' },\n    { code: 'MYR', name: 'Malaysian Ringgit' },\n    { code: 'IDR', name: 'Indonesian Rupiah' },\n    { code: 'PHP', name: 'Philippine Peso' },\n    { code: 'VND', name: 'Vietnamese Dong' },\n    { code: 'EGP', name: 'Egyptian Pound' },\n    { code: 'AED', name: 'United Arab Emirates Dirham' },\n  ];\n\n  // On mount, if parent gave us currentMediaFiles, set them as pending\n  useEffect(() => {\n    if (currentMediaFiles && currentMediaFiles.length > 0) {\n      const ids = currentMediaFiles.map((media) => media.id);\n      setPendingMediaIds(ids);\n    }\n    console.log(\"Setting Current media files.\");\n  }, [currentMediaFiles]);\n\n  // If we have externalGameData with images\n  useEffect(() => {\n    if (externalGameData?.header_image) {\n      fetchImage(\n        externalGameData.header_image,\n        setMainImage,\n        setCropMain,\n        setZoomMain,\n        setShowMainCropper\n      );\n    }\n    if (externalGameData?.capsule_image) {\n      fetchImage(\n        externalGameData.capsule_image,\n        setBannerImage,\n        setCropBanner,\n        setZoomBanner,\n        setShowBannerCropper\n      );\n    }\n\n    // Example: fetch admin titles if needed\n    Glitch.api.Titles.list({ is_admin: true })\n      .then(response => {\n        setAdminTitles(response.data.data);\n      })\n      .catch(error => {\n        console.error('Failed to fetch admin titles:', error);\n      });\n  }, [externalGameData]);\n\n  // If we have an existing gameTitle with images, set cropped placeholders\n  useEffect(() => {\n    if (gameTitle) {\n      if (gameTitle.image_main) {\n        setCroppedImageSrc(gameTitle.image_main);\n      }\n      if (gameTitle.image_banner) {\n        setBannerCroppedImageSrc(gameTitle.image_banner);\n      }\n    }\n  }, [gameTitle]);\n\n  // Drag-and-drop reorder logic\n  const onDragEnd = (result) => {\n    if (!result.destination) return;\n\n    const items = Array.from(mediaFiles);\n    // remove the dragged item\n    const [reorderedItem] = items.splice(result.source.index, 1);\n    // re-insert it in the new position\n    items.splice(result.destination.index, 0, reorderedItem);\n\n    // Reassign order in local state\n    items.forEach((media, idx) => {\n      media.order = idx;\n    });\n\n    console.log(\"Items\", items);\n\n    if(setOrderOfMediaFiles) {\n        setOrderOfMediaFiles(items);\n    }\n\n    setMediaFiles(items);\n  };\n\n  // If user picks a past title\n  const handlePastTitleChange = (e) => {\n    const titleId = e.target.value;\n    setSelectedPastTitleId(titleId);\n\n    if (titleId !== '') {\n      Glitch.api.Titles.view(titleId)\n        .then(response => {\n          setGameTitle(response.data.data);\n          // Possibly set images for cropping\n          if (response.data.data.image_main) {\n            setCroppedImageSrc(response.data.data.image_main);\n          }\n          if (response.data.data.image_banner) {\n            setBannerCroppedImageSrc(response.data.data.image_banner);\n          }\n        })\n        .catch(error => {\n          console.error('Failed to fetch title data:', error);\n        });\n    } else {\n      // Reset the gameTitle to empty\n      setGameTitle({});\n      setCroppedImageSrc(null);\n      setBannerCroppedImageSrc(null);\n    }\n  };\n\n  // WYSIWYG changes\n  const handleWysiwigInputChange = (name, value) => {\n    setGameTitle(prev => ({ ...prev, [name]: value }));\n  };\n\n  // Basic input changes\n  const handleChange = (e) => {\n    const { name, value, type } = e.target;\n    let updatedValue = value;\n\n    // If it's a checkbox or certain boolean radio\n    if (type === 'checkbox') {\n      updatedValue = e.target.checked;\n    } else if (name === 'is_virtual' || name === 'is_media_kit' || name === 'enable_playtesting') {\n      updatedValue = (value === '1') ? true : false;\n    }\n\n    setGameTitle(prev => ({ ...prev, [name]: updatedValue }));\n  };\n\n  // Toggling the big \"Additional Info\" card\n  const toggleAdditionalInfo = () => {\n    setShowAdditionalInfo(!showAdditionalInfo);\n  };\n\n  // Crop callback for main\n  const onCropCompleteMain = useCallback((croppedArea, croppedAreaPixels) => {\n    setCroppedAreaPixelsMain(croppedAreaPixels);\n  }, []);\n\n  // Crop callback for banner\n  const onCropCompleteBanner = useCallback((croppedArea, croppedAreaPixels) => {\n    setCroppedAreaPixelsBanner(croppedAreaPixels);\n  }, []);\n\n  // Actually do the crop & upload logic\n  const showCroppedImage = async (imageSrc, croppedAreaPixels, setImage, name) => {\n    try {\n      const croppedImageBlob = await getCroppedImg(imageSrc, croppedAreaPixels);\n      const croppedImageUrl = URL.createObjectURL(croppedImageBlob);\n\n      // If the gameTitle is already in DB, we can upload directly\n      if (gameTitle.id && name === 'mainImage') {\n        setCroppedImageSrc(croppedImageUrl);\n        await Glitch.api.Titles.uploadMainImageBlob(gameTitle.id, croppedImageBlob);\n      } else if (gameTitle.id && name === 'bannerImage') {\n        setBannerCroppedImageSrc(croppedImageUrl);\n        await Glitch.api.Titles.uploadBannerImageFile(gameTitle.id, croppedImageBlob);\n      }\n      // If not in DB yet, just store the Blob for future\n      else if (!gameTitle.id && name === 'mainImage') {\n        setCroppedImageSrc(croppedImageUrl);\n        setMainImageBlob(croppedImageBlob);\n      } else if (!gameTitle.id && name === 'bannerImage') {\n        setBannerCroppedImageSrc(croppedImageUrl);\n        setBannerImageBlob(croppedImageBlob);\n      }\n\n      // Clear the local raw image\n      setImage(null);\n\n    } catch (err) {\n      console.error(err);\n    }\n  };\n\n  // Once user picks an image from <input>, load it into state for cropping\n  const handleImageChange = (e, imageSetter, cropSetter, zoomSetter, setShowCropper) => {\n    const file = e.target.files[0];\n    if (file) {\n      const reader = new FileReader();\n      reader.readAsDataURL(file);\n      reader.onloadend = () => {\n        imageSetter(reader.result);\n        cropSetter({ x: 0, y: 0 });\n        zoomSetter(1);\n        setShowCropper(true);\n      };\n    }\n  };\n\n  // If an external image is provided (like from AI), fetch & set\n  const fetchImage = async (url, imageSetter, cropSetter, zoomSetter, setShowCropper) => {\n    const proxyUrl = `https://api.glitch.fun/api/images/proxy?url=${encodeURIComponent(url)}`;\n\n    try {\n      const response = await fetch(proxyUrl);\n      const blob = await response.blob();\n      const reader = new FileReader();\n      reader.readAsDataURL(blob);\n      reader.onloadend = () => {\n        imageSetter(reader.result);\n        cropSetter({ x: 0, y: 0 });\n        zoomSetter(1);\n        setShowCropper(true);\n      };\n    } catch (error) {\n      console.error('Failed to fetch image:', error);\n    }\n  };\n\n  // Upload media for the \"More Media Files\" section\n  const handleMediaFileChange = async (e) => {\n    const file = e.target.files[0];\n    if (!file) return;\n\n    // track progress\n    setUploadProgress((prev) => ({ ...prev, [file.name]: 0 }));\n\n    try {\n      const data = {}; // any additional data you want to send\n      const response = await Glitch.api.Media.uploadFile(\n        file,\n        data,\n        {},\n        (progressEvent) => {\n          const percentCompleted = Math.round(\n            (progressEvent.loaded * 100) / progressEvent.total\n          );\n          setUploadProgress((prev) => ({ ...prev, [file.name]: percentCompleted }));\n        }\n      );\n\n      const uploadedMedia = response.data.data;\n\n      // add to drag-and-drop list\n      setMediaFiles((prev) => [...prev, uploadedMedia]);\n\n      if (setTmpMediaFiles) {\n        setTmpMediaFiles((prev) => [...prev, uploadedMedia]);\n      }\n\n      // Mark as pending if the parent calls addMedia later\n      setPendingMediaIds((prev) => [...prev, uploadedMedia.id]);\n\n      // clear progress\n      setUploadProgress((prev) => {\n        const updated = { ...prev };\n        delete updated[file.name];\n        return updated;\n      });\n\n    } catch (error) {\n      console.error('Media upload failed:', error);\n      setUploadProgress((prev) => ({ ...prev, [file.name]: 'Error' }));\n\n      setTimeout(() => {\n        setUploadProgress((prev) => {\n          const updated = { ...prev };\n          delete updated[file.name];\n          return updated;\n        });\n      }, 30000);\n    }\n  };\n\n  // Remove from local UI\n  const removeMediaFile = async (mediaId) => {\n    try {\n      // If you want to immediately remove from server: \n      // await Glitch.api.Titles.removeMedia(gameTitle.id, mediaId);\n\n      // remove from local array\n      setMediaFiles((prev) => prev.filter((m) => m.id !== mediaId));\n\n      if (setTmpMediaFiles) {\n        setTmpMediaFiles((prev) => prev.filter((m) => m.id !== mediaId));\n      }\n\n      // Mark as removed\n      setRemovedMediaIds((prev) => [...prev, mediaId]);\n\n    } catch (error) {\n      console.error('Failed to remove media:', error);\n    }\n  };\n\n  // On mount or whenever gameTitle changes, fetch any existing media\n  useEffect(() => {\n    const fetchMediaFiles = async () => {\n      if (!gameTitle?.id) return;\n\n      try {\n        const response = await Glitch.api.Titles.view(gameTitle.id, { include: 'media' });\n        const loadedMedia = response.data.data.media || [];\n        setMediaFiles(loadedMedia);\n\n        if (setTmpMediaFiles) {\n          setTmpMediaFiles(loadedMedia);\n        }\n      } catch (error) {\n        console.error('Failed to fetch media files:', error);\n      }\n    };\n\n    fetchMediaFiles();\n  }, [gameTitle.id]);\n\n  // Let parent know about new/removed IDs if they need it\n  useEffect(() => {\n    if (typeof onMediaIdsUpdate === 'function') {\n      onMediaIdsUpdate({ pendingMediaIds, removedMediaIds });\n    }\n  }, [pendingMediaIds, removedMediaIds]);\n\n  // Some sample timezones for an event\n  const timezones = [\n    { label: 'Africa/Abidjan', value: 'Africa/Abidjan' },\n    { label: 'Africa/Cairo', value: 'Africa/Cairo' },\n    { label: 'Africa/Johannesburg', value: 'Africa/Johannesburg' },\n    { label: 'Africa/Lagos', value: 'Africa/Lagos' },\n    { label: 'Africa/Nairobi', value: 'Africa/Nairobi' },\n    { label: 'America/Anchorage', value: 'America/Anchorage' },\n    { label: 'America/Argentina/Buenos_Aires', value: 'America/Argentina/Buenos_Aires' },\n    { label: 'America/Chicago', value: 'America/Chicago' },\n    { label: 'America/Denver', value: 'America/Denver' },\n    { label: 'America/Los_Angeles', value: 'America/Los_Angeles' },\n    { label: 'America/Mexico_City', value: 'America/Mexico_City' },\n    { label: 'America/New_York', value: 'America/New_York' },\n    { label: 'America/Phoenix', value: 'America/Phoenix' },\n    { label: 'America/Sao_Paulo', value: 'America/Sao_Paulo' },\n    { label: 'America/Toronto', value: 'America/Toronto' },\n    { label: 'Asia/Baghdad', value: 'Asia/Baghdad' },\n    { label: 'Asia/Bangkok', value: 'Asia/Bangkok' },\n    { label: 'Asia/Dubai', value: 'Asia/Dubai' },\n    { label: 'Asia/Hong_Kong', value: 'Asia/Hong_Kong' },\n    { label: 'Asia/Kolkata', value: 'Asia/Kolkata' },\n    { label: 'Asia/Kuala_Lumpur', value: 'Asia/Kuala_Lumpur' },\n    { label: 'Asia/Riyadh', value: 'Asia/Riyadh' },\n    { label: 'Asia/Seoul', value: 'Asia/Seoul' },\n    { label: 'Asia/Singapore', value: 'Asia/Singapore' },\n    { label: 'Asia/Tokyo', value: 'Asia/Tokyo' },\n    { label: 'Australia/Adelaide', value: 'Australia/Adelaide' },\n    { label: 'Australia/Brisbane', value: 'Australia/Brisbane' },\n    { label: 'Australia/Melbourne', value: 'Australia/Melbourne' },\n    { label: 'Australia/Perth', value: 'Australia/Perth' },\n    { label: 'Australia/Sydney', value: 'Australia/Sydney' },\n    { label: 'Europe/Amsterdam', value: 'Europe/Amsterdam' },\n    { label: 'Europe/Berlin', value: 'Europe/Berlin' },\n    { label: 'Europe/Lisbon', value: 'Europe/Lisbon' },\n    { label: 'Europe/London', value: 'Europe/London' },\n    { label: 'Europe/Madrid', value: 'Europe/Madrid' },\n    { label: 'Europe/Moscow', value: 'Europe/Moscow' },\n    { label: 'Europe/Paris', value: 'Europe/Paris' },\n    { label: 'Europe/Rome', value: 'Europe/Rome' },\n    { label: 'Pacific/Auckland', value: 'Pacific/Auckland' },\n    { label: 'Pacific/Fiji', value: 'Pacific/Fiji' },\n    { label: 'Pacific/Honolulu', value: 'Pacific/Honolulu' },\n    { label: 'Pacific/Port_Moresby', value: 'Pacific/Port_Moresby' },\n    { label: 'Pacific/Tahiti', value: 'Pacific/Tahiti' },\n    { label: 'UTC', value: 'UTC' },\n  ];\n\n  // Example Play Test questions\n  const questions = [\n    { id: 1, text: 'Was the game easy to understand from the start?' },\n    { id: 2, text: 'Were there any mechanics that felt confusing or difficult to use?' },\n    { id: 3, text: 'How challenging did you find the game overall? Too easy, too hard, or just right?' },\n    { id: 4, text: 'Did you encounter any bugs or issues during gameplay?' },\n    { id: 5, text: 'Were the controls intuitive and responsive? If not, what improvements would you suggest?' },\n    { id: 6, text: 'What aspects of the game did you enjoy the most? Why?' },\n    { id: 7, text: 'Were there any parts of the game that felt repetitive or boring?' },\n    { id: 8, text: 'How long did you feel engaged with the game before it started to lose your attention?' },\n    { id: 9, text: 'Would you want to play this game again? Why or why not?' },\n    { id: 10, text: 'How likely would you be to recommend this game to a friend?' },\n    { id: 11, text: 'Did you feel invested in the story or the game world?' },\n    { id: 12, text: 'Were there any characters, settings, or story elements that stood out to you?' },\n    { id: 13, text: 'Was there anything about the world or story that felt unclear or hard to follow?' },\n    { id: 14, text: 'How would you rate the game\\'s visuals? Did anything stand out as particularly impressive or lacking?' },\n    { id: 15, text: 'How did the audio (music, sound effects, voice acting, etc.) contribute to the experience?' },\n    { id: 16, text: 'Were there any audio or visual elements that distracted you from the gameplay?' },\n    { id: 17, text: 'Did you experience any difficulties related to visibility, accessibility, or ease of use?' },\n    { id: 18, text: 'Were there any features or options you wish the game had to make it easier to play?' },\n    { id: 19, text: 'How would you describe the game in a few sentences?' },\n    { id: 20, text: 'What is one thing you would change or add to improve the game?' },\n    { id: 21, text: 'What was your overall impression of the game?' },\n  ];\n\n  return (\n    <div className=\"container mt-4\">\n      {/* If we are \"creating\" and can reuse past titles */}\n      {isCreate && (\n        <div className=\"mb-4\">\n          <label htmlFor=\"pastTitleSelect\">\n            <i className=\"fas fa-history mr-2\"></i> &nbsp; Use a Past Title (Optional)\n          </label>\n          <Select\n            id=\"pastTitleSelect\"\n            name=\"pastTitleSelect\"\n            className=\"form-select\"\n            onChange={handlePastTitleChange}\n            value={selectedPastTitleId}\n          >\n            <option value=\"\">Create a New Title</option>\n            {adminTitles.map((title) => (\n              <option key={title.id} value={title.id}>\n                {title.name}\n              </option>\n            ))}\n          </Select>\n          <p className=\"small\">\n            If you had created a game title in the past, you may select it and use it as the current title. Or create a new game title.\n          </p>\n        </div>\n      )}\n\n      {/* If promotion_type is not an event or is specifically a game */}\n      {(!campaignData?.promotion_type || campaignData?.promotion_type == PROMOTION_TYPE_GAME) && (\n        <form>\n          {/* Basic game fields */}\n          <div className=\"card mb-3\">\n            <div className=\"card-header bg-primary text-white\">\n              <h3>\n                <i className=\"fas fa-gamepad mr-2\"></i> Game Title\n              </h3>\n            </div>\n\n            <div className=\"card-body\">\n              <p className=\"lead\">\n                Enter information about the game title. Please fill out as much information as possible to give your game the best chances of success.\n              </p>\n            </div>\n\n            {/* If not requiring community, we just do a horizontal rule */}\n            {!requireCommunity && <hr />}\n\n            {requireCommunity && (\n              <>\n                <div className=\"card-header bg-secondary text-white\">\n                  <i className=\"fas fa-newspaper mr-2\"></i> Business Account/Community\n                </div>\n                <div className=\"card-body\">\n                  <div className=\"col\">\n                    <div className=\"form-group mb-3\">\n                      <label htmlFor={'community_id'}>\n                        <i className=\"fas fa-user-friends mr-2\"></i> &nbsp;Required Business Account/Community <RequiredAsterisk />\n                      </label>\n                      <p className=\"small\">\n                        Set the business account/community that you want to associate the game with.\n                      </p>\n                      <select\n                        className=\"form-select\"\n                        name=\"community_id\"\n                        id=\"community_id\"\n                        value={gameTitle?.community_id || ''}\n                        onChange={handleChange}\n                      >\n                        <option value=\"\">Select An Account</option>\n                        {communities.map((community) => (\n                          <option key={community.id} value={community.id}>\n                            {community.name}\n                          </option>\n                        ))}\n                      </select>\n                      {errors && errors['community_id'] && errors['community_id'].map((msg, idx) => (\n                        <Danger message={msg} key={idx} />\n                      ))}\n                      <p className=\"mt-2 text-black\">\n                        If you do not see the community/business account you want, register a{' '}\n                        <Link className=\"text-primary\" to={Navigate.communitiesCreatePage()}>\n                          new community/business account here\n                        </Link>\n                        .\n                      </p>\n                    </div>\n                  </div>\n                </div>\n\n                <div className=\"card-header bg-secondary text-white\">\n                  <i className=\"fas fa-newspaper mr-2\"></i> Game Information\n                </div>\n              </>\n            )}\n\n            <div className=\"card-body\">\n              {/* Example input fields in 2 columns */}\n              <div className=\"row\">\n                {createInput(\n                  'Name',\n                  'name',\n                  gameTitle?.name,\n                  handleChange,\n                  'text',\n                  'fas fa-signature',\n                  errors,\n                  'Enter the name of the game.',\n                  true\n                )}\n              </div>\n              <div className=\"row\">\n                {editorMode === 'advanced' &&\n                  createInput(\n                    'Platform Compatibility (Optional)',\n                    'platform_compatibility',\n                    gameTitle?.platform_compatibility,\n                    handleChange,\n                    'text',\n                    'fab fa-steam-symbol',\n                    errors,\n                    'Enter what platforms this game is for, i.e., PlayStation 5, PC, Xbox, etc.'\n                  )}\n                {editorMode === 'advanced' &&\n                  createInput(\n                    'Age Rating (Optional)',\n                    'age_rating',\n                    gameTitle?.age_rating,\n                    handleChange,\n                    'text',\n                    'fas fa-child',\n                    errors,\n                    'Enter domestic and/or global age ratings for the game.'\n                  )}\n              </div>\n              <div className=\"row\">\n                {createInput(\n                  'Developer (Optional)',\n                  'developer',\n                  gameTitle?.developer,\n                  handleChange,\n                  'text',\n                  'fas fa-code-branch',\n                  errors,\n                  'Enter the development studios for the game.'\n                )}\n                {createInput(\n                  'Publisher (Optional)',\n                  'publisher',\n                  gameTitle?.publisher,\n                  handleChange,\n                  'text',\n                  'fas fa-briefcase',\n                  errors,\n                  'Enter the publishers.'\n                )}\n              </div>\n              <div className=\"row\">\n                {editorMode === 'advanced' &&\n                  createInput(\n                    'Release Date (Optional)',\n                    'release_date',\n                    gameTitle?.release_date,\n                    handleChange,\n                    'date',\n                    'fas fa-calendar-alt',\n                    errors,\n                    'Enter the date the game will be released.'\n                  )}\n                {editorMode === 'advanced' &&\n                  createInput(\n                    'Availability (Optional)',\n                    'availability',\n                    gameTitle?.availability,\n                    handleChange,\n                    'text',\n                    'fas fa-store',\n                    errors,\n                    'Set the availability of the game.'\n                  )}\n              </div>\n              <div className=\"row\">\n                {createInput(\n                  'Pricing (Optional)',\n                  'pricing',\n                  gameTitle?.pricing,\n                  handleChange,\n                  'number',\n                  'fas fa-tag',\n                  errors,\n                  'Enter the price for the game.'\n                )}\n\n                <div className=\"col\">\n                  <div className=\"form-group mb-3\">\n                    <label htmlFor={'pricing_currency'}>\n                      <i className=\"fas fa-dollar-sign mr-2\"></i> &nbsp;Pricing Currency (Optional)\n                    </label>\n                    <p className=\"small\">\n                      Set the pricing currency for the country of the game.\n                    </p>\n                    <select\n                      className=\"form-select\"\n                      name=\"pricing_currency\"\n                      id=\"pricing_currency\"\n                      value={gameTitle?.pricing_currency || 'USD'}\n                      onChange={handleChange}\n                    >\n                      {currencies.map((curr) => (\n                        <option key={curr.code} value={curr.code}>\n                          {curr.name} ({curr.code})\n                        </option>\n                      ))}\n                    </select>\n                    {errors && errors['pricing_currency'] && errors['pricing_currency'].map((msg, idx) => (\n                      <Danger message={msg} key={idx} />\n                    ))}\n                  </div>\n                </div>\n              </div>\n              <div className=\"row\">\n                {createInput(\n                  'Multiplayer Options (Optional)',\n                  'multiplayer_options',\n                  gameTitle?.multiplayer_options,\n                  handleChange,\n                  'text',\n                  'fas fa-users',\n                  errors,\n                  'Enter any multiplayer options of the game.'\n                )}\n                {createInput(\n                  'Google Play Store URL (Optional)',\n                  'android_url',\n                  gameTitle?.android_url,\n                  handleChange,\n                  'url',\n                  'fab fa-android',\n                  errors,\n                  'Enter the URL for the Google Play Store download page of the game.'\n                )}\n              </div>\n              <div className=\"row\">\n                {createInput(\n                  'Website URL (Optional)',\n                  'website_url',\n                  gameTitle?.website_url,\n                  handleChange,\n                  'url',\n                  'fas fa-globe',\n                  errors,\n                  'Enter the URL for the website of the game.'\n                )}\n                {createInput(\n                  'Steam URL (Optional)',\n                  'steam_url',\n                  gameTitle?.steam_url,\n                  handleChange,\n                  'url',\n                  'fab fa-steam',\n                  errors,\n                  'Enter the URL for the Steam download page of the game.'\n                )}\n              </div>\n              <div className=\"row\">\n                {createInput(\n                  'Itch.io URL (Optional)',\n                  'itch_url',\n                  gameTitle?.itch_url,\n                  handleChange,\n                  'url',\n                  'fas fa-link',\n                  errors,\n                  'Enter the URL for the Itch store of the game.'\n                )}\n                {createInput(\n                  'Apple Store URL (Optional)',\n                  'apple_url',\n                  gameTitle?.apple_url,\n                  handleChange,\n                  'url',\n                  'fab fa-apple',\n                  errors,\n                  'Enter the URL for the Apple Store download page of the game.'\n                )}\n              </div>\n            </div>\n\n            {/* Description fields */}\n            <div className=\"card-header bg-secondary text-white\">\n              Game Description(s)\n            </div>\n            <div className=\"card-body\">\n              {createTextarea(\n                'Short Description',\n                'short_description',\n                gameTitle?.short_description,\n                handleChange,\n                errors,\n                'Enter a 1-paragraph brief short description about the game.',\n                true\n              )}\n              {editorMode === 'advanced' &&\n                createTextarea(\n                  'Long Description (Optional)',\n                  'long_description',\n                  gameTitle?.long_description,\n                  handleChange,\n                  errors,\n                  'Enter a longer, more in-depth description about the game that can be multiple paragraphs.'\n                )}\n            </div>\n\n            {/* Main & Banner Images */}\n            <div className=\"card-header bg-secondary text-white\">\n              Upload Game's Main Images\n            </div>\n            <div className=\"card-body\">\n              {/* Main Image */}\n              <div className=\"form-group\">\n                <label htmlFor=\"mainImage\">Main Image</label>\n                <p className=\"small\">Recommended dimensions: 374x448 pixels.</p>\n                <input\n                  type=\"file\"\n                  accept=\"image/*\"\n                  className=\"form-control-file\"\n                  id=\"mainImage\"\n                  onChange={(e) =>\n                    handleImageChange(\n                      e,\n                      setMainImage,\n                      setCropMain,\n                      setZoomMain,\n                      setShowMainCropper\n                    )\n                  }\n                />\n                {croppedImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Cropped Image:</p>\n                    <img\n                      src={croppedImageSrc}\n                      alt=\"Cropped\"\n                      className=\"img-fluid w-50\"\n                    />\n                  </div>\n                )}\n                {gameTitle.image_main && !croppedImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Current Main Image:</p>\n                    <img\n                      src={gameTitle.image_main}\n                      alt=\"Current Main Image\"\n                      className=\"img-fluid w-50\"\n                    />\n                  </div>\n                )}\n              </div>\n\n              {/* Banner Image */}\n              <div className=\"form-group\">\n                <label htmlFor=\"bannerImage\">Banner Image</label>\n                <p className=\"small\">Recommended dimensions: 3840x1240 pixels.</p>\n                <input\n                  type=\"file\"\n                  accept=\"image/*\"\n                  className=\"form-control-file\"\n                  id=\"bannerImage\"\n                  onChange={(e) =>\n                    handleImageChange(\n                      e,\n                      setBannerImage,\n                      setCropBanner,\n                      setZoomBanner,\n                      setShowBannerCropper\n                    )\n                  }\n                />\n                {croppedBannerImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Cropped Image:</p>\n                    <img\n                      src={croppedBannerImageSrc}\n                      alt=\"Cropped\"\n                      className=\"img-fluid w-50\"\n                    />\n                  </div>\n                )}\n                {gameTitle.image_banner && !croppedBannerImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Current Banner Image:</p>\n                    <img\n                      src={gameTitle.image_banner}\n                      alt=\"Current Banner Image\"\n                      className=\"img-fluid w-50\"\n                    />\n                  </div>\n                )}\n              </div>\n            </div>\n\n\n            {/* More Media (images, videos) in drag-and-drop */}\n         \n              <div className=\"card-header bg-secondary text-white\">\n                <i className=\"fas fa-photo-video mr-2\"></i> Add Video & Images For Gallery\n              </div>\n              <div className=\"card-body\">\n                <p className=\"lead\">Add images or videos to showcase your game in a gallery. You can change the order to the video and images by dragging and dropping them. The first video or image will be the main video in the gallery, and the rest of the videos/images the users can click through to show.</p>\n\n                {/* File input for new media */}\n                <div className=\"form-group\">\n                  <label htmlFor=\"mediaFile\">Upload Media File</label>\n                  <input\n                    type=\"file\"\n                    accept=\"image/*,video/*\"\n                    className=\"form-control-file\"\n                    id=\"mediaFile\"\n                    onChange={handleMediaFileChange}\n                  />\n                </div>\n\n                {/* Progress bars */}\n                {Object.keys(uploadProgress).map((fileName) => (\n                  <div key={fileName} className=\"mt-2\">\n                    <p>{fileName}</p>\n                    {uploadProgress[fileName] === 'Error' ? (\n                      <p className=\"text-danger\">\n                        Upload failed. Please try again. Upload must be images or videos (max 150MB).\n                      </p>\n                    ) : (\n                      <>\n                        {uploadProgress[fileName] >= 100 ? <p className='text-success lead fw-bold'>Upload Complete! Now processing, please wait....</p> : ''}\n                        <ProgressBar\n                          now={uploadProgress[fileName]}\n                          label={`${uploadProgress[fileName]}%`}\n                        />\n                      </>\n                    )}\n                  </div>\n                ))}\n\n                {/* Drag-and-drop listing */}\n                {mediaFiles.length > 0 && (\n                  <div className=\"mt-4\">\n                    <h5>Uploaded Media (Drag to reorder)</h5>\n                    <DragDropContext onDragEnd={onDragEnd}>\n                      <Droppable droppableId=\"media-list\">\n                        {(provided) => (\n                          <div\n                            className=\"row\"\n                            {...provided.droppableProps}\n                            ref={provided.innerRef}\n                          >\n                            {mediaFiles.map((media, index) => (\n                              <Draggable\n                                key={media.id}\n                                draggableId={media.id}\n                                index={index}\n                              >\n                                {(provided) => (\n                                  <div\n                                    className=\"col-md-3 mb-3\"\n                                    ref={provided.innerRef}\n                                    {...provided.draggableProps}\n                                    {...provided.dragHandleProps}\n                                    style={{\n                                      userSelect: 'none',\n                                      ...provided.draggableProps.style\n                                    }}\n                                  >\n                                    <div className=\"card\">\n                                      {media?.mime_type?.startsWith('image/') ? (\n                                        <img\n                                          src={media?.url}\n                                          alt=\"Media\"\n                                          className=\"card-img-top\"\n                                        />\n                                      ) : (\n                                        <video\n                                          controls\n                                          src={media?.url}\n                                          className=\"card-img-top\"\n                                        />\n                                      )}\n                                      <div className=\"card-body\">\n                                        <button\n                                          type=\"button\"\n                                          className=\"btn btn-danger btn-sm\"\n                                          onClick={() => removeMediaFile(media.id)}\n                                        >\n                                          Remove\n                                        </button>\n                                      </div>\n                                    </div>\n                                  </div>\n                                )}\n                              </Draggable>\n                            ))}\n                            {provided.placeholder}\n                          </div>\n                        )}\n                      </Droppable>\n                    </DragDropContext>\n                  </div>\n                )}\n              </div>\n           \n\n            {/* YouTube / Vimeo */}\n            <div className=\"card-header bg-secondary text-white\">Youtube/Vimeo As Fallback</div>\n            <div className=\"card-body\">\n              {createInput(\n                'YouTube/Vimeo Video URL',\n                'video_url',\n                gameTitle?.video_url,\n                handleChange,\n                'url',\n                'fas fa-file-video',\n                errors,\n                'Enter a YouTube or Vimeo video URL to use that as a fallback promo video if you cannot upload vidoes and images directly.'\n              )}\n            </div>\n\n            {/* Press kit fields if needed */}\n            {showPressKit && (\n              <>\n                <div className=\"card-header bg-secondary text-white\">\n                  <i className=\"fas fa-newspaper mr-2\"></i> Media Kit Information\n                </div>\n                <div className=\"card-body\">\n                  {createInput(\n                    'Press Contact Name',\n                    'press_contact_name',\n                    gameTitle?.press_contact_name,\n                    handleChange,\n                    'text',\n                    'fas fa-user',\n                    errors,\n                    'Enter the name of the person to contact about press inquiries.'\n                  )}\n                  {createInput(\n                    'Press Contact Email',\n                    'press_contact_email',\n                    gameTitle?.press_contact_email,\n                    handleChange,\n                    'email',\n                    'fas fa-envelope',\n                    errors,\n                    'Enter the email of the person to contact about press inquiries.'\n                  )}\n                  {createInput(\n                    'Tagline',\n                    'tagline',\n                    gameTitle?.tagline,\n                    handleChange,\n                    'text',\n                    'fas fa-tag',\n                    errors,\n                    'Enter a short tagline about the game.'\n                  )}\n                  {createInput(\n                    'Demo URL',\n                    'demo_url',\n                    gameTitle?.demo_url,\n                    handleChange,\n                    'url',\n                    'fas fa-link',\n                    errors,\n                    'Enter the URL for the game demo.'\n                  )}\n                  {createTextarea(\n                    'Key Features',\n                    'key_features',\n                    gameTitle?.key_features,\n                    handleChange,\n                    errors,\n                    'Enter the key features to be highlighted.'\n                  )}\n                  <div className=\"form-group mb-3\">\n                    <label>\n                      <i className=\"fas fa-info-circle mr-2\"></i> &nbsp;Is this for Media Kit?{' '}\n                    </label>\n                    <div>\n                      <label className=\"mr-2\">\n                        <input\n                          type=\"radio\"\n                          name=\"is_media_kit\"\n                          value=\"1\"\n                          checked={gameTitle.is_media_kit === true || gameTitle.is_media_kit === '1'}\n                          onChange={handleChange}\n                        />{' '}\n                        Yes\n                      </label>\n                      <label className=\"mr-2\">\n                        <input\n                          type=\"radio\"\n                          name=\"is_media_kit\"\n                          value=\"0\"\n                          checked={gameTitle.is_media_kit === false || gameTitle.is_media_kit === '0'}\n                          onChange={handleChange}\n                        />{' '}\n                        No\n                      </label>\n                    </div>\n                    {errors && errors['is_media_kit'] && errors['is_media_kit'].map((msg, idx) => (\n                      <Danger message={msg} key={idx} />\n                    ))}\n                  </div>\n                </div>\n              </>\n            )}\n\n            {/* Play Test fields if needed */}\n            {showPlayTest && (\n              <>\n                <div className=\"card-header bg-secondary text-white\">\n                  <i className=\"fas fa-newspaper mr-2\"></i> Play Test Information\n                </div>\n                <div className=\"card-body\">\n                  <div className=\"form-group mb-3\">\n                    <label>\n                      <i className=\"fas fa-info-circle mr-2\"></i> &nbsp;Is Play Testing Enabled?{' '}\n                    </label>\n                    <div>\n                      <label className=\"mr-2\">\n                        <input\n                          type=\"radio\"\n                          name=\"enable_playtesting\"\n                          value=\"1\"\n                          checked={gameTitle.enable_playtesting === true || gameTitle.enable_playtesting === '1'}\n                          onChange={handleChange}\n                        />{' '}\n                        Yes\n                      </label>\n                      <label className=\"mr-2\">\n                        <input\n                          type=\"radio\"\n                          name=\"enable_playtesting\"\n                          value=\"0\"\n                          checked={gameTitle.enable_playtesting === false || gameTitle.enable_playtesting === '0'}\n                          onChange={handleChange}\n                        />{' '}\n                        No\n                      </label>\n                    </div>\n                    {errors && errors['enable_playtesting'] && errors['enable_playtesting'].map((msg, idx) => (\n                      <Danger message={msg} key={idx} />\n                    ))}\n                  </div>\n\n                  <div className=\"col\">\n                    <div className=\"form-group mb-3\">\n                      <label htmlFor={'community_id'}>\n                        <i className=\"fas fa-user-friends mr-2\"></i> &nbsp;Associated Business Account Play Test <RequiredAsterisk />\n                      </label>\n                      <p className=\"small\">Set the business account that you want to associate the game with.</p>\n                      <select\n                        className=\"form-select\"\n                        name=\"community_id\"\n                        id=\"community_id\"\n                        value={gameTitle?.community_id || ''}\n                        onChange={handleChange}\n                      >\n                        <option value=\"\">Select An Account</option>\n                        {communities.map((community) => (\n                          <option key={community.id} value={community.id}>\n                            {community.name}\n                          </option>\n                        ))}\n                      </select>\n                      {errors && errors['community_id'] && errors['community_id'].map((msg, idx) => (\n                        <Danger message={msg} key={idx} />\n                      ))}\n                    </div>\n                  </div>\n\n                  {createTextarea(\n                    'Testing Instructions (optional)',\n                    'test_instructions',\n                    gameTitle?.test_instructions,\n                    handleChange,\n                    errors,\n                    'Enter any instructions that you want the tester to follow.'\n                  )}\n\n                  <h5 className=\"mt-4\">Select Questions to Include</h5>\n                  <p className=\"small\">\n                    Enable or disable questions you want the play testers to answer. Please DO NOT select all the questions. Typically around 5 questions is a good amount to ask for on a Play Test.\n                  </p>\n                  <div className=\"row\">\n                    {questions.map((question) => (\n                      <div className=\"col-md-6 mb-3\" key={question.id}>\n                        <div className=\"form-check form-switch\">\n                          <input\n                            className=\"form-check-input\"\n                            type=\"checkbox\"\n                            id={`q_${question.id}_enabled`}\n                            name={`q_${question.id}_enabled`}\n                            checked={gameTitle[`q_${question.id}_enabled`]}\n                            onChange={(e) => {\n                              const { checked } = e.target;\n                              setGameTitle((prev) => ({\n                                ...prev,\n                                [`q_${question.id}_enabled`]: checked,\n                              }));\n                            }}\n                          />\n                          <label\n                            className=\"form-check-label\"\n                            htmlFor={`q_${question.id}_enabled`}\n                          >\n                            {question.text}\n                          </label>\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </>\n            )}\n\n            {/* Additional info toggle */}\n            <div className=\"card-header bg-secondary text-white d-flex justify-content-between align-items-center\">\n              <span>\n                <i className=\"fas fa-book-open mr-2\"></i>Additional Game Information\n              </span>\n              <button\n                type=\"button\"\n                className=\"btn btn-light btn-sm\"\n                onClick={toggleAdditionalInfo}\n              >\n                {showAdditionalInfo ? 'Hide' : 'Show'}\n              </button>\n            </div>\n            {showAdditionalInfo && (\n              <div className=\"card-body\">\n                {createTextarea(\n                  'Gameplay Mechanics',\n                  'gameplay_mechanics',\n                  gameTitle?.gameplay_mechanics,\n                  handleChange,\n                  errors\n                )}\n                {createTextarea(\n                  'Narrative Setting',\n                  'narrative_setting',\n                  gameTitle?.narrative_setting,\n                  handleChange,\n                  errors\n                )}\n                {createTextarea(\n                  'Visual & Audio Style',\n                  'visual_audio_style',\n                  gameTitle?.visual_audio_style,\n                  handleChange,\n                  errors\n                )}\n                {createTextarea(\n                  'DLC & Expansion Info',\n                  'dlc_expansion_info',\n                  gameTitle?.dlc_expansion_info,\n                  handleChange,\n                  errors\n                )}\n                {createTextarea(\n                  'System Requirements',\n                  'system_requirements',\n                  gameTitle?.system_requirements,\n                  handleChange,\n                  errors\n                )}\n                {createTextarea(\n                  'Critical Reception',\n                  'critical_reception',\n                  gameTitle?.critical_reception,\n                  handleChange,\n                  errors\n                )}\n              </div>\n            )}\n          </div>\n        </form>\n      )}\n\n      {/* If it's an event instead */}\n      {campaignData?.promotion_type === PROMOTION_TYPE_EVENT && (\n        <form>\n          <div className=\"card mb-3\">\n            <div className=\"card-header bg-primary text-white\">\n              <h3>\n                <i className=\"fas fa-calendar-alt mr-2\"></i> Event Details\n              </h3>\n            </div>\n            <div className=\"card-body\">\n              <p className=\"lead\">\n                Enter information about the event you want influencers to promote. Please fill out as much information as possible.\n              </p>\n              <hr />\n              <div className=\"row\">\n                {createInput(\n                  'Event Name',\n                  'name',\n                  gameTitle?.name,\n                  handleChange,\n                  'text',\n                  'fas fa-signature',\n                  errors,\n                  'Enter the name of the event.',\n                  true\n                )}\n                {createTextarea(\n                  'Short Description',\n                  'short_description',\n                  gameTitle?.short_description,\n                  handleChange,\n                  errors,\n                  'Enter a brief short description about the event.',\n                  true\n                )}\n              </div>\n              <div className=\"row\">\n                {createTextarea(\n                  'Long Description (Optional)',\n                  'long_description',\n                  gameTitle?.long_description,\n                  handleChange,\n                  errors,\n                  'Enter a longer, more in-depth description about the event.'\n                )}\n              </div>\n\n              {/* Virtual or not */}\n              <div className=\"form-group mb-3\">\n                <label>\n                  <i className=\"fas fa-laptop mr-2\"></i> &nbsp;Is the event virtual? <RequiredAsterisk />\n                </label>\n                <div>\n                  <label className=\"mr-2\">\n                    <input\n                      type=\"radio\"\n                      name=\"is_virtual\"\n                      value=\"1\"\n                      checked={gameTitle.is_virtual === true || gameTitle.is_virtual === '1'}\n                      onChange={handleChange}\n                    />{' '}\n                    Yes\n                  </label>\n                  <label className=\"mr-2\">\n                    <input\n                      type=\"radio\"\n                      name=\"is_virtual\"\n                      value=\"0\"\n                      checked={gameTitle.is_virtual === false || gameTitle.is_virtual === '0'}\n                      onChange={handleChange}\n                    />{' '}\n                    No\n                  </label>\n                </div>\n                {errors && errors['is_virtual'] && errors['is_virtual'].map((msg, idx) => (\n                  <Danger message={msg} key={idx} />\n                ))}\n              </div>\n\n              {/* If not virtual => show address fields */}\n              {(gameTitle.is_virtual === false || gameTitle.is_virtual === '0') && (\n                <>\n                  <div className=\"row\">\n                    {createInput(\n                      'Address Line 1',\n                      'address_line_1',\n                      gameTitle?.address_line_1,\n                      handleChange,\n                      'text',\n                      'fas fa-address-card',\n                      errors,\n                      \"Enter the first line of the event's physical address.\",\n                      true\n                    )}\n                    {createInput(\n                      'Address Line 2',\n                      'address_line_2',\n                      gameTitle?.address_line_2,\n                      handleChange,\n                      'text',\n                      'fas fa-address-card',\n                      errors,\n                      \"Enter the second line of the event's physical address.\"\n                    )}\n                  </div>\n                  <div className=\"row\">\n                    {createInput(\n                      'City',\n                      'locality',\n                      gameTitle?.locality,\n                      handleChange,\n                      'text',\n                      'fas fa-city',\n                      errors,\n                      'Enter the city where the event is held.',\n                      true\n                    )}\n                    {createInput(\n                      'State/Province',\n                      'province',\n                      gameTitle?.province,\n                      handleChange,\n                      'text',\n                      'fas fa-map',\n                      errors,\n                      'Enter the state or province of the event location.',\n                      true\n                    )}\n                  </div>\n                  <div className=\"row\">\n                    {createInput(\n                      'Postal Code',\n                      'postal_code',\n                      gameTitle?.postal_code,\n                      handleChange,\n                      'text',\n                      'fas fa-envelope',\n                      errors,\n                      'Enter the postal code of the event location.',\n                      true\n                    )}\n                    {createInput(\n                      'Country',\n                      'country',\n                      gameTitle?.country,\n                      handleChange,\n                      'text',\n                      'fas fa-flag',\n                      errors,\n                      'Enter the country where the event is held.',\n                      true\n                    )}\n                  </div>\n                </>\n              )}\n\n              <div className=\"row\">\n                {createInput(\n                  'Start Date and Time',\n                  'start_date',\n                  gameTitle?.start_date,\n                  handleChange,\n                  'datetime-local',\n                  'fas fa-calendar-alt',\n                  errors,\n                  'Enter the start date and time of the event.',\n                  true\n                )}\n                {createInput(\n                  'End Date and Time',\n                  'end_date',\n                  gameTitle?.end_date,\n                  handleChange,\n                  'datetime-local',\n                  'fas fa-calendar-alt',\n                  errors,\n                  'Enter the end date and time of the event.',\n                  true\n                )}\n              </div>\n\n              <div className=\"form-group mb-3\">\n                <label htmlFor=\"timezone\">\n                  <i className=\"fas fa-clock mr-2\"></i> &nbsp;Timezone <RequiredAsterisk />\n                </label>\n                <Select\n                  name=\"timezone\"\n                  className=\"form-select\"\n                  onChange={handleChange}\n                  value={gameTitle.timezone || ''}\n                >\n                  <option value=\"\">Select a Timezone</option>\n                  {timezones.map((option) => (\n                    <option key={option.value} value={option.value}>\n                      {option.label}\n                    </option>\n                  ))}\n                </Select>\n                <p className=\"small\">Select the timezone for the event.</p>\n                {errors && errors['timezone'] && errors['timezone'].map((msg, idx) => (\n                  <Danger message={msg} key={idx} />\n                ))}\n              </div>\n            </div>\n\n            {/* Similar upload for events */}\n            <div className=\"card-header bg-secondary text-white\">Upload Event Images</div>\n            <div className=\"card-body\">\n              <div className=\"form-group\">\n                <label htmlFor=\"mainImage\">Main Image</label>\n                <p className=\"small\">Recommended dimensions: 374x448 pixels.</p>\n                <input\n                  type=\"file\"\n                  accept=\"image/*\"\n                  className=\"form-control-file\"\n                  id=\"mainImage\"\n                  onChange={(e) =>\n                    handleImageChange(\n                      e,\n                      setMainImage,\n                      setCropMain,\n                      setZoomMain,\n                      setShowMainCropper\n                    )\n                  }\n                />\n                {croppedImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Cropped Image:</p>\n                    <img src={croppedImageSrc} alt=\"Cropped\" className=\"img-fluid w-50\" />\n                  </div>\n                )}\n                {gameTitle.image_main && !croppedImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Current Main Image:</p>\n                    <img src={gameTitle.image_main} alt=\"Current Main\" className=\"img-fluid w-50\" />\n                  </div>\n                )}\n              </div>\n              <div className=\"form-group\">\n                <label htmlFor=\"bannerImage\">Banner Image</label>\n                <p className=\"small\">Recommended dimensions: 3840x1240 pixels.</p>\n                <input\n                  type=\"file\"\n                  accept=\"image/*\"\n                  className=\"form-control-file\"\n                  id=\"bannerImage\"\n                  onChange={(e) =>\n                    handleImageChange(\n                      e,\n                      setBannerImage,\n                      setCropBanner,\n                      setZoomBanner,\n                      setShowBannerCropper\n                    )\n                  }\n                />\n                {croppedBannerImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Cropped Image:</p>\n                    <img\n                      src={croppedBannerImageSrc}\n                      alt=\"Cropped\"\n                      className=\"img-fluid w-50\"\n                    />\n                  </div>\n                )}\n                {gameTitle.image_banner && !croppedBannerImageSrc && (\n                  <div className=\"mt-3\">\n                    <p>Current Banner Image:</p>\n                    <img\n                      src={gameTitle.image_banner}\n                      alt=\"Current Banner\"\n                      className=\"img-fluid w-50\"\n                    />\n                  </div>\n                )}\n              </div>\n            </div>\n\n            <div className=\"card-header bg-secondary text-white\">Event Video</div>\n            <div className=\"card-body\">\n              {createInput(\n                'YouTube/Vimeo Video URL',\n                'video_url',\n                gameTitle?.video_url,\n                handleChange,\n                'url',\n                'fas fa-file-video',\n                errors,\n                'Enter a YouTube or Vimeo video URL to use that as a promo video.'\n              )}\n            </div>\n          </div>\n        </form>\n      )}\n\n      {/* Crop modals */}\n      {showMainCropper && (\n        <div className=\"modal show\" style={{ display: 'block' }} tabIndex=\"-1\">\n          <div className=\"modal-dialog modal-lg modal-dialog-centered\">\n            <div className=\"modal-content\">\n              <div className=\"modal-header\">\n                <h5 className=\"modal-title text-black\">Crop Main Image</h5>\n                <button\n                  type=\"button\"\n                  className=\"btn-close\"\n                  aria-label=\"Close\"\n                  onClick={() => setShowMainCropper(false)}\n                ></button>\n              </div>\n              <div className=\"modal-body\">\n                <div\n                  className=\"crop-container\"\n                  style={{ position: 'relative', width: '100%', height: '400px' }}\n                >\n                  <Cropper\n                    image={mainImage}\n                    crop={cropMain}\n                    zoom={zoomMain}\n                    aspect={374 / 448}\n                    onCropChange={setCropMain}\n                    onZoomChange={setZoomMain}\n                    onCropComplete={onCropCompleteMain}\n                  />\n                </div>\n                <div className=\"slider-container mt-3\">\n                  <label>Zoom</label>\n                  <input\n                    type=\"range\"\n                    min={1}\n                    max={3}\n                    step={0.1}\n                    value={zoomMain}\n                    onChange={(e) => setZoomMain(e.target.value)}\n                    className=\"form-range\"\n                  />\n                </div>\n              </div>\n              <div className=\"modal-footer\">\n                <button\n                  type=\"button\"\n                  className=\"btn btn-secondary\"\n                  onClick={() => setShowMainCropper(false)}\n                >\n                  Cancel\n                </button>\n                <button\n                  type=\"button\"\n                  className=\"btn btn-primary\"\n                  onClick={() => {\n                    showCroppedImage(mainImage, croppedAreaPixelsMain, setMainImage, 'mainImage');\n                    setShowMainCropper(false);\n                  }}\n                >\n                  Crop Image\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n      )}\n\n      {showBannerCropper && (\n        <div className=\"modal show\" style={{ display: 'block' }} tabIndex=\"-1\">\n          <div className=\"modal-dialog modal-lg modal-dialog-centered\">\n            <div className=\"modal-content\">\n              <div className=\"modal-header\">\n                <h5 className=\"modal-title text-black\">Crop Banner Image</h5>\n                <button\n                  type=\"button\"\n                  className=\"btn-close\"\n                  aria-label=\"Close\"\n                  onClick={() => setShowBannerCropper(false)}\n                ></button>\n              </div>\n              <div className=\"modal-body\">\n                <div\n                  className=\"crop-container\"\n                  style={{ position: 'relative', width: '100%', height: '400px' }}\n                >\n                  <Cropper\n                    image={bannerImage}\n                    crop={cropBanner}\n                    zoom={zoomBanner}\n                    aspect={3840 / 1240}\n                    onCropChange={setCropBanner}\n                    onZoomChange={setZoomBanner}\n                    onCropComplete={onCropCompleteBanner}\n                  />\n                </div>\n                <div className=\"slider-container mt-3\">\n                  <label>Zoom</label>\n                  <input\n                    type=\"range\"\n                    min={1}\n                    max={3}\n                    step={0.1}\n                    value={zoomBanner}\n                    onChange={(e) => setZoomBanner(e.target.value)}\n                    className=\"form-range\"\n                  />\n                </div>\n              </div>\n              <div className=\"modal-footer\">\n                <button\n                  type=\"button\"\n                  className=\"btn btn-secondary\"\n                  onClick={() => setShowBannerCropper(false)}\n                >\n                  Cancel\n                </button>\n                <button\n                  type=\"button\"\n                  className=\"btn btn-primary\"\n                  onClick={() => {\n                    showCroppedImage(\n                      bannerImage,\n                      croppedAreaPixelsBanner,\n                      setBannerImage,\n                      'bannerImage'\n                    );\n                    setShowBannerCropper(false);\n                  }}\n                >\n                  Crop Image\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n\n  /**\n   * Helper to build standard text/number input fields with optional icon & error\n   */\n  function createInput(\n    label,\n    name,\n    value,\n    handleChange,\n    type = 'text',\n    icon,\n    errors,\n    description = '',\n    required = false\n  ) {\n    return (\n      <div className=\"col\">\n        <div className=\"form-group mb-3\">\n          <label htmlFor={name}>\n            <i className={`${icon} mr-2`}></i> &nbsp;{label}{' '}\n            {required ? <RequiredAsterisk /> : ''}\n          </label>\n          <p className=\"small\">{description}</p>\n          <input\n            type={type}\n            className=\"form-control\"\n            id={name}\n            name={name}\n            value={value || ''}\n            onChange={handleChange}\n          />\n          {errors && errors[name] && errors[name].map((message, index) => (\n            <Danger message={message} key={index} />\n          ))}\n        </div>\n      </div>\n    );\n  }\n\n  /**\n   * Helper to build a WYSIWYG text area\n   */\n  function createTextarea(\n    label,\n    name,\n    value,\n    handleChange,\n    errors,\n    description = '',\n    required = false\n  ) {\n    return (\n      <div className=\"col-md-12\">\n        <div className=\"mb-3\">\n          <label htmlFor={name}>\n            {label} {required && <RequiredAsterisk />}\n          </label>\n          <p className=\"small\">{description}</p>\n          <Wysiwyg\n            children={value || ''}\n            name={name}\n            id={name}\n            onChange={(content) => {\n              handleWysiwigInputChange(name, content);\n            }}\n          />\n          {errors && errors[name] && errors[name].map((message, index) => (\n            <Danger message={message} key={index} />\n          ))}\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default GameTitleForm;\n"],"names":["getCroppedImg","_x","_x2","_getCroppedImg","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","imageSrc","pixelCrop","image","canvas","ctx","wrap","_context","prev","next","Image","src","document","createElement","getContext","width","height","drawImage","x","y","abrupt","Promise","resolve","reject","toBlob","blob","name","window","URL","revokeObjectURL","Error","stop","_ref","gameTitle","campaignData","setGameTitle","setMainImageBlob","onMainImageUpdate","onBannerImageUpdate","setBannerImageBlob","externalGameData","errors","showPressKit","showPlayTest","_ref$requireCommunity","requireCommunity","isCreate","_ref$editorMode","editorMode","_ref$communities","communities","onMediaIdsUpdate","_ref$currentMediaFile","currentMediaFiles","_ref$setTmpMediaFiles","setTmpMediaFiles","_ref$setOrderOfMediaF","setOrderOfMediaFiles","_useState","useState","_useState2","_slicedToArray","showAdditionalInfo","setShowAdditionalInfo","_useState3","_useState4","mainImage","setMainImage","_useState5","_useState6","bannerImage","setBannerImage","_useState7","_useState8","cropMain","setCropMain","_useState9","_useState10","cropBanner","setCropBanner","_useState11","_useState12","zoomMain","setZoomMain","_useState13","_useState14","zoomBanner","setZoomBanner","_useState15","_useState16","croppedAreaPixelsMain","setCroppedAreaPixelsMain","_useState17","_useState18","croppedAreaPixelsBanner","setCroppedAreaPixelsBanner","_useState19","_useState20","croppedImageSrc","setCroppedImageSrc","_useState21","_useState22","croppedBannerImageSrc","setBannerCroppedImageSrc","_useState23","_useState24","showMainCropper","setShowMainCropper","_useState25","_useState26","showBannerCropper","setShowBannerCropper","_useState27","_useState28","selectedPastTitleId","setSelectedPastTitleId","_useState29","_useState30","mediaFiles","setMediaFiles","_useState31","_useState32","uploadProgress","setUploadProgress","_useState33","_useState34","_useState35","_useState36","_useState37","_useState38","pendingMediaIds","setPendingMediaIds","_useState39","_useState40","removedMediaIds","setRemovedMediaIds","_useState41","_useState42","adminTitles","setAdminTitles","useEffect","length","ids","map","media","id","console","log","header_image","fetchImage","capsule_image","Glitch","api","Titles","list","is_admin","then","response","data","catch","error","image_main","image_banner","handleChange","e","_e$target","target","value","type","updatedValue","checked","_objectSpread","_defineProperty","onCropCompleteMain","useCallback","croppedArea","croppedAreaPixels","onCropCompleteBanner","showCroppedImage","_ref2","setImage","croppedImageBlob","croppedImageUrl","sent","createObjectURL","uploadMainImageBlob","uploadBannerImageFile","t0","_x3","_x4","handleImageChange","imageSetter","cropSetter","zoomSetter","setShowCropper","file","files","reader","FileReader","readAsDataURL","onloadend","result","_ref3","_callee2","url","proxyUrl","_context2","concat","encodeURIComponent","fetch","_x5","_x6","_x7","_x8","_x9","handleMediaFileChange","_ref4","_callee3","uploadedMedia","_context3","Media","uploadFile","progressEvent","percentCompleted","Math","round","loaded","total","_toConsumableArray","updated","setTimeout","_x10","removeMediaFile","_ref5","_callee4","mediaId","_context4","filter","m","_x11","fetchMediaFiles","_ref6","_callee5","loadedMedia","_context5","view","include","_jsxs","className","children","htmlFor","_jsx","Select","onChange","titleId","title","promotion_type","_Fragment","RequiredAsterisk","community_id","community","msg","idx","Danger","message","Link","to","Navigate","communitiesCreatePage","createInput","platform_compatibility","age_rating","developer","publisher","release_date","availability","pricing","pricing_currency","code","curr","multiplayer_options","android_url","website_url","steam_url","itch_url","apple_url","createTextarea","short_description","long_description","accept","alt","Object","keys","fileName","ProgressBar","now","label","DragDropContext","onDragEnd","destination","items","Array","from","_items$splice","splice","source","index","reorderedItem","forEach","order","Droppable","droppableId","provided","droppableProps","ref","innerRef","Draggable","draggableId","_media$mime_type","draggableProps","dragHandleProps","style","userSelect","mime_type","startsWith","controls","onClick","placeholder","video_url","press_contact_name","press_contact_email","tagline","demo_url","key_features","is_media_kit","enable_playtesting","test_instructions","text","question","gameplay_mechanics","narrative_setting","visual_audio_style","dlc_expansion_info","system_requirements","critical_reception","is_virtual","address_line_1","address_line_2","locality","province","postal_code","country","start_date","end_date","timezone","option","display","tabIndex","position","Cropper","crop","zoom","aspect","onCropChange","onZoomChange","onCropComplete","min","max","step","undefined","icon","description","required","Wysiwyg","content","handleWysiwigInputChange"],"sourceRoot":""}