@fabriciogferreira/use-url-query 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -0
- package/package.json +64 -0
package/README.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
FEATURES FUTURAS:
|
|
2
|
+
- suporte a fields (https://spatie.be/docs/laravel-query-builder/v6/features/selecting-fields)
|
|
3
|
+
- Suporte a appends
|
|
4
|
+
- normalização de valores vindos da URL para
|
|
5
|
+
-- sort //feito
|
|
6
|
+
-- field
|
|
7
|
+
-- append
|
|
8
|
+
-- include
|
|
9
|
+
-- filter //feito
|
|
10
|
+
- Poder aplicar a mesma estrutura de desativar valor do sort em filter, include e fields. Em alguns casos, o usuário apenas quer desativar aquele filtro, e não remover ele, pode ser útil quando se está testando filtros
|
|
11
|
+
- Poder adicionar filtros com operadores relacionais (https://spatie.be/docs/laravel-query-builder/v6/features/filtering#content-operator-filters)
|
|
12
|
+
-- EQUAL | = | addFilter | addFilter(key, value, )'='
|
|
13
|
+
-- NOT_EQUAL | != | addFilterNE | addFilter(key, value, '!=')
|
|
14
|
+
-- GREATER_THAN | > | addFilterGT | addFilter(key, value, '>')
|
|
15
|
+
-- LESS_THAN | < | addFilterLT | addFilter(key, value, '<')
|
|
16
|
+
-- GREATER_THAN_OR_EQUAL | >= | addFilterGTE | addFilter(key, value, '>=')
|
|
17
|
+
-- LESS_THAN_OR_EQUAL | <= | addFilterLTE | addFilter(key, value, '<=')
|
|
18
|
+
- suporte a https://github.com/spatie/laravel-json-api-paginate
|
|
19
|
+
- Laravel query builde segue: https://jsonapi.org/
|
|
20
|
+
- Ordem de precedência (url e with default) no momento
|
|
21
|
+
-- valor url válido -> usa o dá url
|
|
22
|
+
-- valor url inválido -> cai no default
|
|
23
|
+
-- não tem valor -> cai no default
|
|
24
|
+
- add uma função set filters
|
|
25
|
+
- suporte a multi values do nuqs
|
|
26
|
+
|
|
27
|
+
EFICIÊNCIA:
|
|
28
|
+
- não iterar sobre o searchparams, iterar sobre o sort e o filters (usar searchparams.get)
|
|
29
|
+
- opcão de não disparar atualização quando um valor sort (talvez), includes ou fields é removido, pois isso apenas não deveria mostrar um dados que já foi carregando, ou seja, não é preciso uma novo request/query para trazer um conjunto de dados B que está contido em um conjunto de dados A
|
|
30
|
+
|
|
31
|
+
OPÇÕES:
|
|
32
|
+
- atualizar url opcionalmente
|
|
33
|
+
- permitir alterar o nome do sufixo de contagens, ex: usersCount => users_count
|
|
34
|
+
- permitir alterar o nome do sufixo do exists, ex: usersExists => users_exists
|
|
35
|
+
- permitir alterar os nomes dos parâmetros: fields, append, etc (https://spatie.be/docs/laravel-query-builder/v6/installation-setup)exemplo sortAs: 'order',
|
|
36
|
+
-- sort //feito
|
|
37
|
+
-- field
|
|
38
|
+
-- append
|
|
39
|
+
-- include //feito
|
|
40
|
+
-- filter //feito
|
|
41
|
+
- permitir configuração de delimitadores para include, appends, fields, sorts, filters (https://spatie.be/docs/laravel-query-builder/v6/advanced-usage/multi-value-delimiter)
|
|
42
|
+
-- sort
|
|
43
|
+
-- field
|
|
44
|
+
-- append
|
|
45
|
+
-- include
|
|
46
|
+
-- filter
|
|
47
|
+
- Valores padrões
|
|
48
|
+
-- sorts
|
|
49
|
+
-- filters
|
|
50
|
+
-- append
|
|
51
|
+
-- include
|
|
52
|
+
-- field
|
|
53
|
+
|
|
54
|
+
TESTES:
|
|
55
|
+
- se não houver nada na url, sorts, filters e etc não devem ter nada
|
|
56
|
+
- criar backend para tests?
|
|
57
|
+
|
|
58
|
+
USO:
|
|
59
|
+
- Tenhas em mente o seguinte padrão:
|
|
60
|
+
-- add... void -> para adicionar, exemplo: addFilter
|
|
61
|
+
-- clear... void -> para limpar todos os valores de um param, exemplo: clearFilters
|
|
62
|
+
-- get... value-> para buscar determinado valor: getFilter
|
|
63
|
+
-- has... value-> para verificar se tem algo, exemplo: hasSort
|
|
64
|
+
-- is... value-> para verificar se é tal coisa, exemplo: isSortDesc
|
|
65
|
+
-- move... void -> para move um item para determinada posição
|
|
66
|
+
-- remove... void -> para remover, exemplo: removeFilter
|
|
67
|
+
-- reset... void -> para voltar os valores para os valores iniciais: resetFilters
|
|
68
|
+
-- set... void -> para setar valor de um seto, exemplo: setFilter, vai remover os filtros atuais e adicionar pelos que foram setados
|
|
69
|
+
-- toggle... void -> para alternar o valor do param ou o parâmetro, exemplo: toggleSort
|
|
70
|
+
-- up??
|
|
71
|
+
-- swap??
|
|
72
|
+
-- enable??
|
|
73
|
+
-- disable??
|
|
74
|
+
|
|
75
|
+
SEGURANÇA EM DESENVOLVIMENTO:
|
|
76
|
+
- gerar throw
|
|
77
|
+
-- sorts
|
|
78
|
+
-- normalizeFromUrl
|
|
79
|
+
-- filters
|
|
80
|
+
-- schemaToQueryString
|
|
81
|
+
-- filterParamAs
|
|
82
|
+
-- includeParamAs
|
|
83
|
+
-- sortParamAs
|
|
84
|
+
|
|
85
|
+
//Nova implementação de filtersSchema
|
|
86
|
+
- é possivel enviar um parâmetro com valor string vazia ('')?, sim é, limpar filtro
|
|
87
|
+
- como vamos tirar um valor da url (nuqs tirando setando null no filtro)? sim, usar null para retirar parâmetro
|
|
88
|
+
|
|
89
|
+
MVP:
|
|
90
|
+
- debounce para atualização da url
|
|
91
|
+
|
|
92
|
+
Devo usar object ou array, ou os dois para filters, sorts, etc?
|
|
93
|
+
- Ver beneficios do programador vs beneficios de quem usa a lib
|
|
94
|
+
- exemplo: se eu usar array de objetos, o usuário apenas precisa fazer:
|
|
95
|
+
sorts.map(...
|
|
96
|
+
mas para o programador alterar um atributo do sort, devo fazer:
|
|
97
|
+
sorts.findIndex(...
|
|
98
|
+
|
|
99
|
+
-exemplo2: se eu retornar um objeto, o usuário precisa fazer:
|
|
100
|
+
Object.entries(sorts).map(([key, config]) =>...
|
|
101
|
+
mas para o programador alterar um atributo do sort, devo fazer:
|
|
102
|
+
sorts[key].atribute = ...
|
|
103
|
+
|
|
104
|
+
ou devo usar os dois?
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fabriciogferreira/use-url-query",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"private": false,
|
|
8
|
+
"description": "Hook in typescript + Nextjs for Spatie Laravel Query Builder",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"keywords": [
|
|
23
|
+
"react",
|
|
24
|
+
"react-hook",
|
|
25
|
+
"hooks",
|
|
26
|
+
"typescript",
|
|
27
|
+
"nextjs",
|
|
28
|
+
"url",
|
|
29
|
+
"search-params",
|
|
30
|
+
"query-params",
|
|
31
|
+
"querystring",
|
|
32
|
+
"filters",
|
|
33
|
+
"sorting",
|
|
34
|
+
"pagination",
|
|
35
|
+
"query-builder",
|
|
36
|
+
"laravel",
|
|
37
|
+
"spatie"
|
|
38
|
+
],
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/fabriciogferreira/use-url-query.git"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc",
|
|
45
|
+
"test": "bun test",
|
|
46
|
+
"prepublishOnly": "bun run build"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@happy-dom/global-registrator": "^20.0.11",
|
|
50
|
+
"@testing-library/react": "^16.3.1",
|
|
51
|
+
"@types/react": "^19.2.7",
|
|
52
|
+
"bun-types": "^1.3.5",
|
|
53
|
+
"react": "^19.2.3",
|
|
54
|
+
"typescript": "^5.9.3",
|
|
55
|
+
"zod": "^4.3.5",
|
|
56
|
+
"fast-cartesian": "^9.0.1",
|
|
57
|
+
"js-combinatorics": "^2.1.2"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@fabriciogferreira/schema-to-query-string": "^0.1.8",
|
|
61
|
+
"next": "^16.1.1",
|
|
62
|
+
"nuqs": "^2.8.7"
|
|
63
|
+
}
|
|
64
|
+
}
|