[ 'id' => 'auth.login', 'dependencies' => [], ], RegisterOrLogin::class => [ 'id' => 'auth.login-or-register', 'dependencies' => [], ], Register::class => [ 'id' => 'auth.register', 'dependencies' => [], ], Cart::class => [ 'id' => 'cart', 'dependencies' => [], ], Methods::class => [ 'id' => 'methods', 'dependencies' => [Login::class, RegisterOrLogin::class, Register::class, RFF::class], ], RFF::class => [ 'id' => 'rff', 'dependencies' => [Login::class, RegisterOrLogin::class, Register::class], ], ]; public static array $steps = [ Setup::class, RegisterOrLogin::class, Cart::class, Methods::class, RFF::class, Submit::class, ]; public array $context = []; #[On('purchase.context')] public function handleContext(string $property, $value): self { $clone = $this->context; data_set($this->context, $property, $value); // The following may not be needed, as we can pass arround $context. // cache()->set($this->hash, $this->context); if ($clone !== $this->context) { $this->id = Str::uuid(); } return $this; } #[On('purchase.next')] public function handleNext(): void { if ($this->step < count($this->steps) - 1) { $this->step++; } $this->id = Str::uuid(); } #[On('purchase.forward')] public function handleForward(string $component): void { $this->step = array_search($component, $this->steps); $this->id = Str::uuid(); } #[Computed()] public function component(): string { return $this->steps[$this->step]; } #[Computed()] public function componentUniqueId(): string { return "purchase-{$this->id}"; } #[Computed()] public function summaryUniqueId(): string { return "summary-{$this->id}"; } public function mount() { $this->id = Str::uuid(); MultiDB::setDb($this->db); $this ->handleContext('hash', $this->hash) ->handleContext('quantity', 1) ->handleContext('request_data', $this->request_data) ->handleContext('campaign', $this->campaign); } public function render() { return view('billing-portal.v3.purchase'); } }