@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.
Files changed (2) hide show
  1. package/README.md +104 -0
  2. 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
+ }