flamingo.me/flamingo-commerce/v3@v3.11.0/search/interfaces/graphql/searchdto/facets.go (about) 1 package searchdto 2 3 import searchdomain "flamingo.me/flamingo-commerce/v3/search/domain" 4 5 // CommerceSearchFacet interface for facets 6 type CommerceSearchFacet interface { 7 Name() string 8 Label() string 9 Position() int 10 // Items() []CommerceSearchFacetItem 11 HasSelectedItem() bool 12 } 13 14 // CommerceSearchFacetItem interface for facet items 15 type CommerceSearchFacetItem interface { 16 Label() string 17 Value() string 18 Selected() bool 19 Count() int 20 } 21 22 // WrapListFacet wraps the list facet into the graphql dto 23 func WrapListFacet(facet searchdomain.Facet) *CommerceSearchListFacet { 24 items := make([]*CommerceSearchListFacetItem, len(facet.Items)) 25 for i, item := range facet.Items { 26 items[i] = &CommerceSearchListFacetItem{ 27 label: item.Label, 28 value: item.Value, 29 selected: item.Selected, 30 count: int(item.Count), 31 } 32 } 33 34 return &CommerceSearchListFacet{ 35 name: facet.Name, 36 label: facet.Label, 37 position: facet.Position, 38 items: items, 39 } 40 } 41 42 // CommerceSearchListFacet dto for list facets 43 type CommerceSearchListFacet struct { 44 name string 45 label string 46 position int 47 items []*CommerceSearchListFacetItem 48 } 49 50 // Name getter 51 func (c *CommerceSearchListFacet) Name() string { 52 return c.name 53 } 54 55 // Label getter 56 func (c *CommerceSearchListFacet) Label() string { 57 return c.label 58 } 59 60 // Position getter 61 func (c *CommerceSearchListFacet) Position() int { 62 return c.position 63 } 64 65 // Items getter 66 func (c *CommerceSearchListFacet) Items() []*CommerceSearchListFacetItem { 67 return c.items 68 } 69 70 // HasSelectedItem getter 71 func (c *CommerceSearchListFacet) HasSelectedItem() bool { 72 for _, item := range c.items { 73 if item.selected { 74 return true 75 } 76 } 77 return false 78 } 79 80 // CommerceSearchListFacetItem dto for list facet items 81 type CommerceSearchListFacetItem struct { 82 label string 83 value string 84 selected bool 85 count int 86 } 87 88 // Label getter 89 func (c *CommerceSearchListFacetItem) Label() string { 90 return c.label 91 } 92 93 // Value getter 94 func (c *CommerceSearchListFacetItem) Value() string { 95 return c.value 96 } 97 98 // Selected getter 99 func (c *CommerceSearchListFacetItem) Selected() bool { 100 return c.selected 101 } 102 103 // Count getter 104 func (c *CommerceSearchListFacetItem) Count() int { 105 return c.count 106 } 107 108 func mapTreeFacetItems(facetItems []*searchdomain.FacetItem) []*CommerceSearchTreeFacetItem { 109 items := make([]*CommerceSearchTreeFacetItem, len(facetItems)) 110 for i, item := range facetItems { 111 items[i] = &CommerceSearchTreeFacetItem{ 112 label: item.Label, 113 value: item.Value, 114 selected: item.Selected, 115 count: int(item.Count), 116 active: item.Active, 117 items: mapTreeFacetItems(item.Items), 118 } 119 } 120 return items 121 } 122 123 // WrapTreeFacet wraps the tree facet into the graphql dto 124 func WrapTreeFacet(facet searchdomain.Facet) *CommerceSearchTreeFacet { 125 return &CommerceSearchTreeFacet{ 126 name: facet.Name, 127 label: facet.Label, 128 position: facet.Position, 129 items: mapTreeFacetItems(facet.Items), 130 } 131 } 132 133 // CommerceSearchTreeFacet dto for tree facets 134 type CommerceSearchTreeFacet struct { 135 name string 136 label string 137 position int 138 items []*CommerceSearchTreeFacetItem 139 } 140 141 // Name getter 142 func (c *CommerceSearchTreeFacet) Name() string { 143 return c.name 144 } 145 146 // Label getter 147 func (c *CommerceSearchTreeFacet) Label() string { 148 return c.label 149 } 150 151 // Position getter 152 func (c *CommerceSearchTreeFacet) Position() int { 153 return c.position 154 } 155 156 // Items getter 157 func (c *CommerceSearchTreeFacet) Items() []*CommerceSearchTreeFacetItem { 158 return c.items 159 } 160 161 func hasSelectedItem(items []*CommerceSearchTreeFacetItem) bool { 162 for _, item := range items { 163 if item.selected || hasSelectedItem(item.items) { 164 return true 165 } 166 } 167 return false 168 } 169 170 // HasSelectedItem getter 171 func (c *CommerceSearchTreeFacet) HasSelectedItem() bool { 172 return hasSelectedItem(c.items) 173 } 174 175 // CommerceSearchTreeFacetItem dto for tree facet items 176 type CommerceSearchTreeFacetItem struct { 177 label string 178 value string 179 selected bool 180 count int 181 active bool 182 items []*CommerceSearchTreeFacetItem 183 } 184 185 // Label getter 186 func (c *CommerceSearchTreeFacetItem) Label() string { 187 return c.label 188 } 189 190 // Value getter 191 func (c *CommerceSearchTreeFacetItem) Value() string { 192 return c.value 193 } 194 195 // Selected getter 196 func (c *CommerceSearchTreeFacetItem) Selected() bool { 197 return c.selected 198 } 199 200 // Count getter 201 func (c *CommerceSearchTreeFacetItem) Count() int { 202 return c.count 203 } 204 205 // Active getter 206 func (c *CommerceSearchTreeFacetItem) Active() bool { 207 return c.active 208 } 209 210 // Items getter 211 func (c *CommerceSearchTreeFacetItem) Items() []*CommerceSearchTreeFacetItem { 212 return c.items 213 } 214 215 // WrapRangeFacet wraps the range facet into the graphql dto 216 func WrapRangeFacet(facet searchdomain.Facet) *CommerceSearchRangeFacet { 217 items := make([]*CommerceSearchRangeFacetItem, len(facet.Items)) 218 for i, item := range facet.Items { 219 items[i] = &CommerceSearchRangeFacetItem{ 220 label: item.Label, 221 value: item.Value, 222 selected: item.Selected, 223 count: int(item.Count), 224 min: int(item.Min), 225 max: int(item.Max), 226 selectedMin: int(item.SelectedMin), 227 selectedMax: int(item.SelectedMax), 228 } 229 } 230 231 return &CommerceSearchRangeFacet{ 232 name: facet.Name, 233 label: facet.Label, 234 position: facet.Position, 235 items: items, 236 } 237 } 238 239 // CommerceSearchRangeFacet dto for range facets 240 type CommerceSearchRangeFacet struct { 241 name string 242 label string 243 position int 244 items []*CommerceSearchRangeFacetItem 245 } 246 247 // Name getter 248 func (c *CommerceSearchRangeFacet) Name() string { 249 return c.name 250 } 251 252 // Label getter 253 func (c *CommerceSearchRangeFacet) Label() string { 254 return c.label 255 } 256 257 // Position getter 258 func (c *CommerceSearchRangeFacet) Position() int { 259 return c.position 260 } 261 262 // Items getter 263 func (c *CommerceSearchRangeFacet) Items() []*CommerceSearchRangeFacetItem { 264 return c.items 265 } 266 267 // HasSelectedItem getter 268 func (c *CommerceSearchRangeFacet) HasSelectedItem() bool { 269 for _, item := range c.items { 270 if item.selected { 271 return true 272 } 273 } 274 return false 275 } 276 277 // CommerceSearchRangeFacetItem dto for range facet items 278 type CommerceSearchRangeFacetItem struct { 279 label string 280 value string 281 selected bool 282 count int 283 min int 284 max int 285 selectedMin int 286 selectedMax int 287 } 288 289 // Label getter 290 func (c *CommerceSearchRangeFacetItem) Label() string { 291 return c.label 292 } 293 294 // Value getter 295 func (c *CommerceSearchRangeFacetItem) Value() string { 296 return c.value 297 } 298 299 // Selected getter 300 func (c *CommerceSearchRangeFacetItem) Selected() bool { 301 return c.selected 302 } 303 304 // Count getter 305 func (c *CommerceSearchRangeFacetItem) Count() int { 306 return c.count 307 } 308 309 // Min getter 310 func (c *CommerceSearchRangeFacetItem) Min() int { 311 return c.min 312 } 313 314 // Max getter 315 func (c *CommerceSearchRangeFacetItem) Max() int { 316 return c.max 317 } 318 319 // SelectedMin getter 320 func (c *CommerceSearchRangeFacetItem) SelectedMin() int { 321 return c.selectedMin 322 } 323 324 // SelectedMax getter 325 func (c *CommerceSearchRangeFacetItem) SelectedMax() int { 326 return c.selectedMax 327 }