33
44namespace Loki \AdminComponents \Ui \Button ;
55
6+ use Loki \AdminComponents \Component \Form \FormRepository ;
7+ use Loki \AdminComponents \Component \Grid \GridRepository ;
68use Loki \AdminComponents \Provider \FormProviderInterface ;
79use Magento \Framework \DataObject ;
810use Magento \Framework \View \Element \AbstractBlock ;
@@ -18,30 +20,54 @@ public function __construct(
1820 * @return Button[]
1921 */
2022 public function resolve (
23+ FormRepository |GridRepository $ repository ,
2124 AbstractBlock $ block ,
22- object $ provider ,
23- mixed $ item
2425 ): array {
26+ $ provider = $ repository ->getProvider ();
2527 if ($ provider instanceof FormProviderInterface) {
2628 return $ provider ->getForm ()->getButtons ();
2729 }
2830
31+ $ buttons = $ this ->getButtonsFromBlock ($ block );
32+ if (!empty ($ buttons )) {
33+ return $ buttons ;
34+ }
35+
36+ if ($ repository instanceof FormRepository) {
37+ return $ this ->getDefaultFormButtons ($ repository );
38+ }
39+
40+ if ($ repository instanceof GridRepository) {
41+ return $ this ->getDefaultGridButtons ($ repository );
42+ }
43+
44+ return [];
45+ }
46+
47+ private function getButtonsFromBlock (AbstractBlock $ block ): array
48+ {
2949 $ buttonDefinitions = $ block ->getButtons ();
30- if (!empty ($ buttonDefinitions )) {
31- $ buttons = [];
32- foreach ($ buttonDefinitions as $ buttonDefinition ) {
33- $ buttons [] = $ this ->buttonFactory ->create (
34- method: (string )$ buttonDefinition ['method ' ],
35- label: (string )$ buttonDefinition ['label ' ],
36- cssClass: isset ($ buttonDefinition ['cssClass ' ]) ? (string )$ buttonDefinition ['cssClass ' ] : '' ,
37- url: isset ($ buttonDefinition ['url ' ]) ? (string )$ buttonDefinition ['url ' ] : '' ,
38- primary: $ buttonDefinition ['primary ' ] ?? false ,
39- );
40- }
50+ if (empty ($ buttonDefinitions )) {
51+ return [];
52+ }
4153
42- return $ buttons ;
54+ $ buttons = [];
55+ foreach ($ buttonDefinitions as $ buttonDefinition ) {
56+ $ buttons [] = $ this ->buttonFactory ->create (
57+ method: (string )$ buttonDefinition ['method ' ],
58+ label: (string )$ buttonDefinition ['label ' ],
59+ cssClass: isset ($ buttonDefinition ['cssClass ' ]) ? (string )$ buttonDefinition ['cssClass ' ] : '' ,
60+ url: isset ($ buttonDefinition ['url ' ]) ? (string )$ buttonDefinition ['url ' ] : '' ,
61+ primary: $ buttonDefinition ['primary ' ] ?? false ,
62+ );
4363 }
4464
65+ return $ buttons ;
66+ }
67+
68+ private function getDefaultFormButtons (FormRepository $ repository ): array
69+ {
70+ $ item = $ repository ->getItem ();
4571 if ($ item instanceof DataObject && $ item ->getId () > 0 ) {
4672 return [
4773 $ this ->buttonFactory ->createCloseAction (),
@@ -59,4 +85,9 @@ public function resolve(
5985 //$this->buttonFactory->createSaveContinueAction(),
6086 ];
6187 }
88+
89+ private function getDefaultGridButtons (GridRepository $ repository ): array
90+ {
91+ return [];
92+ }
6293}
0 commit comments