55use NSWDPC \Typesense \Elemental \Models \Elements \TypesenseSearchElement ;
66use SilverStripe \AssetAdmin \Forms \UploadField ;
77use SilverStripe \Assets \Image ;
8- use SilverStripe \Forms \ListboxField ;
98use SilverStripe \Forms \TextField ;
109use SilverStripe \LinkField \Form \MultiLinkField ;
1110use SilverStripe \LinkField \Models \Link ;
1211use SilverStripe \ORM \ArrayList ;
1312use SilverStripe \View \ArrayData ;
1413
15-
1614/**
1715 * Provides a hero search element conforming to the NSW Design System Hero Search Component
16+ * @property string $Title
17+ * @property ?string $Subtitle
18+ * @property ?string $SuggestedTerms
19+ * @property int $BackgroundImageID
20+ * @method \SilverStripe\Assets\Image BackgroundImage()
21+ * @method \SilverStripe\ORM\HasManyList<\SilverStripe\LinkField\Models\Link> Links()
1822 */
19- class HeroSearch extends TypesenseSearchElement {
20-
23+ class HeroSearch extends TypesenseSearchElement
24+ {
2125 private static string $ icon = 'font-icon-search ' ;
2226
2327 private static string $ table_name = 'TypesenseHeroSearch ' ;
@@ -56,14 +60,18 @@ class HeroSearch extends TypesenseSearchElement {
5660 /**
5761 * @inheritdoc
5862 */
59- public function getType () {
63+ #[\Override]
64+ public function getType ()
65+ {
6066 return _t (static ::class . '.BlockType ' , $ this ->i18n_singular_name ());
6167 }
6268
6369 /**
6470 * Update CMS fields
6571 */
66- public function getCmsFields () {
72+ #[\Override]
73+ public function getCmsFields ()
74+ {
6775 $ fields = parent ::getCmsFields ();
6876 $ fields ->removeByName (['Links ' ]);
6977 $ fields ->addFieldsToTab (
@@ -100,19 +108,22 @@ public function getCmsFields() {
100108 return $ fields ;
101109 }
102110
103- public function getSuggestedTermsAsArray (): array {
111+ public function getSuggestedTermsAsArray (): array
112+ {
104113 $ list = explode (", " , $ this ->SuggestedTerms ?? '' );
105- return array_filter (array_values ( $ list) );
114+ return array_filter ($ list );
106115 }
107116
108- public function getLinkedSuggestedTerms (): ArrayList {
117+ public function getLinkedSuggestedTerms (): ArrayList
118+ {
109119 $ list = ArrayList::create ();
110120 $ page = $ this ->SearchPage ();
111- if (!$ page || !$ page ->isInDB ()) {
121+ if (!$ page || !$ page ->isInDB ()) {
112122 return $ list ;
113123 }
124+
114125 $ terms = $ this ->getSuggestedTermsAsArray ();
115- foreach ($ terms as $ term ) {
126+ foreach ($ terms as $ term ) {
116127 $ term = strip_tags (trim ((string ) $ term ));
117128 $ list ->push (
118129 ArrayData::create ([
@@ -121,25 +132,31 @@ public function getLinkedSuggestedTerms(): ArrayList {
121132 ])
122133 );
123134 }
135+
124136 return $ list ;
125137 }
126138
127139 /**
128140 * Render element into template
129141 */
130- public function forTemplate ($ holder = true ) {
142+ #[\Override]
143+ public function forTemplate ($ holder = true )
144+ {
131145 $ templates = $ this ->getRenderTemplates ();
146+ /** @var \NSWDPC\Typesense\Elemental\Controllers\TypesenseSearchElementController $controller */
147+ $ controller = $ this ->getController ();
132148 $ templateData = ArrayData::create ([
133149 'Title ' => $ this ->Title ,
134150 'Subtitle ' => $ this ->Subtitle ,
135- 'Form ' => $ this -> getController () ->SearchForm (),
151+ 'Form ' => $ controller ->SearchForm (),
136152 'Image ' => $ this ->BackgroundImage (),
137153 'Links ' => $ this ->Links (),
138154 'Terms ' => $ this ->getLinkedSuggestedTerms ()
139155 ]);
140156 if ($ templates ) {
141157 return $ this ->customise ($ templateData )->renderWith ($ templates );
142158 }
159+
143160 return null ;
144161 }
145162
0 commit comments