-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Release 2.4.0
- Loading branch information
Showing
25 changed files
with
371 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
* @q-litzler @PLNech | ||
* @spinach @Aallam |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
distributionBase=GRADLE_USER_HOME | ||
distributionPath=wrapper/dists | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip | ||
zipStoreBase=GRADLE_USER_HOME | ||
zipStorePath=wrapper/dists |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
...rc/androidMain/kotlin/com/algolia/instantsearch/helper/android/sortby/SortByConnection.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.algolia.instantsearch.helper.android.sortby | ||
|
||
import androidx.lifecycle.LiveData | ||
import androidx.paging.PagedList | ||
import com.algolia.instantsearch.core.connection.Connection | ||
import com.algolia.instantsearch.helper.sortby.SortByConnector | ||
import com.algolia.instantsearch.helper.sortby.SortByViewModel | ||
|
||
public fun <T> SortByViewModel.connectPagedList(pagedList: LiveData<PagedList<T>>): Connection { | ||
return SortByConnectionPagedList(this, pagedList) | ||
} | ||
|
||
public fun <T> SortByConnector.connectPagedList(pagedList: LiveData<PagedList<T>>): Connection { | ||
return viewModel.connectPagedList(pagedList) | ||
} |
27 changes: 27 additions & 0 deletions
27
...dMain/kotlin/com/algolia/instantsearch/helper/android/sortby/SortByConnectionPagedList.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package com.algolia.instantsearch.helper.android.sortby | ||
|
||
import androidx.lifecycle.LiveData | ||
import androidx.paging.PagedList | ||
import com.algolia.instantsearch.core.Callback | ||
import com.algolia.instantsearch.core.connection.ConnectionImpl | ||
import com.algolia.instantsearch.helper.sortby.SortByViewModel | ||
|
||
internal class SortByConnectionPagedList<T>( | ||
private val viewModel: SortByViewModel, | ||
private val pagedList: LiveData<PagedList<T>> | ||
) : ConnectionImpl() { | ||
|
||
private val onSelection: Callback<Int?> = { | ||
pagedList.value?.dataSource?.invalidate() | ||
} | ||
|
||
override fun connect() { | ||
super.connect() | ||
viewModel.eventSelection.subscribe(onSelection) | ||
} | ||
|
||
override fun disconnect() { | ||
super.disconnect() | ||
viewModel.eventSelection.unsubscribe(onSelection) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
...er/src/commonMain/kotlin/com/algolia/instantsearch/helper/relateditems/MatchingPattern.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.algolia.instantsearch.helper.relateditems | ||
|
||
import com.algolia.search.model.Attribute | ||
import kotlin.reflect.KProperty1 | ||
|
||
/** | ||
* Representation of a scored filter based on a hit attribute. | ||
* | ||
* @param attribute hit's attribute | ||
* @param score filter score | ||
* @param property hit's property | ||
*/ | ||
public data class MatchingPattern<T>( | ||
val attribute: Attribute, | ||
val score: Int, | ||
val property: KProperty1<T, *> | ||
) |
26 changes: 26 additions & 0 deletions
26
...in/kotlin/com/algolia/instantsearch/helper/relateditems/SearcherConnectionRelatedItems.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package com.algolia.instantsearch.helper.relateditems | ||
|
||
import com.algolia.instantsearch.core.Presenter | ||
import com.algolia.instantsearch.core.connection.Connection | ||
import com.algolia.instantsearch.core.hits.HitsView | ||
import com.algolia.instantsearch.helper.relateditems.internal.RelatedItemsConnectionView | ||
import com.algolia.instantsearch.helper.searcher.SearcherSingleIndex | ||
import com.algolia.search.model.indexing.Indexable | ||
import com.algolia.search.model.response.ResponseSearch | ||
|
||
/** | ||
* Connects [SearcherSingleIndex] to [HitsView] to display related items. | ||
* | ||
* @param adapter hits views adapter | ||
* @param hit hit to get its related items | ||
* @param matchingPatterns list of matching patterns that create scored filters based on the hit’s attributes | ||
* @param presenter presentation output and format | ||
*/ | ||
public fun <T> SearcherSingleIndex.connectRelatedHitsView( | ||
adapter: HitsView<T>, | ||
hit: T, | ||
matchingPatterns: List<MatchingPattern<T>>, | ||
presenter: Presenter<ResponseSearch, List<T>> | ||
): Connection where T : Indexable { | ||
return RelatedItemsConnectionView(this, adapter, hit, matchingPatterns, presenter) | ||
} |
9 changes: 9 additions & 0 deletions
9
...monMain/kotlin/com/algolia/instantsearch/helper/relateditems/internal/FilterFacetAndID.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.algolia.instantsearch.helper.relateditems.internal | ||
|
||
import com.algolia.instantsearch.helper.filter.state.FilterGroupID | ||
import com.algolia.search.model.filter.Filter | ||
|
||
internal class FilterFacetAndID( | ||
val filterGroupID: FilterGroupID, | ||
val filterFacets: Array<Filter.Facet> | ||
) |
40 changes: 40 additions & 0 deletions
40
...tlin/com/algolia/instantsearch/helper/relateditems/internal/RelatedItemsConnectionView.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package com.algolia.instantsearch.helper.relateditems.internal | ||
|
||
import com.algolia.instantsearch.core.Callback | ||
import com.algolia.instantsearch.core.Presenter | ||
import com.algolia.instantsearch.core.connection.ConnectionImpl | ||
import com.algolia.instantsearch.core.hits.HitsView | ||
import com.algolia.instantsearch.helper.relateditems.MatchingPattern | ||
import com.algolia.instantsearch.helper.relateditems.internal.extensions.configureRelatedItems | ||
import com.algolia.instantsearch.helper.searcher.SearcherSingleIndex | ||
import com.algolia.search.model.indexing.Indexable | ||
import com.algolia.search.model.response.ResponseSearch | ||
|
||
internal data class RelatedItemsConnectionView<T>( | ||
private val searcher: SearcherSingleIndex, | ||
private val view: HitsView<T>, | ||
private val hit: T, | ||
private val matchingPatterns: List<MatchingPattern<T>>, | ||
private val presenter: Presenter<ResponseSearch, List<T>> | ||
) : ConnectionImpl() where T : Indexable { | ||
|
||
init { | ||
searcher.configureRelatedItems(hit, matchingPatterns) | ||
} | ||
|
||
private val callback: Callback<ResponseSearch?> = { response -> | ||
if (response != null) { | ||
view.setHits(presenter(response)) | ||
} | ||
} | ||
|
||
override fun connect() { | ||
super.connect() | ||
searcher.response.subscribe(callback) | ||
} | ||
|
||
override fun disconnect() { | ||
super.disconnect() | ||
searcher.response.unsubscribe(callback) | ||
} | ||
} |
23 changes: 23 additions & 0 deletions
23
...n/kotlin/com/algolia/instantsearch/helper/relateditems/internal/extensions/FilterState.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.algolia.instantsearch.helper.relateditems.internal.extensions | ||
|
||
import com.algolia.instantsearch.helper.filter.state.FilterOperator | ||
import com.algolia.instantsearch.helper.filter.state.FilterState | ||
import com.algolia.instantsearch.helper.relateditems.MatchingPattern | ||
import com.algolia.search.model.filter.Filter | ||
import com.algolia.search.model.filter.FilterGroup | ||
|
||
internal fun <T> FilterState.addMatchingPattern(hit: T, matchingPattern: MatchingPattern<T>) { | ||
val optionalFilter = matchingPattern.toOptionalFilter(hit) | ||
optionalFilter?.let { | ||
add(it.filterGroupID, *it.filterFacets) | ||
} | ||
} | ||
|
||
internal fun FilterState.toFilterFacetGroup(): Set<FilterGroup<Filter.Facet>> { | ||
return getFacetGroups().map { (key, value) -> | ||
when (key.operator) { | ||
FilterOperator.And -> FilterGroup.And.Facet(value, key.name) | ||
FilterOperator.Or -> FilterGroup.Or.Facet(value, key.name) | ||
} | ||
}.toSet() | ||
} |
13 changes: 13 additions & 0 deletions
13
...ain/kotlin/com/algolia/instantsearch/helper/relateditems/internal/extensions/Indexable.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.algolia.instantsearch.helper.relateditems.internal.extensions | ||
|
||
import com.algolia.search.model.Attribute | ||
import com.algolia.search.model.filter.Filter | ||
import com.algolia.search.model.filter.FilterGroup | ||
import com.algolia.search.model.filter.FilterGroupsConverter | ||
import com.algolia.search.model.indexing.Indexable | ||
|
||
internal fun Indexable.toFacetFilter(isNegated: Boolean = false): List<List<String>> { | ||
val filter = Filter.Facet(Attribute("objectID"), objectID.toString(), isNegated = isNegated) | ||
val filterGroups = setOf<FilterGroup<Filter.Facet>>(FilterGroup.And.Facet(filter)) | ||
return FilterGroupsConverter.Legacy.Facet(filterGroups).unquote() | ||
} |
33 changes: 33 additions & 0 deletions
33
...tlin/com/algolia/instantsearch/helper/relateditems/internal/extensions/MatchingPattern.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package com.algolia.instantsearch.helper.relateditems.internal.extensions | ||
|
||
import com.algolia.instantsearch.helper.filter.state.FilterState | ||
import com.algolia.instantsearch.helper.filter.state.groupAnd | ||
import com.algolia.instantsearch.helper.filter.state.groupOr | ||
import com.algolia.instantsearch.helper.relateditems.MatchingPattern | ||
import com.algolia.instantsearch.helper.relateditems.internal.FilterFacetAndID | ||
import com.algolia.search.model.filter.Filter | ||
import com.algolia.search.model.filter.FilterGroupsConverter | ||
|
||
internal fun <T> List<MatchingPattern<T>>.toOptionalFilters(hit: T): List<List<String>>? { | ||
val filterState = FilterState() | ||
forEach { filterState.addMatchingPattern(hit, it) } | ||
return FilterGroupsConverter.Legacy.Facet(filterState.toFilterFacetGroup()).unquote() | ||
} | ||
|
||
/** | ||
* Create an [FilterFacetAndID] from a [MatchingPattern]. | ||
*/ | ||
internal fun <T> MatchingPattern<T>.toOptionalFilter(hit: T): FilterFacetAndID? { | ||
val property = property.get(hit) ?: return null | ||
return when (property) { | ||
is Iterable<*> -> { | ||
val groupOr = groupOr() | ||
val list = property.map { value -> Filter.Facet(attribute, value.toString(), score) }.toTypedArray() | ||
FilterFacetAndID(groupOr, list) | ||
} | ||
else -> FilterFacetAndID( | ||
groupAnd(), | ||
arrayOf(Filter.Facet(attribute, property.toString(), score)) | ||
) | ||
} | ||
} |
Oops, something went wrong.