Skip to content

Commit a51744e

Browse files
brunoocasalibidoubiwa
authored andcommitted
Add Meilisearch Cloud touchpoint in README.md section
Related to meilisearch/integration-guides#277
1 parent 5ae277c commit a51744e

File tree

5 files changed

+85
-13
lines changed

5 files changed

+85
-13
lines changed

.changeset/dirty-mangos-tie.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@meilisearch/instant-meilisearch": patch
3+
---
4+
5+
Fix bug where sort-by failed on geo_points

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44

55
<h1 align="center">Meilisearch Javascript plugins</h1>
66

7+
<h4 align="center">
8+
<a href="https://github.com/meilisearch/meilisearch">Meilisearch</a> |
9+
<a href="https://www.meilisearch.com/pricing?utm_campaign=oss&utm_source=integration&utm_medium=meilisearch-js-plugins">Meilisearch Cloud</a> |
10+
<a href="https://docs.meilisearch.com">Documentation</a> |
11+
<a href="https://discord.meilisearch.com">Discord</a> |
12+
<a href="https://roadmap.meilisearch.com/tabs/1-under-consideration">Roadmap</a> |
13+
<a href="https://www.meilisearch.com">Website</a> |
14+
<a href="https://docs.meilisearch.com/faq">FAQ</a>
15+
</h4>
16+
717
<p align="center">
818
<a href="https://github.com/meilisearch/meilisearch-js-plugins/actions"><img src="https://github.com/meilisearch/meilisearch-js-plugins/workflows/Tests/badge.svg?branch=main" alt="Tests"></a>
919
<a href="https://github.com/meilisearch/meilisearch-js-plugins/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-informational" alt="License"></a>
@@ -18,13 +28,18 @@ This repository contains clients and plugins to use Meilisearch with third party
1828
## Table of Contents <!-- omit in toc -->
1929

2030
- [📖 Documentation](#-documentation)
31+
- [⚡ Supercharge your Meilisearch experience](#-supercharge-your-meilisearch-experience)
2132
- [🐱 Plugins](#-plugins)
2233
- [⚙️ Development Workflow and Contributing](#️-development-workflow-and-contributing)
2334

2435
## 📖 Documentation
2536

2637
For general information on how to use Meilisearch—such as our API reference, tutorials, guides, and in-depth articles—refer to our [main documentation website](https://docs.meilisearch.com/).
2738

39+
## ⚡ Supercharge your Meilisearch experience
40+
41+
Say goodbye to server deployment and manual updates with [Meilisearch Cloud](https://www.meilisearch.com/pricing?utm_campaign=oss&utm_source=integration&utm_medium=meilisearch-js-plugins). No credit card required.
42+
2843
## 🐱 Plugins
2944

3045
### Plugins in this repository

packages/instant-meilisearch/__tests__/sort.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
meilisearchClient,
66
} from './assets/utils'
77

8+
import { splitSortString } from '../src/contexts/sort-context'
9+
810
describe('Sort browser test', () => {
911
beforeAll(async () => {
1012
const deleteTask = await meilisearchClient.deleteIndex('movies')
@@ -48,4 +50,28 @@ describe('Sort browser test', () => {
4850
const hits = response.results[0].hits
4951
expect(hits.length).toBe(1)
5052
})
53+
54+
test('split multiple sorting rules', () => {
55+
const sortRules = splitSortString(
56+
'_geoPoint(37.8153, -122.4784):asc,title:asc,description:desc'
57+
)
58+
59+
expect(sortRules).toEqual([
60+
'_geoPoint(37.8153, -122.4784):asc',
61+
'title:asc',
62+
'description:desc',
63+
])
64+
})
65+
66+
test('split one sorting rule', () => {
67+
const sortRules = splitSortString('_geoPoint(37.8153, -122.4784):asc')
68+
69+
expect(sortRules).toEqual(['_geoPoint(37.8153, -122.4784):asc'])
70+
})
71+
72+
test.only('split no sorting rule', () => {
73+
const sortRules = splitSortString('')
74+
75+
expect(sortRules).toEqual([])
76+
})
5177
})

packages/instant-meilisearch/src/contexts/search-context.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,25 @@ import {
33
AlgoliaMultipleQueriesQuery,
44
SearchContext,
55
} from '../types'
6-
6+
import { splitSortString } from './sort-context'
77
import { createPaginationState } from './pagination-context'
8-
import { createSortState } from './sort-context'
8+
9+
function separateIndexFromSortRules(indexName: string): {
10+
indexUid: string
11+
sortBy: string
12+
} {
13+
const colonIndex = indexName.indexOf(':')
14+
if (colonIndex === -1) {
15+
return {
16+
indexUid: indexName,
17+
sortBy: '',
18+
}
19+
}
20+
return {
21+
indexUid: indexName.substring(0, colonIndex),
22+
sortBy: indexName.substring(colonIndex + 1),
23+
}
24+
}
925

1026
/**
1127
* @param {AlgoliaMultipleQueriesQuery} searchRequest
@@ -16,23 +32,21 @@ export function createSearchContext(
1632
searchRequest: AlgoliaMultipleQueriesQuery,
1733
options: InstantMeiliSearchOptions
1834
): SearchContext {
35+
const { query, indexName, params: instantSearchParams } = searchRequest
1936
// Split index name and possible sorting rules
20-
const [indexUid, ...sortByArray] = searchRequest.indexName.split(':')
21-
const { query, params: instantSearchParams } = searchRequest
37+
const { indexUid, sortBy } = separateIndexFromSortRules(indexName)
2238

2339
const paginationState = createPaginationState(
2440
options.finitePagination,
2541
instantSearchParams?.hitsPerPage,
2642
instantSearchParams?.page
2743
)
2844

29-
const sortState = createSortState(sortByArray.join(':'))
30-
3145
const searchContext: SearchContext = {
3246
...options,
3347
query,
3448
...instantSearchParams,
35-
sort: sortState,
49+
sort: splitSortString(sortBy),
3650
indexUid,
3751
pagination: paginationState,
3852
placeholderSearch: options.placeholderSearch !== false, // true by default
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
11
/**
2-
* @param {string} rawSort
2+
* Split sort string into an array.
3+
*
4+
* Example:
5+
* '_geoPoint(37.8153, -122.4784):asc,title:asc,description:desc'
6+
*
7+
* becomes:
8+
* [
9+
* '_geoPoint(37.8153, -122.4784):asc',
10+
* 'title:asc',
11+
* 'description:desc',
12+
* ]
13+
*
14+
* @param {string} sortStr
315
* @returns {string[]}
416
*/
5-
export function createSortState(rawSort: string): string[] {
6-
return rawSort
7-
.split(',')
8-
.map((sort) => sort.trim())
9-
.filter((sort) => !!sort)
17+
export function splitSortString(sortStr: string): string[] {
18+
if (!sortStr) return []
19+
const sortRules = sortStr.split(/,(?=\w+:(?:asc|desc))/)
20+
21+
return sortRules
1022
}

0 commit comments

Comments
 (0)