badgeType = $type; if (is_callable($badgeCallback) || $badgeCallback instanceof Badge) { $this->badgeCallback = $badgeCallback; } if (is_string($badgeCallback)) { $this->badgeCallback = function () use ($badgeCallback, $type) { return Badge::make($badgeCallback, $type); }; } return $this; } /** * Set the content to be used for the item's badge if the condition matches. * * @param (\Closure():(\Laravel\Nova\Badge|string))|(callable():(\Laravel\Nova\Badge|string))|\Laravel\Nova\Badge|string $badgeCallback * @param string|null $type * @param (\Closure():(bool))|bool $condition * @return $this */ public function withBadgeIf($badgeCallback, $type, $condition) { $this->badgeCondition = $condition; $this->withBadge($badgeCallback, $type); return $this; } /** * Resolve the badge for the item. * * @return \Laravel\Nova\Badge|null */ public function resolveBadge() { if (value($this->badgeCondition)) { if (is_callable($this->badgeCallback)) { /** @var \Laravel\Nova\Badge|string|null $result */ $result = call_user_func($this->badgeCallback); if (is_null($result)) { throw new \Exception('A menu item badge must always have a value.'); } if (! $result instanceof Badge) { return Badge::make($result, $this->badgeType); } return $result; } return $this->badgeCallback; } } }