route('event'); $eventContext = $eventFromRoute instanceof Event ? $eventFromRoute : ($this->resource->event ?? null); $layouts = []; if ($eventContext && Route::has('tenant.events.join-tokens.layouts.download')) { $layouts = JoinTokenLayoutRegistry::toResponse(function (string $layoutId, string $format) use ($eventContext) { return route('tenant.events.join-tokens.layouts.download', [ 'event' => $eventContext, 'joinToken' => $this->resource, 'layout' => $layoutId, 'format' => $format, ]); }); } $layoutsUrl = null; if ($eventContext && Route::has('tenant.events.join-tokens.layouts.index')) { $layoutsUrl = route('tenant.events.join-tokens.layouts.index', [ 'event' => $eventContext, 'joinToken' => $this->resource, ]); } $plainToken = $this->resource->plain_token ?? $this->token; return [ 'id' => $this->id, 'label' => $this->label, 'token' => $plainToken, 'token_preview' => $this->token_preview, 'url' => $plainToken ? url('/e/'.$plainToken) : null, 'usage_limit' => $this->usage_limit, 'usage_count' => $this->usage_count, 'expires_at' => optional($this->expires_at)->toIso8601String(), 'revoked_at' => optional($this->revoked_at)->toIso8601String(), 'is_active' => $this->isActive(), 'created_at' => optional($this->created_at)->toIso8601String(), 'metadata' => $this->metadata ?? new \stdClass, 'layouts_url' => $layoutsUrl, 'layouts' => $layouts, ]; } }