22
33namespace App \Core \Handlers ;
44
5- class DependenciesContainer {
5+ class DependenciesContainer
6+ {
67 public function __construct (
78 private readonly array $ pendingDependencies ,
89 private array $ selectedDependencies = []
9- ){}
10+ ) {}
1011
11- public function __invoke (){
12+ public function __invoke ()
13+ {
1214
1315
1416 $ this ->handle ($ this ->pendingDependencies );
1517
1618 return $ this ->selectedDependencies ;
1719 }
1820
19- private function handle ($ dependencies ){
20- if (array_key_exists ('type ' , $ dependencies )){
21- if ($ dependencies ['type ' ] === 'select ' ){
22- $ input = new Input ();
23- $ result = $ input ->select ($ dependencies ['label ' ], $ dependencies ['options ' ]);
24- $ this ->createNewContainer ($ result ->option );
25- }
26- return ;
21+ private function handle ($ dependencies )
22+ {
23+ if (array_key_exists ('commands ' , $ this ->pendingDependencies )) {
24+ $ this ->addDependencies ($ this ->pendingDependencies ['commands ' ]);
2725 }
2826
29-
30- if (array_key_exists ('commands ' , $ this ->pendingDependencies )){
31- $ this ->addDependencies ($ this ->pendingDependencies ['commands ' ]);
32- return ;
27+ if (array_key_exists ('type ' , $ dependencies )) {
28+ $ this ->handleInput ($ dependencies );
3329 }
3430
35- foreach ($ this ->pendingDependencies as $ container ){
31+
32+ foreach ($ this ->pendingDependencies as $ key => $ container ) {
33+ if (!is_int ($ key )) continue ;
3634 $ this ->createNewContainer ($ container );
3735 }
38-
3936 }
4037
41- private function createNewContainer (array $ dependencies ): void
38+ private function createNewContainer (array | null $ dependencies ): void
4239 {
40+ if (empty ($ dependencies )) return ;
4341 $ dependenciesContainer = new DependenciesContainer ($ dependencies );
4442
4543 $ selectedDependencies = $ dependenciesContainer ();
@@ -53,4 +51,23 @@ private function addDependencies(array $dependencies): void
5351 $ dependencies
5452 );
5553 }
54+
55+ private function handleInput (array $ dependencies )
56+ {
57+ $ input = new Input ();
58+ $ type = $ dependencies ['type ' ];
59+
60+ if ($ type === 'choice ' || $ type === 'select ' ) {
61+ $ result = $ input ->$ type ($ dependencies ['label ' ], $ dependencies ['options ' ]);
62+ $ this ->createNewContainer ($ result ->option );
63+ return ;
64+ }
65+
66+ $ isConfirmed = $ input ->confirm ($ dependencies ['label ' ]);
67+ if ($ isConfirmed ){
68+ $ this ->createNewContainer ($ dependencies ['options ' ]['yes ' ]);
69+ } else {
70+ $ this ->createNewContainer ($ dependencies ['options ' ]['no ' ]);
71+ }
72+ }
5673}
0 commit comments