1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CSy0m-SZ2.js","./D3t9r-J4.js","./DDsE4vUS2.js","./CcRUFGPw.js"])))=>i.map(i=>d[i]); 2(function() { 3 try { 4 var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}; 5 e.SENTRY_RELEASE = { id: "cdc68def821e8f2221eb1aa34782d750d9794199" }; 6 var n = new e.Error().stack; 7 n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "3a80cb35-a324-48fc-9832-fb26a0593ef6", e._sentryDebugIdIdentifier = "sentry-dbid-3a80cb35-a324-48fc-9832-fb26a0593ef6"); 8 } catch (e) {} 9})(); 10import { a as __toESM } from "./D3t9r-J4.js"; 11import { a as useNuxtApp, o as useRuntimeConfig } from "./4omwaCoX.js"; 12import { D as createVNode, E as createTextVNode, Ht as watch, On as unref, St as resolveComponent, _ as createBaseVNode, b as createElementBlock, ct as onMounted, et as mergeProps, g as computed, it as onBeforeUnmount, k as defineComponent, mt as openBlock, o as Fragment, qt as withCtx, tr as toDisplayString, tt as nextTick, v as createBlock, vn as ref, y as createCommentVNode } from "./BSDeTsrd.js"; 13import { n as useI18n } from "./DaC_mzmf.js"; 14import { f as useRoute, p as useRouter } from "./fWUdV8VM.js"; 15import { c as storeToRefs, t as useAuthStore } from "./-W_FVIZo.js"; 16import { y as onBeforeRouteLeave } from "./D8r2Zzdx.js"; 17import { n as init_preload_helper, t as __vitePreload } from "./CcRUFGPw.js"; 18import { j as deleteField } from "./D_6IP05v.js"; 19import { t as _plugin_vue_export_helper_default } from "./hx9ve9to.js"; 20import { t as useErrorToast } from "./BCla01PV.js"; 21import { t as fetchUser } from "./DBRPEJ_p2.js"; 22import { i as uploadCoverImage, r as getUrl } from "./C-maI5qr2.js"; 23import { t as useSubscription } from "./DuHOKVoR2.js"; 24import { t as definePageMeta } from "./B56CKwSa2.js"; 25import { p as OLocationToGeoPoint } from "./BR8QOkdj2.js"; 26import { N as fetchValidTags, O as updateEventInfo, P as updateByEventTags, g as fetchEventById, v as fetchEventDeeply } from "./CU8eG1C32.js"; 27import { c as fetchMapsByOwner, i as drawTile } from "./DlGo-wAS2.js"; 28import { t as fitCircleBounds } from "./Bo34W0R42.js"; 29import { t as isEventOwner } from "./DkEJBw2t2.js"; 30import { n as useEventBreadcrumb } from "./BhqmF14N2.js"; 31import { n as PaidFeatureSwitch_default, t as PaidFeatureNote_default } from "./33xEEzQB.js"; 32import { i as drawSpotCircle, n as drawEventCircle } from "./CzkwWTJj.js"; 33import { n as allCountries, t as regions_default } from "./CVEKzsge.js"; 34import { t as resizeImage } from "./K_fLQ63q.js"; 35/** ã¢ã㪠strings.xml ã® `invalid_date_range` ã«å¯¾å¿ãã i18n ãã¼ã */ 36var MESSAGE_INVALID_DATE_RANGE = "event_form.invalid_date_range"; 37/** ã¢ã㪠strings.xml ã® `event_date_range_too_long` ã«å¯¾å¿ãã i18n ãã¼ã */ 38var MESSAGE_DATE_RANGE_TOO_LONG = "event_form.date_range_too_long"; 39/** ã¢ã㪠`EditEventFragment.saveButtonAction()` ã®ãã¼ãã³ã¼ãæè¨ã«å¯¾å¿ãã i18n ãã¼ã */ 40var MESSAGE_INVALID_MEET_CODE = "event_form.invalid_meet_code"; 41/** ã¢ã㪠strings.xml ã® `invalid_completion_url` ã«å¯¾å¿ãã i18n ãã¼ã */ 42var MESSAGE_INVALID_COMPLETION_URL = "event_form.invalid_completion_url"; 43var MS_PER_DAY = 864e5; 44/** 45* `YYYYMMDD` ã®æ´æ°ã UTC ã®ããªç§ã«å¤æããã䏿£ãªæ¥ä»ã¯ nullã 46* 47* UTC ã使ãã®ã¯ãæ¥ä»ã ãã®æ¯è¼ã«å¤æéã®å½±é¿ãæã¡è¾¼ã¾ãªããã 48* ï¼ã¢ããªã¯ãã¼ã«ã«æå»ã® Date ã ms ã§å¼ãç®ãã¦ããï¼ã 49* è² æ°ã»éæ´æ°ã»NaN ã null ã«ããï¼`isUnset` ãéãæããç°å¸¸å¤ã®ä¿éºï¼ã 50*/ 51var ymdToUtcMs = (ymd) => { 52 if (!Number.isInteger(ymd) || ymd <= 0) return null; 53 const year = Math.floor(ymd / 1e4);
54 const month = Math.floor(ymd / 100) % 100; 55 const day = ymd % 100; 56 if (year < 1e3 || month < 1 || month > 12 || day < 1 || day > 31) return null; 57 const ms = Date.UTC(year, month - 1, day); 58 const date = new Date(ms); 59 if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return null; 60 return ms; 61}; 62/** æªè¨å®ã表ãå¤ï¼ãã®ãªãã¸ããªã§ã¯ 0 㨠undefined ã®ä¸¡æ¹ã使ãããï¼ã */ 63var isUnset = (ymd) => ymd === void 0 || ymd === null || ymd === 0; 64/** 65* éå§æ¥ã»çµäºæ¥ã®çµã¿åãããæ¤è¨¼ããã 66* çµäºæ¥ãæªè¨å®ãªã常㫠OKï¼éå§æ¥ã®ã¿ãä¸¡æ¹æªè¨å®ã¯ã©ã¡ãã許容ï¼ã 67*/ 68var validateEventDateRange = (ymdStart, ymdEnd) => { 69 if (isUnset(ymdEnd)) return null; 70 if (isUnset(ymdStart)) return MESSAGE_INVALID_DATE_RANGE; 71 const startMs = ymdToUtcMs(ymdStart); 72 const endMs = ymdToUtcMs(ymdEnd); 73 if (startMs === null || endMs === null) return MESSAGE_INVALID_DATE_RANGE; 74 if (endMs < startMs) return MESSAGE_INVALID_DATE_RANGE; 75 if (endMs - startMs > 90 * MS_PER_DAY) return MESSAGE_DATE_RANGE_TOO_LONG; 76 return null; 77}; 78/** 79* ã¤ãã³ãçªå·ãæ¤è¨¼ãããç©ºã»æªè¨å®ã¯ OKï¼ä¿åæã«åé¤ãããï¼ã 80* æ¡æ°ãã§ãã¯ã¯ã¢ããªã¨åããæ°åã®ã¿ã«éãç¹ã¯ iOS ã®ãã£ã¼ã«ãåï¼numberï¼ã«åããã¦ããã 81*/ 82var validateMeetCode = (meetCode) => { 83 const trimmed = meetCode?.trim() ?? ""; 84 if (trimmed === "") return null; 85 if (trimmed.length !== 4) return MESSAGE_INVALID_MEET_CODE; 86 if (!/^\d+$/.test(trimmed)) return MESSAGE_INVALID_MEET_CODE; 87 return null; 88}; 89var isHttpUrl = (value) => { 90 try { 91 const url = new URL(value); 92 return url.protocol === "http:" || url.protocol === "https:"; 93 } catch { 94 return false; 95 } 96}; 97/** `scheme:` ãèªåã§æã£ã¦ãããï¼RFC 3986 ã® scheme æ§æï¼ã */ 98var HAS_SCHEME = /^[a-zA-Z][a-zA-Z0-9+.-]*:/; 99/** 100* ãã¬ã¤å¾ã«éã URL ãæ¤è¨¼ãããç©ºã»æªè¨å®ã¯ OKã 101* 102* Android 㯠`Patterns.WEB_URL` ã使ã£ã¦ãããã¹ãã¼ã ãªãï¼example.comï¼ããéãããã 103* ã¹ãã¼ã ãè£ã£ã¦åå¤å®ãã 2 段æ§ãã«ãã¦ããï¼æ¢åãã¼ã¿ãå¼¾ããªãããï¼ã 104* å¤ã®æ£è¦åã¯ããªãï¼ã¢ããªãä¿åããå¤ã¨åããã®ãä¿åããï¼ã 105* 106* ãã®å¤ã¯**ãã¤ãã£ãã¢ããªããã¬ã¤å¾ã«éã URL** ã¨ãã¦ä½¿ãããããã 107* `javascript:` ãªã©ã®ã¹ãã¼ã ãéãã¨ä¿åå XSS ã«ãªãã 108* ã¹ãã¼ã è£å®ã®åã«æ¬¡ãå¿ ãå¼¾ããã¨: 109* 110* - èªåã®ã¹ãã¼ã ãæã¤å ¥åï¼`javascript:...` / `vbscript:...` ãªã©ï¼ 111* â http/https ã¨ãã¦è§£éã§ããªãéã䏿£ã`new URL('https://' + 'javascript:alert(1);[email protected]')` 㯠112* `javascript:alert(1);x=` ã userinfoã`ex.com` ã host ã¨ãã¦**ãã¼ã¹ã«æåãã¦ãã¾ã** 113* - `//` å§ã¾ãï¼ãããã³ã«ç¸å¯¾ï¼ã¨ `\` ãå«ããã®ï¼UNC / ãã¹å½è£ ï¼ 114* - userinfo ä»ãï¼`user:pass@host`ï¼ããã£ãã·ã³ã°ç®çã® host å½è£ ã«ä½¿ããã 115*/ 116var validateCompletionUrl = (completionUrl) => { 117 const trimmed = completionUrl?.trim() ?? ""; 118 if (trimmed === "") return null; 119 if (HAS_SCHEME.test(trimmed)) return isHttpUrl(trimmed) && !hasUserInfo(trimmed) ? null : MESSAGE_INVALID_COMPLETION_URL; 120 if (trimmed.startsWith("//") || trimmed.includes("\\")) return MESSAGE_INVALID_COMPLETION_URL; 121 try { 122 const candidate = `https://${trimmed}`; 123 if (new URL(candidate).hostname.includes(".") && !hasUserInfo(candidate)) return null; 124 } catch {} 125 return MESSAGE_INVALID_COMPLETION_URL; 126}; 127var hasUserInfo = (value) => { 128 try { 129 const url = new URL(value); 130 return url.username !== "" || url.password !== ""; 131 } catch { 132 return false; 133 } 134}; 135/** å ¨è§æ°åãåè§ã«å¯ããï¼`ï¼ï¼ï¼ï¼` ãå¼¾ãã 1234 ã¨ãã¦æ±ãï¼ã */ 136var toHalfWidthDigits = (value) => value.replace(/[ï¼-ï¼]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 65248)); 137/** 138* ã¤ãã³ãçªå·ã®å ¥åæ£è¦åãæ°åã®ã¿ã»æå¤§ 4 æ¡ã«åãè©°ããã 139* ã¢ããªã 5 æå以ä¸ã¯ 4 æåã¸åãè©°ããï¼`EditEventFragment.callbackEditTextReturn`ï¼ã 140*/ 141var normalizeMeetCode = (value) => toHalfWidthDigits(String(value ?? "")).replace(/\D/g, "").slice(0, 4); 142/** 143* eventSetup ã®ä¿ååãã§ãã¯ãã¾ã¨ãã¦å®è¡ããã¨ã©ã¼ã® i18n ãã¼é åãè¿ãã 144* æç»å´ãåãã¼ã `t()` ã§è§£æ±ºãã¦è¡¨ç¤ºããã 145* ã¢ããªã¯è¤æ°ã¨ã©ã¼ãæ¹è¡é£çµã§ 1 ã¤ã®ãã¤ã¢ãã°ã«åºãï¼`EditEventFragment.saveButtonAction()`ï¼ã 146* 147* `previous` ãæ¸¡ãã¨ã`meetCode` / `completionUrl` ã¯**å¤ãå¤ãã£ãã¨ãã ã**æ¤è¨¼ããã 148* ããã㯠Pro ã²ã¼ãå¯¾è±¡ã§æªå¥ç´ã ã¨ç·¨éã§ããªããããæ¢åã®ä¸æ£å¤ãæ¤è¨¼ãã¦ãã¾ã㨠149* ãç´ããªãã®ã«ä¿åãã§ããªããç¶æ ã«ãªããæ¥ä»ã¯å¸¸ã«æ¤è¨¼ããï¼ã²ã¼ã対象å¤ã§ç´ããï¼ã 150*/ 151var validateEventSetup = (input, previous) => { 152 const isUnchanged = (key) => previous !== void 0 && (previous[key] ?? "") === (input[key] ?? ""); 153 return [ 154 validateEventDateRange(input.ymdStart, input.ymdEnd), 155 isUnchanged("meetCode") ? null : validateMeetCode(input.meetCode), 156 isUnchanged("completionUrl") ? null : validateCompletionUrl(input.completionUrl) 157 ].filter((message) => message !== null); 158}; 159//#endregion 160//#region utils/eventUpdatePayload.ts 161/** 162* ã¤ãã³ãæ´æ°ãã¤ãã¼ãã®çµã¿ç«ã¦ãã«ãã¼ã 163* 164* Firestore ã® `deleteField()` ãç´æ¥åç §ããªããããåé¤ã»ã³ããã«ã弿°ã§åãåãã 165* ãããããã¨ã§ Firebase ãã¢ãã¯ããã«ã¦ããããã¹ãã§ããã 166*/ 167/** 168* true ã®ã¨ãã ãæ¸ãè¾¼ã¿ããã以å¤ã¯åé¤ããã 169* ã¢ããªã® `data.put(key, value ? true : FieldValue.delete())` 170* ï¼NaviTabi-Android `EditEventFragment.getDataToSave()`ï¼ã¨åãæ±ãã 171*/ 172var boolOrDelete = (value, del) => value === true ? true : del(); 173/** 174* 空ã§ãªãæååã ãæ¸ãè¾¼ã¿ãç©ºã»æªè¨å®ã¯åé¤ããã
175* ã¢ããªã® `getStringOrFieldValueForDelete()` ç¸å½ã 176*/ 177var stringOrDelete = (value, del) => { 178 return value?.trim() || del(); 179}; 180/** 181* é常ã¤ãã³ãã§ Pro ã²ã¼ã対象ã®ãã£ã¼ã«ããå¤å®ã `available` ã§ãªãã¨ãã¯å¤æ´ãç¡å¹åããã 182* 183* iOS `AdminEditEventViewController` ãã²ã¼ããã 9 é ç® 184* ï¼`entryRequired` / `autoPhotoCheckEnabled` / `forceLiveTrack` / 185* `disableDisplayOtherPlayers` / `entryNumberRequired` / `completionUrl` / 186* `messageSendingOrganizerOnly` / `hideResults` / `hideActivityDetail`ï¼ã«ã 187* `entryRequired` ã¨å¯¾ã«ãªã `meetCode` ãå ãããã®ã 188* 189* **UI ã® `:disabled="!paidFeatureAvailable"` ã¨å¿ ãä¸è´ããããã¨ã** 190* çæ¹ã ãå¢ããã¨ãUI ã§ã¯è§¦ããã®ã«ä¿åãããªããã¾ãã¯ãUI ã§è§¦ããã®ã«ç´ éããã«ãªãã 191*/ 192var PAID_EVENT_FIELD_KEYS = [ 193 "entryRequired", 194 "meetCode", 195 "autoPhotoCheckEnabled", 196 "hideActivityDetail", 197 "forceLiveTrack", 198 "disableDisplayOtherPlayers", 199 "hideResults", 200 "entryNumberRequired", 201 "completionUrl", 202 "messageSendingOrganizerOnly" 203]; 204/** 205* å®å ¨ç®¡çã¤ãã³ãã§ Pro ã²ã¼ã対象ã®ãã£ã¼ã«ããé常ã¤ãã³ããã**çã**ã 206* 207* iOS `AdminEditSafetyEventViewController` ãã²ã¼ãããã®ã¯ 208* `entryNumberRequired` / `completionUrl` / `messageSendingOrganizerOnly` ã® 3 é ç®ã ãã§ã 209* `shareLiveMap`ï¼Web ã§ã¯ `hideResults` ã®å転ï¼ã¯ã²ã¼ããã¦ããªãã 210* é常ã¤ãã³ãã¨åããã¼éåã使ãã¨ãæªå¥ç´ã®ä¸»å¬è ããä¿åæåãã¨è¡¨ç¤ºãããã¾ã¾ 211* `shareLiveMap` ã®å¤æ´ãé»ã£ã¦å·»ãæ»ãããã 212*/ 213var PAID_SAFETY_EVENT_FIELD_KEYS = [ 214 "entryNumberRequired", 215 "completionUrl", 216 "messageSendingOrganizerOnly" 217]; 218/** 219* æææ©è½ã使ããªãã¨ãã« Pro é ç®ã®å¤æ´ãç¡å¹åããã 220* 221* ãã©ã¼ã å¤ã§ã¯ãªããèªã¿è¾¼ã¿æã® Firestore å¤ãã«æ»ãã`false` åºå®ã«ã¯ããªã: 222* æ¢åã® ON ãå·»ãæ»ãã¨ã°ã©ã³ããã¡ã¼ã¶ã¼ï¼å¥ç´å¤±å¹å¾ãæ¢åè¨å®ãç¶æããæåï¼ãå£ãããã 223* 224* 注æ: ããã¯ã»ãã¥ãªãã£å¢çã§ã¯ãªãã`firestore.rules` ã® events ã¯èªè¨¼ã ãã§ update ã 225* 許ãã¦ãããããã¯ã©ã¤ã¢ã³ãå´ã®å¤ã¯ SDK ç´å©ãã§åé¿ã§ãããããã§ã®ç®ç㯠226* ãUI ã§ç¡å¹åããé ç®ããç¶æ é·ç§»ã®éã DOM æä½ã§ä¿åãã
226ã¦ãã¾ããçµè·¯ãå¡ããã¨ã«éãããã 227*/ 228var clampPaidFields = (formValues, loadedValues, paidFieldKeys, available) => { 229 if (available) return { ...formValues }; 230 return paidFieldKeys.reduce((acc, key) => ({ 231 ...acc, 232 [key]: loadedValues[key] 233 }), { ...formValues }); 234}; 235//#endregion 236//#region pages/events/[eventId]/edit.vue?vue&type=script&setup=true&lang.ts 237init_preload_helper(); 238var _hoisted_1 = { 239 id: "info", 240 class: "text-h5 my-5" 241}; 242var _hoisted_2 = { 243 key: 1, 244 style: { 245 "border": "thin dashed", 246 "height": "150px" 247 } 248}; 249var _hoisted_3 = { class: "text-subtitle-1 font-weight-medium mt-4" }; 250var _hoisted_4 = { class: "text-subtitle-1 font-weight-medium mt-4" }; 251var _hoisted_5 = { class: "text-caption text-medium-emphasis mt-1" }; 252var _hoisted_6 = { class: "text-caption text-medium-emphasis mt-1" }; 253var _hoisted_7 = { class: "text-subtitle-1 font-weight-medium mt-4" }; 254var _hoisted_8 = { class: "text-subtitle-1 font-weight-medium mt-4" }; 255var _hoisted_9 = { class: "font-weight-light mb-2" }; 256var _hoisted_10 = { class: "font-weight-medium" }; 257//#endregion 258//#region pages/events/[eventId]/edit.vue 259var edit_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({ 260 __name: "edit", 261 setup(__props) { 262 definePageMeta({ layout: "mypage" }); 263 const authStore = useAuthStore(); 264 const { userInfo } = storeToRefs(authStore); 265 const router = useRouter(); 266 const route = useRoute(); 267 const { $toast } = useNuxtApp(); 268 const { showError } = useErrorToast(); 269 const config = useRuntimeConfig(); 270 const { t } = useI18n(); 271 const isSaving = ref(false); 272 const isDrawing = ref(false); 273 const user = ref(null); 274 const allTags = ref([]); 275 const maps = ref([]); 276 const event = ref(void 0); 277 const input = ref({ 278 name: "", 279 about: "", 280 description: "", 281 note: "", 282 country: "jp", 283 subdivision: "", 284 tags: [], 285 public: false, 286 coverImage: void 0, 287 map: "default", 288 ymdStart: 0, 289 ymdEnd: 0, 290 forceLiveTrack: false, 291 disableDisplayOtherPlayers: false, 292 entryNumberRequired: false, 293 organizerMessagingEnabled: false, 294 messageSendingOrganizerOnly: false, 295 hideResults: false, 296 hideActivityDetail: false, 297 autoPhotoCheckEnabled: false, 298 entryRequired: false, 299 meetCode: "" 300 }); 301 const loadedInput = ref(null); 302 const thumbnailUrl = ref(null); 303 let radiusMap = null; 304 const eventCircleCenter = ref(null); 305 const eventCircleRadius = ref(1e3); 306 const ymdStartMenu = ref(false); 307 const ymdEndMenu = ref(false); 308 const isSafetyEvent = ref(false); 309 const { paidFeatureAvailable, paidFeatureLocked, paidFeatureGate, resolvePaidFeature } = useSubscription(); 310 const trackingIntervalItems = computed(() => [ 311 { 312 text: t("event_form.interval_minutes", { n: 1 }), 313 value: 60 314 }, 315 { 316 text: t("event_form.interval_minutes", { n: 3 }), 317 value: 180 318 }, 319 { 320 text: t("event_form.interval_minutes", { n: 5 }), 321 value: 300 322 } 323 ]); 324 const paidFieldKeys = computed(() => isSafetyEvent.value ? PAID_SAFETY_EVENT_FIELD_KEYS : PAID_EVENT_FIELD_KEYS); 325 /** æææ©è½ã使ããªãã¨ã㯠Pro é ç®ã®å¤æ´ãèªã¿è¾¼ã¿æã®å¤ã«æ»ããå ¥åãè¿ãã */ 326 const buildClampedInput = () => clampPaidFields(input.value, loadedInput.value ?? {}, paidFieldKeys.value, paidFeatureAvailable.value); 327 const overlayVisible = computed(() => isSaving.value || isDrawing.value); 328 const shareLiveMap = computed({ 329 get: () => !input.value.hideResults, 330 set: (val) => { 331 input.value.hideResults = !val; 332 } 333 }); 334 const canSave = computed(() => { 335 if (!input.value.name || !input.value.subdivision) return false; 336 if (isSafetyEvent.value) { 337 if (!input.value.ymdStart) return false; 338 if (!eventCircleCenter.value) return false; 339 } 340 return true; 341 }); 342 const mapItems = computed(() => [{ 343 text: t("event_form.default_map"), 344 value: "default" 345 }, ...maps.value.map((map) => ({ 346 text: map.copyright ? t("map_manage.name_with_copyright", { 347 name: map.name, 348 copyright: map.copyright 349 }) : map.name, 350 value: map.id 351 }))]); 352 const countryItems = computed(() => { 353 return allCountries.map((data) => { 354 return { 355 text: data[0], 356 value: data[1].toLowerCase() 357 }; 358 }); 359 }); 360 const regionItems = computed(() => { 361 const countryIso = input.value.country.toUpperCase(); 362 const countryData = regions_default[countryIso]; 363 if (!countryData) return []; 364 return countryData.regions.sort((a, b) => +a.iso - +b.iso).map((region) => { 365 return { 366 text: region.name, 367 value: region.admin 368 }; 369 }); 370 }); 371 const breadcrumb = useEventBreadcrumb(event, { tail: () => [{ 372 title: t("breadcrumb.edit"), 373 to: `/events/${event.value?.id}/edit` 374 }] }); 375 const formatDate = (date) => { 376 if (!date) return "";
377 const year = Math.floor(date / 1e4); 378 const day = String(Math.floor(date % 100)).padStart(2, "0"); 379 return `${year}-${String(Math.floor(date / 100 % 100)).padStart(2, "0")}-${day}`; 380 }; 381 const parseDate = (date) => { 382 if (!date) return 0; 383 if (date instanceof Date) { 384 const year = date.getFullYear(); 385 const month = date.getMonth() + 1; 386 const day = date.getDate(); 387 return year * 1e4 + month * 100 + day; 388 } 389 const [year, month, day] = date.split("-"); 390 return Number(year) * 1e4 + Number(month) * 100 + Number(day); 391 }; 392 const ymdStartForDP = computed({ 393 get: () => { 394 if (!input.value.ymdStart) return void 0; 395 return formatDate(input.value.ymdStart); 396 }, 397 set: (date) => { 398 input.value.ymdStart = parseDate(date); 399 } 400 }); 401 const ymdEndForDP = computed({ 402 get: () => { 403 if (!input.value.ymdEnd) return void 0; 404 return formatDate(input.value.ymdEnd); 405 }, 406 set: (date) => { 407 input.value.ymdEnd = parseDate(date); 408 } 409 }); 410 const preventNav = (event) => { 411 if (isSaving.value) return; 412 event.preventDefault(); 413 event.returnValue = ""; 414 }; 415 const fetch = async () => { 416 event.value = await fetchEventDeeply(route.params.eventId); 417 if (!event.value) return; 418 isSafetyEvent.value = event.value.type === "safety"; 419 input.value = { 420 name: event.value.name, 421 about: event.value.about || "", 422 description: event.value.description || "", 423 note: event.value.note || "", 424 country: event.value.country || "jp", 425 subdivision: event.value.subdivision || "", 426 tags: event.value.tags || [], 427 public: event.value.public, 428 map: event.value.map ?? "default", 429 ymdStart: event.value.ymdStart, 430 ymdEnd: event.value.ymdEnd, 431 forceLiveTrack: event.value.forceLiveTrack, 432 disableDisplayOtherPlayers: event.value.disableDisplayOtherPlayers, 433 entryNumberRequired: event.value.entryNumberRequired, 434 organizerMessagingEnabled: event.value.organizerMessagingEnabled, 435 messageSendingOrganizerOnly: event.value.messageSendingOrganizerOnly, 436 hideResults: event.value.hideResults, 437 hideActivityDetail: event.value.hideActivityDetail, 438 autoPhotoCheckEnabled: event.value.autoPhotoCheckEnabled, 439 entryRequired: event.value.entryRequired, 440 meetCode: event.value.meetCode ?? "", 441 type: event.value.type, 442 showUserLocationOnMap: event.value.showUserLocationOnMap, 443 safetyTrackingInterval: event.value.safetyTrackingInterval ?? 180, 444 completionUrl: event.value.completionUrl 445 }; 446 loadedInput.value = { ...input.value }; 447 if (event.value.imageUrl) { 448 const imageUrl = getUrl(event.value.imageUrl); 449 thumbnailUrl.value = imageUrl; 450 } 451 }; 452 const handleFileInput = (file) => { 453 if (!file) { 454 thumbnailUrl.value = null; 455 delete input.value.coverImage; 456 return; 457 } 458 const name = file.name; 459 resizeImage(file, (resized) => { 460 thumbnailUrl.value = resized; 461 input.value = { 462 ...input.value, 463 coverImage: { 464 url: resized, 465 name 466 } 467 }; 468 }); 469 }; 470 const handleTagInput = (tags) => { 471 allTags.value = Array.from(/* @__PURE__ */ new Set([...tags, ...allTags.value])); 472 }; 473 const handleMeetCodeInput = (value) => { 474 const raw = String(value ?? ""); 475 const normalized = normalizeMeetCode(raw); 476 if (raw === normalized) { 477 input.value = { 478 ...input.value, 479 meetCode: normalized 480 }; 481 return; 482 } 483 input.value = { 484 ...input.value, 485 meetCode: raw 486 }; 487 nextTick(() => { 488 input.value = { 489 ...input.value, 490 meetCode: normalized 491 }; 492 }); 493 }; 494 const initRadiusMap = (event) => { 495 if (!radiusMap) return; 496 event.spots.forEach((spot) => { 497 const sourceId = `radiusPoint${spot.id}`; 498 drawSpotCircle(radiusMap, sourceId, spot); 499 }); 500 if (event.location && event.radius) { 501 eventCircleRadius.value = event.radius; 502 eventCircleCenter.value = event.location; 503 drawEventCircle(radiusMap, "eventCircle", event.radius, event.location); 504 } 505 radiusMap.on("click", (e) => { 506 const loc = { 507 latitude: e.lngLat.lat, 508 longitude: e.lngLat.lng 509 }; 510 eventCircleCenter.value = loc; 511 drawEventCircle(radiusMap, "eventCircle", eventCircleRadius.value, loc); 512 }); 513 }; 514 const initMap = async (event) => { 515 const GeocoderModule = await __vitePreload(() => import("./CSy0m-SZ2.js").then((m) => /* @__PURE__ */ __toESM(m.default)), __vite__mapDeps([0,1]), import.meta.url); 516 const MapboxGeocoder = GeocoderModule.default || GeocoderModule; 517 const defaultCenter = { 518 latitude: 35.6895, 519 longitude: 139.69171 520 }; 521 const mapboxModule = await __vitePreload(() => import("./DDsE4vUS2.js").then((n) => /* @__PURE__ */ __toESM(n.t())), __vite__mapDeps([2,1,3]), import.meta.url); 522 const mapboxgl = mapboxModule.default || mapboxModule; 523 if (!config.public.mapboxToken) { 524 console.error("mapbox token not found"); 525 return; 526 } 527 mapboxgl.accessToken = config.public.mapboxToken; 528 const firstSpot = event.spots[0]; 529 const rCenter = event.location || (firstSpot ? firstSpot.location : defaultCenter); 530 radiusMap = new mapboxgl.Map({ 531 attributionControl: false, 532 container: "radius-map", 533 center: [rCenter.longitude, rCenter.latitude], 534 zoom: event.location || event.spots.length > 0 ? 14.15 : 1, 535 style: "mapbox://styles/mapbox/streets-v11" 536 }); 537 await new Promise((resolve, reject) => { 538 if (!radiusMap) return reject(/* @__PURE__ */ new Error("map not found")); 539 radiusMap.on("load", () => { 540 resolve(); 541 }); 542 radiusMap.on("error", () => { 543 reject(/* @__PURE__ */ new Error("Error happened when initializing mapbox")); 544 }); 545 }); 546 radiusMap.addControl(new MapboxGeocoder({ 547 accessToken: mapboxgl.accessToken, 548 mapboxgl, 549 marker: false 550 })); 551 if (event.radius && event.location) { 552 const { longitude, latitude } = event.location; 553 fitCircleBounds(radiusMap, [longitude, latitude], event.radius, { padding: 10 }); 554 } 555 }; 556 const saveEventInfo = async (clamped) => { 557 if (!user.value || !event.value) return; 558 let _input = { ...clamped }; 559 if (_input.map === "default") _input.map = deleteField(); 560 if (clamped.ymdStart === 0) _input.ymdStart = deleteField(); 561 if (clamped.ymdEnd === 0) _input.ymdEnd = deleteField(); 562 if (eventCircleRadius.value) _input = { 563 ..._input, 564 radius: +eventCircleRadius.value 565 }; 566 if (eventCircleCenter.value) _input = { 567 ..._input, 568 location: OLocationToGeoPoint(eventCircleCenter.value) 569 }; 570 try { 571 isSaving.value = true; 572 let gsUrl = null;
573 await updateByEventTags(input.value.tags, event.value.tags || []); 574 Object.keys(_input).forEach((key) => { 575 if (_input[key] === void 0) delete _input[key]; 576 }); 577 if (isSafetyEvent.value) { 578 delete _input.entryRequired; 579 delete _input.autoPhotoCheckEnabled; 580 delete _input.hideActivityDetail; 581 delete _input.meetCode; 582 } else { 583 _input.entryRequired = boolOrDelete(clamped.entryRequired, deleteField); 584 _input.autoPhotoCheckEnabled = boolOrDelete(clamped.autoPhotoCheckEnabled, deleteField); 585 _input.hideActivityDetail = boolOrDelete(clamped.hideActivityDetail, deleteField); 586 _input.meetCode = stringOrDelete(clamped.meetCode, deleteField); 587 } 588 if (_input.coverImage && _input.coverImage.name) { 589 gsUrl = await uploadCoverImage(event.value.id, _input.coverImage.url, _input.coverImage.name); 590 delete _input.coverImage; 591 await updateEventInfo(event.value.id, { 592 ..._input, 593 imageUrl: gsUrl 594 }); 595 } else { 596 if (!thumbnailUrl.value) delete _input.coverImage; 597 await updateEventInfo(event.value.id, _input); 598 } 599 $toast.success(t("admin.saved_success")); 600 } catch (error) { 601 showError(error); 602 } finally { 603 isSaving.value = false; 604 } 605 await fetch(); 606 }; 607 const onSaveAll = async () => { 608 const clamped = buildClampedInput(); 609 const errors = validateEventSetup({ 610 ymdStart: clamped.ymdStart, 611 ymdEnd: clamped.ymdEnd, 612 meetCode: clamped.meetCode, 613 completionUrl: clamped.completionUrl 614 }, { 615 meetCode: loadedInput.value?.meetCode, 616 completionUrl: loadedInput.value?.completionUrl 617 }); 618 if (errors.length > 0) { 619 $toast.error(errors.map((key) => t(key)).join("\n")); 620 return; 621 } 622 await saveEventInfo(clamped); 623 }; 624 watch(() => input.value.entryRequired, (enabled, wasEnabled) => { 625 if (!enabled && wasEnabled && input.value.meetCode) input.value = { 626 ...input.value, 627 meetCode: "" 628 }; 629 }); 630 watch(eventCircleRadius, () => { 631 if (!eventCircleCenter.value || !radiusMap) return; 632 drawEventCircle(radiusMap, "eventCircle", eventCircleRadius.value, eventCircleCenter.value); 633 }); 634 onMounted(async () => { 635 window.addEventListener("beforeunload", preventNav); 636 if (!userInfo.value) return; 637 try { 638 const fetchedEvent = await fetchEventById(route.params.eventId); 639 if (!isEventOwner(userInfo.value, fetchedEvent)) { 640 router.push("/"); 641 return; 642 } 643 isDrawing.value = true; 644 const [_allTags, _user, _maps] = await Promise.all([ 645 fetchValidTags(), 646 fetchUser(userInfo.value.uid), 647 fetchMapsByOwner(userInfo.value.uid) 648 ]); 649 allTags.value = _allTags.map((tag) => tag.tag); 650 user.value = _user; 651 maps.value = _maps; 652 await fetch(); 653 if (!event.value) throw new Error("Failed to initialize event object"); 654 const paidFeaturePromise = resolvePaidFeature(user.value, event.value); 655 await nextTick(); 656 await initMap(event.value); 657 if (!radiusMap) throw new Error("Failed to initialize map object"); 658 await drawTile(radiusMap, event.value); 659 initRadiusMap(event.value); 660 await paidFeaturePromise; 661 } catch (e) { 662 showError(e); 663 } finally { 664 isDrawing.value = false; 665 } 666 }); 667 onBeforeUnmount(() => { 668 window.removeEventListener("beforeunload", preventNav); 669 }); 670 onBeforeRouteLeave((_to, _from, next) => { 671 if (isSaving.value) { 672 next(); 673 return; 674 } 675 if (!window.confirm(t("admin.leave_confirm"))) { 676 next(false); 677 return; 678 } 679 next(); 680 }); 681 return (_ctx, _cache) => { 682 const _component_v_breadcrumbs = resolveComponent("v-breadcrumbs"); 683 const _component_v_icon = resolveComponent("v-icon"); 684 const _component_v_chip = resolveComponent("v-chip"); 685 const _component_v_col = resolveComponent("v-col"); 686 const _component_v_text_field = resolveComponent("v-text-field"); 687 const _component_v_textarea = resolveComponent("v-textarea"); 688 const _component_v_autocomplete = resolveComponent("v-autocomplete"); 689 const _component_v_combobox = resolveComponent("v-combobox"); 690 const _component_v_file_input = resolveComponent("v-file-input");
691 const _component_v_img = resolveComponent("v-img"); 692 const _component_v_select = resolveComponent("v-select"); 693 const _component_v_date_picker = resolveComponent("v-date-picker"); 694 const _component_v_menu = resolveComponent("v-menu"); 695 const _component_v_divider = resolveComponent("v-divider"); 696 const _component_v_switch = resolveComponent("v-switch"); 697 const _component_CommonPaidFeatureNote = PaidFeatureNote_default; 698 const _component_CommonPaidFeatureSwitch = PaidFeatureSwitch_default; 699 const _component_v_btn = resolveComponent("v-btn"); 700 const _component_v_row = resolveComponent("v-row"); 701 const _component_v_form = resolveComponent("v-form"); 702 const _component_v_container = resolveComponent("v-container"); 703 const _component_v_progress_circular = resolveComponent("v-progress-circular"); 704 const _component_v_overlay = resolveComponent("v-overlay"); 705 return openBlock(), createElementBlock("div", null, [ 706 createVNode(_component_v_breadcrumbs, { items: unref(breadcrumb) }, null, 8, ["items"]), 707 createVNode(_component_v_container, null, { 708 default: withCtx(() => [createBaseVNode("div", _hoisted_1, toDisplayString(unref(t)("event_form.event_information")), 1), createVNode(_component_v_form, { 709 ref: "form", 710 "lazy-validation": "" 711 }, { 712 default: withCtx(() => [createVNode(_component_v_row, null, { 713 default: withCtx(() => [ 714 isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, { 715 key: 0, 716 cols: "12" 717 }, { 718 default: withCtx(() => [createVNode(_component_v_chip, { 719 color: "orange", 720 variant: "flat", 721 label: "", 722 class: "text-white" 723 }, { 724 default: withCtx(() => [createVNode(_component_v_icon, { start: "" }, { 725 default: withCtx(() => [..._cache[33] || (_cache[33] = [createTextVNode("mdi-shield-check", -1)])]), 726 _: 1 727 }), createTextVNode(" " + toDisplayString(unref(t)("event_form.safety_tracking_event")), 1)]), 728 _: 1 729 })]), 730 _: 1 731 })) : createCommentVNode("", true), 732 createVNode(_component_v_col, { 733 cols: "12", 734 sm: "6" 735 }, { 736 default: withCtx(() => [createVNode(_component_v_text_field, { 737 modelValue: input.value.name, 738 "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => input.value.name = $event), 739 variant: "outlined", 740 "hide-details": "", 741 label: `${unref(t)("explore.event_name")}*`, 742 required: "" 743 }, null, 8, ["modelValue", "label"])]), 744 _: 1 745 }), 746 createVNode(_component_v_col, { 747 cols: "12", 748 sm: "6" 749 }, { 750 default: withCtx(() => [createVNode(_component_v_text_field, { 751 modelValue: input.value.about, 752 "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => input.value.about = $event), 753 variant: "outlined", 754 "hide-details": "", 755 label: unref(t)("event_form.subtitle") 756 }, null, 8, ["modelValue", "label"])]), 757 _: 1 758 }), 759 createVNode(_component_v_col, { cols: "12" }, { 760 default: withCtx(() => [createVNode(_component_v_textarea, { 761 modelValue: input.value.description, 762 "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => input.value.description = $event), 763 label: unref(t)("event_form.description"), 764 rows: "4", 765 variant: "outlined", 766 "hide-details": "" 767 }, null, 8, ["modelValue", "label"])]), 768 _: 1 769 }), 770 !isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, { 771 key: 1, 772 cols: "12" 773 }, { 774 default: withCtx(() => [createVNode(_component_v_text_field, { 775 modelValue: input.value.note, 776 "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => input.value.note = $event), 777 variant: "outlined", 778 "hide-details": "", 779 label: unref(t)("event_form.precautions") 780 }, null, 8, ["modelValue", "label"])]), 781 _: 1 782 })) : createCommentVNode("", true), 783 createVNode(_component_v_col, { 784 cols: "12", 785 sm: "6" 786 }, {
787 default: withCtx(() => [createVNode(_component_v_autocomplete, { 788 modelValue: input.value.country, 789 "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => input.value.country = $event), 790 items: countryItems.value, 791 variant: "outlined", 792 "hide-details": "", 793 "item-title": "text", 794 "item-value": "value", 795 label: `${unref(t)("event_form.country")}*`, 796 disabled: "" 797 }, null, 8, [ 798 "modelValue", 799 "items", 800 "label" 801 ])]), 802 _: 1 803 }), 804 createVNode(_component_v_col, { 805 cols: "12", 806 sm: "6" 807 }, { 808 default: withCtx(() => [createVNode(_component_v_autocomplete, { 809 modelValue: input.value.subdivision, 810 "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => input.value.subdivision = $event), 811 items: regionItems.value, 812 "item-title": "text", 813 "item-value": "value", 814 label: `${unref(t)("event_form.subdivision")}*`, 815 variant: "outlined", 816 "hide-details": "" 817 }, null, 8, [ 818 "modelValue", 819 "items", 820 "label" 821 ])]), 822 _: 1 823 }), 824 !isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, { 825 key: 2, 826 cols: "12" 827 }, { 828 default: withCtx(() => [createVNode(_component_v_combobox, { 829 modelValue: input.value.tags, 830 "onUpdate:modelValue": [_cache[6] || (_cache[6] = ($event) => input.value.tags = $event), _cache[7] || (_cache[7] = (e) => handleTagInput(e))], 831 variant: "outlined", 832 "hide-details": "", 833 items: allTags.value, 834 chips: "", 835 label: unref(t)("event_form.tags_label"), 836 multiple: "", 837 "hide-no-data": "" 838 }, null, 8, [ 839 "modelValue", 840 "items", 841 "label" 842 ])]), 843 _: 1 844 })) : createCommentVNode("", true), 845 createVNode(_component_v_col, { 846 cols: "12", 847 sm: "6" 848 }, { 849 default: withCtx(() => [createVNode(_component_v_file_input, { 850 accept: "image/*", 851 label: unref(t)("event_form.cover_image"), 852 variant: "outlined", 853 "prepend-icon": "", 854 class: "mb-2", 855 "hide-details": "", 856 "prepend-inner-icon": "mdi-paperclip", 857 "onUpdate:modelValue": handleFileInput 858 }, null, 8, ["label"]), thumbnailUrl.value ? (openBlock(), createBlock(_component_v_img, { 859 key: 0, 860 src: thumbnailUrl.value, 861 alt: unref(t)("event_form.cover_image"), 862 height: "150px" 863 }, null, 8, ["src", "alt"])) : (openBlock(), createElementBlock("div", _hoisted_2))]), 864 _: 1 865 }), 866 createVNode(_component_v_col, { 867 cols: "12", 868 sm: "6" 869 }, { 870 default: withCtx(() => [createVNode(_component_v_select, { 871 modelValue: input.value.map, 872 "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => input.value.map = $event), 873 variant: "outlined", 874 items: mapItems.value, 875 "item-title": "text", 876 "item-value": "value", 877 "hide-details": "", 878 label: unref(t)("event_form.background_map") 879 }, null, 8, [ 880 "modelValue", 881 "items", 882 "label" 883 ])]), 884 _: 1 885 }), 886 createVNode(_component_v_col, { 887 cols: "6", 888 sm: "6" 889 }, { 890 default: withCtx(() => [createVNode(_component_v_menu, { 891 modelValue: ymdStartMenu.value, 892 "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => ymdStartMenu.value = $event), 893 "close-on-content-click": false, 894 transition: "scale-transition", 895 location: "bottom", 896 "min-width": "auto" 897 }, { 898 activator: withCtx(({ props }) => [createVNode(_component_v_text_field, mergeProps({ 899 modelValue: ymdStartForDP.value, 900 "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => ymdStartForDP.value = $event), 901 label: isSafetyEvent.value ? `${unref(t)("event_form.start_date")}*` : unref(t)("event_form.start_date"), 902 "prepend-icon": "mdi-calendar", 903 readonly: "" 904 }, props, { clearable: "" }), null, 16, ["modelValue", "label"])]), 905 default: withCtx(() => [createVNode(_component_v_date_picker, {
906 modelValue: ymdStartForDP.value, 907 "onUpdate:modelValue": [_cache[10] || (_cache[10] = ($event) => ymdStartForDP.value = $event), _cache[11] || (_cache[11] = ($event) => ymdStartMenu.value = false)], 908 scrollable: "", 909 "hide-header": "" 910 }, null, 8, ["modelValue"])]), 911 _: 1 912 }, 8, ["modelValue"])]), 913 _: 1 914 }), 915 createVNode(_component_v_col, { 916 cols: "6", 917 sm: "6" 918 }, { 919 default: withCtx(() => [createVNode(_component_v_menu, { 920 modelValue: ymdEndMenu.value, 921 "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => ymdEndMenu.value = $event), 922 "close-on-content-click": false, 923 transition: "scale-transition", 924 location: "bottom", 925 "min-width": "auto" 926 }, { 927 activator: withCtx(({ props }) => [createVNode(_component_v_text_field, mergeProps({ 928 modelValue: ymdEndForDP.value, 929 "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => ymdEndForDP.value = $event), 930 label: unref(t)("event_form.end_date"), 931 "prepend-icon": "mdi-calendar", 932 readonly: "" 933 }, props, { clearable: "" }), null, 16, ["modelValue", "label"])]), 934 default: withCtx(() => [createVNode(_component_v_date_picker, { 935 modelValue: ymdEndForDP.value, 936 "onUpdate:modelValue": [_cache[14] || (_cache[14] = ($event) => ymdEndForDP.value = $event), _cache[15] || (_cache[15] = ($event) => ymdEndMenu.value = false)], 937 scrollable: "", 938 "hide-header": "" 939 }, null, 8, ["modelValue"])]), 940 _: 1 941 }, 8, ["modelValue"])]), 942 _: 1 943 }), 944 isSafetyEvent.value ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [ 945 createVNode(_component_v_col, { 946 cols: "12", 947 class: "my-2" 948 }, { 949 default: withCtx(() => [createVNode(_component_v_divider), createBaseVNode("div", _hoisted_3, toDisplayString(unref(t)("event_form.safety_settings")), 1)]), 950 _: 1 951 }), 952 createVNode(_component_v_col, { 953 cols: "6", 954 sm: "6" 955 }, { 956 default: withCtx(() => [createVNode(_component_v_select, { 957 modelValue: input.value.safetyTrackingInterval, 958 "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => input.value.safetyTrackingInterval = $event), 959 items: trackingIntervalItems.value, 960 "item-title": "text", 961 "item-value": "value", 962 variant: "outlined", 963 "hide-details": "", 964 label: unref(t)("event_form.tracking_interval") 965 }, null, 8, [ 966 "modelValue", 967 "items", 968 "label" 969 ])]), 970 _: 1 971 }), 972 createVNode(_component_v_col, { 973 cols: "6", 974 sm: "6" 975 }, { 976 default: withCtx(() => [createVNode(_component_v_switch, { 977 modelValue: input.value.showUserLocationOnMap, 978 "onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => input.value.showUserLocationOnMap = $event), 979 color: "primary", 980 "hide-details": "", 981 label: unref(t)("event_form.show_map_to_participants") 982 }, null, 8, ["modelValue", "label"])]), 983 _: 1 984 }), 985 createVNode(_component_v_col, { 986 cols: "6", 987 sm: "6" 988 }, { 989 default: withCtx(() => [createVNode(_component_v_switch, { 990 modelValue: shareLiveMap.value, 991 "onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => shareLiveMap.value = $event), 992 color: "primary", 993 "hide-details": "", 994 label: unref(t)("event_form.share_live_map") 995 }, null, 8, ["modelValue", "label"])]), 996 _: 1 997 }) 998 ], 64)) : createCommentVNode("", true), 999 !isSafetyEvent.value ? (openBlock(), createElementBlock(Fragment, { key: 4 }, [ 1000 createVNode(_component_v_col, { 1001 cols: "12", 1002 class: "my-2" 1003 }, {
1004 default: withCtx(() => [ 1005 createVNode(_component_v_divider), 1006 createBaseVNode("div", _hoisted_4, toDisplayString(unref(t)("event_form.event_settings")), 1), 1007 createVNode(_component_CommonPaidFeatureNote, { 1008 gate: unref(paidFeatureGate), 1009 class: "mt-1" 1010 }, null, 8, ["gate"]) 1011 ]), 1012 _: 1 1013 }), 1014 createVNode(_component_v_col, { 1015 cols: "6", 1016 sm: "6" 1017 }, { 1018 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1019 modelValue: input.value.entryRequired, 1020 "onUpdate:modelValue": _cache[20] || (_cache[20] = ($event) => input.value.entryRequired = $event), 1021 label: unref(t)("event_form.require_approval"), 1022 gate: unref(paidFeatureGate) 1023 }, null, 8, [ 1024 "modelValue", 1025 "label", 1026 "gate" 1027 ]), createBaseVNode("div", _hoisted_5, toDisplayString(unref(t)("event_form.approval_in_app_note")), 1)]), 1028 _: 1 1029 }), 1030 createVNode(_component_v_col, { 1031 cols: "6", 1032 sm: "6" 1033 }, { 1034 default: withCtx(() => [createVNode(_component_v_text_field, { 1035 "model-value": input.value.meetCode, 1036 variant: "outlined", 1037 "hide-details": "", 1038 label: unref(t)("event_form.event_number"), 1039 inputmode: "numeric", 1040 maxlength: "4", 1041 placeholder: "1234", 1042 disabled: !unref(paidFeatureAvailable) || !input.value.entryRequired, 1043 "prepend-inner-icon": unref(paidFeatureLocked) ? "mdi-lock" : void 0, 1044 "onUpdate:modelValue": handleMeetCodeInput 1045 }, null, 8, [ 1046 "model-value", 1047 "label", 1048 "disabled", 1049 "prepend-inner-icon" 1050 ]), createBaseVNode("div", _hoisted_6, toDisplayString(unref(t)("event_form.event_number_note")), 1)]), 1051 _: 1 1052 }), 1053 createVNode(_component_v_col, { 1054 cols: "6", 1055 sm: "6" 1056 }, { 1057 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1058 modelValue: input.value.autoPhotoCheckEnabled, 1059 "onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => input.value.autoPhotoCheckEnabled = $event), 1060 label: unref(t)("event_form.auto_photo_check"), 1061 gate: unref(paidFeatureGate) 1062 }, null, 8, [ 1063 "modelValue", 1064 "label", 1065 "gate" 1066 ])]), 1067 _: 1 1068 }), 1069 createVNode(_component_v_col, { 1070 cols: "6", 1071 sm: "6" 1072 }, { 1073 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1074 modelValue: input.value.forceLiveTrack, 1075 "onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => input.value.forceLiveTrack = $event), 1076 label: unref(t)("event_form.always_live_tracking"), 1077 gate: unref(paidFeatureGate) 1078 }, null, 8, [ 1079 "modelValue", 1080 "label", 1081 "gate" 1082 ])]), 1083 _: 1 1084 }), 1085 createVNode(_component_v_col, { 1086 cols: "6", 1087 sm: "6" 1088 }, { 1089 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1090 modelValue: input.value.disableDisplayOtherPlayers, 1091 "onUpdate:modelValue": _cache[23] || (_cache[23] = ($event) => input.value.disableDisplayOtherPlayers = $event), 1092 label: unref(t)("event_form.hide_other_players"), 1093 gate: unref(paidFeatureGate) 1094 }, null, 8, [ 1095 "modelValue", 1096 "label", 1097 "gate" 1098 ])]), 1099 _: 1 1100 }), 1101 createVNode(_component_v_col, { 1102 cols: "6", 1103 sm: "6" 1104 }, { 1105 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1106 modelValue: input.value.hideResults, 1107 "onUpdate:modelValue": _cache[24] || (_cache[24] = ($event) => input.value.hideResults = $event), 1108 label: unref(t)("event_form.hide_results"), 1109 gate: unref(paidFeatureGate) 1110 }, null, 8, [ 1111 "modelValue", 1112 "label", 1113 "gate" 1114 ])]), 1115 _: 1 1116 }), 1117 createVNode(_component_v_col, { 1118 cols: "6", 1119 sm: "6" 1120 }, {
1121 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1122 modelValue: input.value.hideActivityDetail, 1123 "onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => input.value.hideActivityDetail = $event), 1124 label: unref(t)("event_form.hide_activity_detail"), 1125 gate: unref(paidFeatureGate) 1126 }, null, 8, [ 1127 "modelValue", 1128 "label", 1129 "gate" 1130 ])]), 1131 _: 1 1132 }) 1133 ], 64)) : createCommentVNode("", true), 1134 createVNode(_component_v_col, { 1135 cols: "12", 1136 class: "my-2" 1137 }, { 1138 default: withCtx(() => [ 1139 createVNode(_component_v_divider), 1140 createBaseVNode("div", _hoisted_7, toDisplayString(unref(t)("event_form.advanced_settings")), 1), 1141 createVNode(_component_CommonPaidFeatureNote, { 1142 gate: unref(paidFeatureGate), 1143 class: "mt-1" 1144 }, null, 8, ["gate"]) 1145 ]), 1146 _: 1 1147 }), 1148 createVNode(_component_v_col, { 1149 cols: "6", 1150 sm: "6" 1151 }, { 1152 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1153 modelValue: input.value.entryNumberRequired, 1154 "onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => input.value.entryNumberRequired = $event), 1155 label: unref(t)("event_form.require_entry_number"), 1156 gate: unref(paidFeatureGate) 1157 }, null, 8, [ 1158 "modelValue", 1159 "label", 1160 "gate" 1161 ])]), 1162 _: 1 1163 }), 1164 createVNode(_component_v_col, { 1165 cols: "6", 1166 sm: "6" 1167 }, { 1168 default: withCtx(() => [createVNode(_component_v_text_field, { 1169 modelValue: input.value.completionUrl, 1170 "onUpdate:modelValue": _cache[27] || (_cache[27] = ($event) => input.value.completionUrl = $event), 1171 variant: "outlined", 1172 "hide-details": "", 1173 label: unref(t)("event_form.completion_url"), 1174 type: "url", 1175 placeholder: "https://...", 1176 disabled: !unref(paidFeatureAvailable), 1177 "prepend-inner-icon": unref(paidFeatureLocked) ? "mdi-lock" : void 0 1178 }, null, 8, [ 1179 "modelValue", 1180 "label", 1181 "disabled", 1182 "prepend-inner-icon" 1183 ])]), 1184 _: 1 1185 }), 1186 createVNode(_component_v_col, { 1187 cols: "6", 1188 sm: "6" 1189 }, { 1190 default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, { 1191 modelValue: input.value.messageSendingOrganizerOnly, 1192 "onUpdate:modelValue": _cache[28] || (_cache[28] = ($event) => input.value.messageSendingOrganizerOnly = $event), 1193 label: unref(t)("event_form.restrict_messages"), 1194 gate: unref(paidFeatureGate) 1195 }, null, 8, [ 1196 "modelValue", 1197 "label", 1198 "gate" 1199 ])]), 1200 _: 1 1201 }), 1202 createVNode(_component_v_col, { 1203 cols: "6", 1204 sm: "6" 1205 }, { 1206 default: withCtx(() => [createVNode(_component_v_switch, { 1207 modelValue: input.value.organizerMessagingEnabled, 1208 "onUpdate:modelValue": _cache[29] || (_cache[29] = ($event) => input.value.organizerMessagingEnabled = $event), 1209 color: "primary", 1210 "hide-details": "", 1211 label: unref(t)("event_form.organizer_messaging") 1212 }, null, 8, ["modelValue", "label"])]), 1213 _: 1 1214 }), 1215 createVNode(_component_v_col, { 1216 cols: "12", 1217 class: "my-2" 1218 }, { 1219 default: withCtx(() => [createVNode(_component_v_divider), createBaseVNode("div", _hoisted_8, toDisplayString(unref(t)("event_form.event_area")) + toDisplayString(isSafetyEvent.value ? "*" : ""), 1)]), 1220 _: 1 1221 }), 1222 createVNode(_component_v_col, { 1223 cols: "12", 1224 sm: "6" 1225 }, { 1226 default: withCtx(() => [..._cache[34] || (_cache[34] = [createBaseVNode("div", { 1227 id: "radius-map", 1228 class: "radius_map" 1229 }, null, -1)])]), 1230 _: 1 1231 }), 1232 createVNode(_component_v_col, { 1233 cols: "12", 1234 sm: "6" 1235 }, {
1236 default: withCtx(() => [createBaseVNode("div", _hoisted_9, [createTextVNode(toDisplayString(unref(t)("event_form.define_area")) + " ", 1), createVNode(_component_v_icon, null, { 1237 default: withCtx(() => [..._cache[35] || (_cache[35] = [createTextVNode("mdi-cursor-default-click", -1)])]), 1238 _: 1 1239 })]), createVNode(_component_v_text_field, { 1240 modelValue: eventCircleRadius.value, 1241 "onUpdate:modelValue": _cache[30] || (_cache[30] = ($event) => eventCircleRadius.value = $event), 1242 label: unref(t)("event_form.circle_radius"), 1243 variant: "outlined", 1244 "hide-details": "", 1245 required: "", 1246 step: "25", 1247 min: "0", 1248 type: "number" 1249 }, null, 8, ["modelValue", "label"])]), 1250 _: 1 1251 }), 1252 createVNode(_component_v_col, { 1253 cols: "12", 1254 class: "my-2" 1255 }, { 1256 default: withCtx(() => [createVNode(_component_v_divider)]), 1257 _: 1 1258 }), 1259 createVNode(_component_v_col, { 1260 cols: "12", 1261 sm: "6" 1262 }, { 1263 default: withCtx(() => [createVNode(_component_v_switch, { 1264 modelValue: input.value.public, 1265 "onUpdate:modelValue": _cache[31] || (_cache[31] = ($event) => input.value.public = $event), 1266 color: "primary", 1267 label: unref(t)("event_form.publish"), 1268 "hide-details": "" 1269 }, null, 8, ["modelValue", "label"])]), 1270 _: 1 1271 }), 1272 !isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, { 1273 key: 5, 1274 cols: "12" 1275 }, { 1276 default: withCtx(() => [createBaseVNode("div", _hoisted_10, toDisplayString(unref(t)("event_form.setup_note")), 1)]), 1277 _: 1 1278 })) : createCommentVNode("", true), 1279 createVNode(_component_v_col, { cols: "12" }, { 1280 default: withCtx(() => [createVNode(_component_v_btn, { 1281 loading: isSaving.value, 1282 disabled: !canSave.value, 1283 color: "primary", 1284 variant: "flat", 1285 class: "text-capitalize", 1286 block: "", 1287 rounded: "", 1288 onClick: onSaveAll 1289 }, { 1290 default: withCtx(() => [createTextVNode(toDisplayString(unref(t)("common.save")) + " ", 1), createVNode(_component_v_icon, { end: "" }, { 1291 default: withCtx(() => [..._cache[36] || (_cache[36] = [createTextVNode("mdi-cloud-upload", -1)])]), 1292 _: 1 1293 })]), 1294 _: 1 1295 }, 8, ["loading", "disabled"])]), 1296 _: 1 1297 }) 1298 ]), 1299 _: 1 1300 })]), 1301 _: 1 1302 }, 512)]), 1303 _: 1 1304 }), 1305 createVNode(_component_v_overlay, { 1306 modelValue: overlayVisible.value, 1307 "onUpdate:modelValue": _cache[32] || (_cache[32] = ($event) => overlayVisible.value = $event) 1308 }, { 1309 default: withCtx(() => [createVNode(_component_v_progress_circular, { 1310 indeterminate: "", 1311 size: "64" 1312 })]), 1313 _: 1 1314 }, 8, ["modelValue"]) 1315 ]); 1316 }; 1317 } 1318}), [["__scopeId", "data-v-6faadfe9"]]); 1319//#endregion 1320export { edit_default as default };
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.