@stapel/search-react 0.8.0 → 0.9.1
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/CHANGELOG.md +42 -0
- package/dist/default/FacetPanelPane.d.ts +30 -0
- package/dist/default/FacetPanelPane.d.ts.map +1 -1
- package/dist/default/FacetPanelPane.js +25 -7
- package/dist/default/FacetPanelPane.js.map +1 -1
- package/dist/default/FilterChips.d.ts +9 -0
- package/dist/default/FilterChips.d.ts.map +1 -1
- package/dist/default/FilterChips.js +8 -9
- package/dist/default/FilterChips.js.map +1 -1
- package/dist/default/SearchPage.d.ts +19 -0
- package/dist/default/SearchPage.d.ts.map +1 -1
- package/dist/default/SearchPage.js +18 -4
- package/dist/default/SearchPage.js.map +1 -1
- package/dist/default/index.d.ts +6 -1
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +6 -1
- package/dist/default/index.js.map +1 -1
- package/dist/headless/SearchStateProvider.d.ts +35 -0
- package/dist/headless/SearchStateProvider.d.ts.map +1 -1
- package/dist/headless/SearchStateProvider.js +38 -3
- package/dist/headless/SearchStateProvider.js.map +1 -1
- package/dist/i18n/es.js +1 -1
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/keys.d.ts +12 -1
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +13 -2
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.js +1 -1
- package/dist/i18n/ru.js.map +1 -1
- package/llms.txt +2 -2
- package/manifest.json +3 -3
- package/nav-manifest.json +1 -1
- package/package.json +5 -5
- package/src/analytics/generated/events.json +1 -1
- package/src/default/FacetPanelPane.tsx +46 -6
- package/src/default/FilterChips.tsx +17 -9
- package/src/default/SearchPage.tsx +40 -1
- package/src/default/index.ts +6 -1
- package/src/headless/SearchStateProvider.tsx +80 -3
- package/src/i18n/es.ts +1 -1
- package/src/i18n/keys.ts +13 -2
- package/src/i18n/ru.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useCallback, useContext, useMemo } from "react";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, } from "react";
|
|
3
3
|
import { activeFilterCount, clearFilters, parseSearchState, patchSearchState, setFilterValues, setRangeValue, toggleFilterValue, writeSearchState, } from "../state/urlState.js";
|
|
4
4
|
const StateContext = createContext(null);
|
|
5
5
|
/**
|
|
@@ -9,7 +9,7 @@ const StateContext = createContext(null);
|
|
|
9
9
|
* same page by construction rather than by discipline.
|
|
10
10
|
*/
|
|
11
11
|
export function SearchStateProvider(props) {
|
|
12
|
-
const { adapter, children, ...parseOptions } = props;
|
|
12
|
+
const { adapter, children, defaultGeo, ...parseOptions } = props;
|
|
13
13
|
const { params, setParams } = adapter;
|
|
14
14
|
// The parse options are spread into a stable dependency: a host that builds
|
|
15
15
|
// the object inline (the normal way to write it) must not reparse on every
|
|
@@ -27,6 +27,16 @@ export function SearchStateProvider(props) {
|
|
|
27
27
|
const commit = useCallback((next, options) => {
|
|
28
28
|
setParams(writeSearchState(next, new URLSearchParams(search)), options);
|
|
29
29
|
}, [setParams, search]);
|
|
30
|
+
/**
|
|
31
|
+
* Has anything at all said where to search yet?
|
|
32
|
+
*
|
|
33
|
+
* `true` once the URL was seen carrying a location, once `defaultGeo` has
|
|
34
|
+
* been applied, or once anybody called `setGeo` — including with `null`.
|
|
35
|
+
* That last one is the whole reason this is a ref and not a comparison: a
|
|
36
|
+
* cleared location and an unapplied default look identical in the state, and
|
|
37
|
+
* only the record of who spoke tells them apart.
|
|
38
|
+
*/
|
|
39
|
+
const geoSettled = useRef(false);
|
|
30
40
|
const bag = useMemo(() => {
|
|
31
41
|
const state = parsed.state;
|
|
32
42
|
const apply = (next, options) => {
|
|
@@ -46,7 +56,13 @@ export function SearchStateProvider(props) {
|
|
|
46
56
|
toggleFilter: (slug, value) => apply(toggleFilterValue(state, slug, value)),
|
|
47
57
|
setFilter: (slug, values) => apply(setFilterValues(state, slug, values)),
|
|
48
58
|
setRange: (slug, range) => apply(setRangeValue(state, slug, range)),
|
|
49
|
-
setGeo: (geo) =>
|
|
59
|
+
setGeo: (geo) => {
|
|
60
|
+
// The person has now answered the location question themselves —
|
|
61
|
+
// including by answering "anywhere". `defaultGeo` does not get to ask
|
|
62
|
+
// it again.
|
|
63
|
+
geoSettled.current = true;
|
|
64
|
+
apply(patchSearchState(state, { geo }));
|
|
65
|
+
},
|
|
50
66
|
// A page size is a preference, not a step through the results.
|
|
51
67
|
setLimit: (limit) => apply(patchSearchState(state, { limit }), { replace: true }),
|
|
52
68
|
clearAll: () => apply(clearFilters(state)),
|
|
@@ -54,6 +70,25 @@ export function SearchStateProvider(props) {
|
|
|
54
70
|
patch: (patch) => apply(patchSearchState(state, patch)),
|
|
55
71
|
};
|
|
56
72
|
}, [parsed, commit]);
|
|
73
|
+
// An effect, not a render-time write: this puts a value in the URL, and a
|
|
74
|
+
// router asked to navigate during a render is a warning at best and a loop
|
|
75
|
+
// at worst. It runs after every commit, which is what makes a `defaultGeo`
|
|
76
|
+
// that arrives on the fourth render — the browser prompt finally answered —
|
|
77
|
+
// land as reliably as one present on the first.
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (geoSettled.current)
|
|
80
|
+
return;
|
|
81
|
+
if (parsed.state.geo !== undefined) {
|
|
82
|
+
// The link brought its own place. That settles the question for this
|
|
83
|
+
// visit even if the host is still resolving one of its own.
|
|
84
|
+
geoSettled.current = true;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (defaultGeo === undefined)
|
|
88
|
+
return;
|
|
89
|
+
geoSettled.current = true;
|
|
90
|
+
commit(patchSearchState(parsed.state, { geo: defaultGeo }), { replace: true });
|
|
91
|
+
}, [defaultGeo, parsed.state, commit]);
|
|
57
92
|
return _jsx(StateContext.Provider, { value: bag, children: children });
|
|
58
93
|
}
|
|
59
94
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchStateProvider.js","sourceRoot":"","sources":["../../src/headless/SearchStateProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"SearchStateProvider.js","sourceRoot":"","sources":["../../src/headless/SearchStateProvider.tsx"],"names":[],"mappings":"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"}
|
package/dist/i18n/es.js
CHANGED
|
@@ -90,7 +90,7 @@ export const searchI18nBundleEs = {
|
|
|
90
90
|
"search.geo.radius_label": "Radio, km",
|
|
91
91
|
"search.geo.clear": "En cualquier lugar",
|
|
92
92
|
"search.geo.box": "Dentro del área mostrada",
|
|
93
|
-
"search.geo.
|
|
93
|
+
"search.geo.chosen_place": "Un lugar elegido en el mapa",
|
|
94
94
|
"search.url.issues_title": "Parte de este enlace no se pudo leer",
|
|
95
95
|
"search.url.issue.not_a_number": "«{param}» en este enlace no es un número, así que se ignoró",
|
|
96
96
|
"search.url.issue.geo_incomplete": "la ubicación de este enlace está incompleta, así que se ignoró",
|
package/dist/i18n/es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/keys.d.ts
CHANGED
|
@@ -130,7 +130,18 @@ export declare const SEARCH_I18N_KEYS: {
|
|
|
130
130
|
readonly geoRadiusLabel: "search.geo.radius_label";
|
|
131
131
|
readonly geoClear: "search.geo.clear";
|
|
132
132
|
readonly geoBox: "search.geo.box";
|
|
133
|
-
|
|
133
|
+
/**
|
|
134
|
+
* What a location constraint is called when nobody has given it a NAME.
|
|
135
|
+
*
|
|
136
|
+
* It replaces `search.geo.center` ("Around {lat}, {lon}"), which printed the
|
|
137
|
+
* two numbers the URL happens to store — `55.756, 37.617` — to a person who
|
|
138
|
+
* chose a place. A coordinate is storage, not a description: it cannot be
|
|
139
|
+
* checked by the one reader who could check an address, so a wrong point
|
|
140
|
+
* reads as authoritative and a right one reads as machinery. Hosts that HAVE
|
|
141
|
+
* the name (the geocoder that resolved it, the IP guess's city) pass
|
|
142
|
+
* `geoLabel` and this sentence never appears.
|
|
143
|
+
*/
|
|
144
|
+
readonly geoChosenPlace: "search.geo.chosen_place";
|
|
134
145
|
readonly urlIssuesTitle: "search.url.issues_title";
|
|
135
146
|
readonly urlIssueNotANumber: "search.url.issue.not_a_number";
|
|
136
147
|
readonly urlIssueGeoIncomplete: "search.url.issue.geo_incomplete";
|
package/dist/i18n/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;IAS3B;;;;;;;OAOG;;IAEH;kEAC8D;;IAE9D,sEAAsE;;;;;;;IAOtE,yDAAyD;;;;;;;IAOzD,yEAAyE;;;;;;IAQzE,4DAA4D;;;;;;;;;IAa5D;2CACuC;;;;;;;;;;;;IAcvC,oEAAoE;;;;;;;IAOpE;kEAC8D;;;IAG9D,4DAA4D;;IAE5D;;;sCAGkC;;;;IAMlC,2DAA2D;;IAE3D;0BACsB;;IAEtB,uEAAuE;;;IAGvE;mEAC+D;;IAE/D;8EAC0E;;IAE1E;qDACiD;;;;;;;;;IAejD;iFAC6E
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;IAS3B;;;;;;;OAOG;;IAEH;kEAC8D;;IAE9D,sEAAsE;;;;;;;IAOtE,yDAAyD;;;;;;;IAOzD,yEAAyE;;;;;;IAQzE,4DAA4D;;;;;;;;;IAa5D;2CACuC;;;;;;;;;;;;IAcvC,oEAAoE;;;;;;;IAOpE;kEAC8D;;;IAG9D,4DAA4D;;IAE5D;;;sCAGkC;;;;IAMlC,2DAA2D;;IAE3D;0BACsB;;IAEtB,uEAAuE;;;IAGvE;mEAC+D;;IAE/D;8EAC0E;;IAE1E;qDACiD;;;;;;;;;IAejD;iFAC6E;;;;;;;IAS7E;;;;;;;;;;OAUG;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCK,CAAC;AAEX,MAAM,MAAM,aAAa,GACvB,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,aAAa,EAM3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyIrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAEzD"}
|
package/dist/i18n/keys.js
CHANGED
|
@@ -140,7 +140,18 @@ export const SEARCH_I18N_KEYS = {
|
|
|
140
140
|
geoRadiusLabel: "search.geo.radius_label",
|
|
141
141
|
geoClear: "search.geo.clear",
|
|
142
142
|
geoBox: "search.geo.box",
|
|
143
|
-
|
|
143
|
+
/**
|
|
144
|
+
* What a location constraint is called when nobody has given it a NAME.
|
|
145
|
+
*
|
|
146
|
+
* It replaces `search.geo.center` ("Around {lat}, {lon}"), which printed the
|
|
147
|
+
* two numbers the URL happens to store — `55.756, 37.617` — to a person who
|
|
148
|
+
* chose a place. A coordinate is storage, not a description: it cannot be
|
|
149
|
+
* checked by the one reader who could check an address, so a wrong point
|
|
150
|
+
* reads as authoritative and a right one reads as machinery. Hosts that HAVE
|
|
151
|
+
* the name (the geocoder that resolved it, the IP guess's city) pass
|
|
152
|
+
* `geoLabel` and this sentence never appears.
|
|
153
|
+
*/
|
|
154
|
+
geoChosenPlace: "search.geo.chosen_place",
|
|
144
155
|
// ── the URL that could not be read ───────────────────────────────────────
|
|
145
156
|
urlIssuesTitle: "search.url.issues_title",
|
|
146
157
|
urlIssueNotANumber: "search.url.issue.not_a_number",
|
|
@@ -279,7 +290,7 @@ export const searchI18nBundleEn = {
|
|
|
279
290
|
"search.geo.radius_label": "Radius, km",
|
|
280
291
|
"search.geo.clear": "Anywhere",
|
|
281
292
|
"search.geo.box": "Inside the shown area",
|
|
282
|
-
"search.geo.
|
|
293
|
+
"search.geo.chosen_place": "A chosen place on the map",
|
|
283
294
|
"search.url.issues_title": "Part of this link could not be read",
|
|
284
295
|
"search.url.issue.not_a_number": "“{param}” in this link is not a number, so it was ignored",
|
|
285
296
|
"search.url.issue.geo_incomplete": "the location in this link is only half there, so it was ignored",
|
package/dist/i18n/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/ru.js
CHANGED
|
@@ -117,7 +117,7 @@ export const searchI18nBundleRu = {
|
|
|
117
117
|
"search.geo.radius_label": "Радиус, км",
|
|
118
118
|
"search.geo.clear": "Везде",
|
|
119
119
|
"search.geo.box": "В показанной области",
|
|
120
|
-
"search.geo.
|
|
120
|
+
"search.geo.chosen_place": "Выбранное место на карте",
|
|
121
121
|
"search.url.issues_title": "Часть этой ссылки прочитать не удалось",
|
|
122
122
|
"search.url.issue.not_a_number": "«{param}» в этой ссылке — не число, поэтому параметр пропущен",
|
|
123
123
|
"search.url.issue.geo_incomplete": "точка в этой ссылке указана наполовину, поэтому она пропущена",
|
package/dist/i18n/ru.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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"}
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# @stapel/search-react 0.
|
|
1
|
+
# @stapel/search-react 0.9.1
|
|
2
2
|
|
|
3
|
-
Headless React flow pair for stapel-search (contract >=0.
|
|
3
|
+
Headless React flow pair for stapel-search (contract >=0.3 <0.4) — business + state, zero visual opinion.
|
|
4
4
|
Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
|
|
5
5
|
verification-403 interception, i18n engine, analytics facade, TanStack Query layer.
|
|
6
6
|
|
package/manifest.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
|
|
3
3
|
"package": "@stapel/search-react",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.1",
|
|
5
5
|
"backend": {
|
|
6
6
|
"module": "stapel-search",
|
|
7
|
-
"contract": ">=0.
|
|
7
|
+
"contract": ">=0.3 <0.4"
|
|
8
8
|
},
|
|
9
9
|
"layers": [
|
|
10
10
|
"api",
|
|
@@ -732,7 +732,7 @@
|
|
|
732
732
|
"search.filters.show_count_at_least.one",
|
|
733
733
|
"search.filters.show_count_at_least.other",
|
|
734
734
|
"search.geo.box",
|
|
735
|
-
"search.geo.
|
|
735
|
+
"search.geo.chosen_place",
|
|
736
736
|
"search.geo.clear",
|
|
737
737
|
"search.geo.radius_km",
|
|
738
738
|
"search.geo.radius_label",
|
package/nav-manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stapel/search-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Headless React pair for stapel-search: a typed query client, TanStack Query hooks, and a URL-first state codec that makes a search shareable by construction (filters, ranges, geo, sort and the keyset cursor all live in the query string). Drill-down facets rendered with their remaining counts and with the server's own honesty flags — approximate, skipped, degraded — never swallowed; keyset pagination with the window refusal named; DSA Art. 26 `promoted` marking carried into every card slot and the P2B Art. 5 ranking disclosure exposed as data. Zero visual opinion in the main entry; an opt-in /default subpath ships the antd skin, and /router binds the codec to react-router's useSearchParams.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -115,12 +115,12 @@
|
|
|
115
115
|
"size-limit": "^11.2.0",
|
|
116
116
|
"typescript": "^5.8.3",
|
|
117
117
|
"vitest": "^3.2.4",
|
|
118
|
-
"@stapel/attributes-react": "^0.
|
|
119
|
-
"@stapel/core": "^0.
|
|
118
|
+
"@stapel/attributes-react": "^0.4.0",
|
|
119
|
+
"@stapel/core": "^0.20.0",
|
|
120
120
|
"@stapel/image": "^0.4.2",
|
|
121
121
|
"@stapel/showcase": "^0.3.0",
|
|
122
|
-
"@stapel/tokens": "^0.
|
|
123
|
-
"@stapel/tokens-antd": "^0.
|
|
122
|
+
"@stapel/tokens": "^0.6.0",
|
|
123
|
+
"@stapel/tokens-antd": "^0.8.1"
|
|
124
124
|
},
|
|
125
125
|
"engines": {
|
|
126
126
|
"node": ">=22"
|
|
@@ -89,6 +89,22 @@ export interface FacetPanelPaneProps extends ThemeModeProp {
|
|
|
89
89
|
/** The location control (`geo-react`). Unfilled, a location that arrived in
|
|
90
90
|
* the URL still gets its radius and a "clear" control. */
|
|
91
91
|
readonly renderGeoFilter?: (slot: GeoFilterSlotProps) => ReactNode;
|
|
92
|
+
/**
|
|
93
|
+
* What the current location constraint is CALLED, in words — the address or
|
|
94
|
+
* the city the host resolved.
|
|
95
|
+
*
|
|
96
|
+
* The panel owns `lat`/`lon`/`radius_km` as URL state and must never render
|
|
97
|
+
* them: a coordinate is what gets STORED, and storage is not a display
|
|
98
|
+
* concern. `55.756, 37.617` is unreadable to the one person who could have
|
|
99
|
+
* caught the mistake, so a wrong point looks as authoritative as a right one
|
|
100
|
+
* and a right one looks like machinery.
|
|
101
|
+
*
|
|
102
|
+
* Whoever turned an address into that point still has the address — the
|
|
103
|
+
* geocoder's own answer, the city an IP guess named, the label on the map
|
|
104
|
+
* pin — and hands it back here. Absent, the panel says a location is applied
|
|
105
|
+
* without pretending to name it (`search.geo.chosen_place`).
|
|
106
|
+
*/
|
|
107
|
+
readonly geoLabel?: ReactNode;
|
|
92
108
|
/** BCP-47 tags this deployment indexes — see {@link LanguageSelect}. */
|
|
93
109
|
readonly languages?: readonly string[];
|
|
94
110
|
/**
|
|
@@ -148,6 +164,28 @@ function CategoryFilter(props: {
|
|
|
148
164
|
);
|
|
149
165
|
}
|
|
150
166
|
|
|
167
|
+
/**
|
|
168
|
+
* What a location constraint is called when the host handed down no name.
|
|
169
|
+
*
|
|
170
|
+
* Two sentences, and neither of them is a number. A box is describable without
|
|
171
|
+
* one — it is the area on the screen — and a point is not, so the point's
|
|
172
|
+
* sentence says a place was chosen and stops there. The alternative that was
|
|
173
|
+
* shipped for four releases printed `Around 55.756, 37.617`, which is the
|
|
174
|
+
* defect class this pair is otherwise careful about everywhere else: a value
|
|
175
|
+
* the reader cannot check, rendered as if it were an answer.
|
|
176
|
+
*
|
|
177
|
+
* Shared with `<FilterChips>` so the phone row and the desktop panel cannot
|
|
178
|
+
* drift into saying two different things about the same URL.
|
|
179
|
+
*/
|
|
180
|
+
export function geoSummaryFallback(
|
|
181
|
+
geo: SearchGeo,
|
|
182
|
+
t: (key: string) => string
|
|
183
|
+
): string {
|
|
184
|
+
return geo.kind === "bbox"
|
|
185
|
+
? t(SEARCH_I18N_KEYS.geoBox)
|
|
186
|
+
: t(SEARCH_I18N_KEYS.geoChosenPlace);
|
|
187
|
+
}
|
|
188
|
+
|
|
151
189
|
/**
|
|
152
190
|
* The location constraint.
|
|
153
191
|
*
|
|
@@ -156,9 +194,15 @@ function CategoryFilter(props: {
|
|
|
156
194
|
* number in the URL, and a link shared with `lat/lon/radius_km` is a link this
|
|
157
195
|
* panel can widen, tighten and clear without knowing what a map is. That is the
|
|
158
196
|
* difference between a slot and a hole.
|
|
197
|
+
*
|
|
198
|
+
* NAMING the centre is a third thing again, and it is the host's: this panel
|
|
199
|
+
* has two numbers and no way to turn them into a place. So it either says the
|
|
200
|
+
* name it was handed (`label`) or says that a place is chosen — never the
|
|
201
|
+
* numbers themselves. See {@link FacetPanelPaneProps.geoLabel}.
|
|
159
202
|
*/
|
|
160
203
|
function GeoFilter(props: {
|
|
161
204
|
render?: (slot: GeoFilterSlotProps) => ReactNode;
|
|
205
|
+
label?: ReactNode;
|
|
162
206
|
}): ReactElement | null {
|
|
163
207
|
const t = useT();
|
|
164
208
|
const { state, setGeo } = useSearchState();
|
|
@@ -196,12 +240,7 @@ function GeoFilter(props: {
|
|
|
196
240
|
<Typography.Text strong>{t(SEARCH_I18N_KEYS.geoTitle)}</Typography.Text>
|
|
197
241
|
{slot}
|
|
198
242
|
<Typography.Text type="secondary" data-testid="search-geo-summary">
|
|
199
|
-
{
|
|
200
|
-
? t(SEARCH_I18N_KEYS.geoBox)
|
|
201
|
-
: t(SEARCH_I18N_KEYS.geoCenter, {
|
|
202
|
-
lat: geo.lat.toFixed(3),
|
|
203
|
-
lon: geo.lon.toFixed(3),
|
|
204
|
-
})}
|
|
243
|
+
{props.label ?? geoSummaryFallback(geo, t)}
|
|
205
244
|
</Typography.Text>
|
|
206
245
|
{geo.kind === "center" && (
|
|
207
246
|
<Flex gap={spacing[2]} align="center" wrap>
|
|
@@ -318,6 +357,7 @@ export function FacetPanelPane(props: FacetPanelPaneProps): ReactElement {
|
|
|
318
357
|
{...(props.renderGeoFilter !== undefined
|
|
319
358
|
? { render: props.renderGeoFilter }
|
|
320
359
|
: {})}
|
|
360
|
+
{...(props.geoLabel !== undefined ? { label: props.geoLabel } : {})}
|
|
321
361
|
/>
|
|
322
362
|
|
|
323
363
|
{/* Honesty flags, not failures: the counts ARE approximate and
|
|
@@ -62,6 +62,7 @@ import type { FacetGroup } from "../state/facets.js";
|
|
|
62
62
|
import { SEARCH_I18N_KEYS } from "../i18n/keys.js";
|
|
63
63
|
import { FacetGroupControl } from "./FacetGroupControl.js";
|
|
64
64
|
import { RangeFilterRow } from "./RangeFilterRow.js";
|
|
65
|
+
import { geoSummaryFallback } from "./FacetPanelPane.js";
|
|
65
66
|
import type { GeoFilterSlotProps } from "./FacetPanelPane.js";
|
|
66
67
|
|
|
67
68
|
/** The class the scroller carries, for {@link chipRowCss}. */
|
|
@@ -110,6 +111,15 @@ export interface FilterChipsProps {
|
|
|
110
111
|
* it the location chip appears only when the URL already carries a point,
|
|
111
112
|
* so a shared link can still be widened. */
|
|
112
113
|
readonly renderGeoFilter?: (slot: GeoFilterSlotProps) => ReactNode;
|
|
114
|
+
/**
|
|
115
|
+
* What the current location constraint is CALLED — see
|
|
116
|
+
* {@link FacetPanelPaneProps.geoLabel}. The chip carries it as its own text,
|
|
117
|
+
* which is the whole point of a chip row: "Berlin Mitte" states the filter
|
|
118
|
+
* on the results page, where `55.756, 37.617` stated only that a machine was
|
|
119
|
+
* involved. Absent, the chip reads `search.geo.chosen_place`; never a
|
|
120
|
+
* coordinate, on either surface.
|
|
121
|
+
*/
|
|
122
|
+
readonly geoLabel?: ReactNode;
|
|
113
123
|
/** Open the whole panel — the leading chip's action. The page owns that
|
|
114
124
|
* sheet, because the page is the surface it covers. */
|
|
115
125
|
readonly onOpenAll: () => void;
|
|
@@ -203,15 +213,13 @@ export function FilterChips(props: FilterChipsProps): ReactElement {
|
|
|
203
213
|
|
|
204
214
|
const geo = state.geo;
|
|
205
215
|
const showGeoChip = props.renderGeoFilter !== undefined || geo !== undefined;
|
|
206
|
-
|
|
216
|
+
// Nothing applied: the chip is the FILTER's name ("Location"), because there
|
|
217
|
+
// is no constraint to describe yet. Applied: the host's name for the place,
|
|
218
|
+
// and failing that the sentence that admits the pair does not know it.
|
|
219
|
+
const geoChipLabel: ReactNode =
|
|
207
220
|
geo === undefined
|
|
208
221
|
? t(SEARCH_I18N_KEYS.geoTitle)
|
|
209
|
-
:
|
|
210
|
-
? t(SEARCH_I18N_KEYS.geoBox)
|
|
211
|
-
: t(SEARCH_I18N_KEYS.geoCenter, {
|
|
212
|
-
lat: geo.lat.toFixed(3),
|
|
213
|
-
lon: geo.lon.toFixed(3),
|
|
214
|
-
});
|
|
222
|
+
: (props.geoLabel ?? geoSummaryFallback(geo, t));
|
|
215
223
|
|
|
216
224
|
return (
|
|
217
225
|
<>
|
|
@@ -256,7 +264,7 @@ export function FilterChips(props: FilterChipsProps): ReactElement {
|
|
|
256
264
|
setOpen("geo");
|
|
257
265
|
}}
|
|
258
266
|
>
|
|
259
|
-
{
|
|
267
|
+
{geoChipLabel}
|
|
260
268
|
</Button>
|
|
261
269
|
)}
|
|
262
270
|
|
|
@@ -350,7 +358,7 @@ export function FilterChips(props: FilterChipsProps): ReactElement {
|
|
|
350
358
|
{geo !== undefined && (
|
|
351
359
|
<>
|
|
352
360
|
<Typography.Text type="secondary" data-testid="search-chip-geo-summary">
|
|
353
|
-
{
|
|
361
|
+
{geoChipLabel}
|
|
354
362
|
</Typography.Text>
|
|
355
363
|
<Button
|
|
356
364
|
style={{ alignSelf: "flex-start" }}
|
|
@@ -33,6 +33,20 @@
|
|
|
33
33
|
* behind a "Filters (N)" button and opens as a bottom sheet through the shared
|
|
34
34
|
* `SkinDialog`, with the count of what is applied on the button itself.
|
|
35
35
|
*
|
|
36
|
+
* ── Where the search opens, and what it calls the place ───────────────────
|
|
37
|
+
*
|
|
38
|
+
* `defaultGeo` centres a fresh search on the visitor — a granted browser
|
|
39
|
+
* prompt, or the server's IP guess when there was none — and `geoLabel` says
|
|
40
|
+
* what that place is CALLED. Both are the host's to resolve: this page has a
|
|
41
|
+
* `lat` and a `lon` in its query string and no way on earth to turn them into
|
|
42
|
+
* "Berlin Mitte", which is exactly why it must not print them. A search
|
|
43
|
+
* package that grew a geocoder to say a nicer sentence would have taken on the
|
|
44
|
+
* whole of `geo-react` to avoid one bad line.
|
|
45
|
+
*
|
|
46
|
+
* The centring is applied once, only into a URL that carries no location, and
|
|
47
|
+
* never again after the visitor has said anything about location themselves —
|
|
48
|
+
* see {@link SearchStateProviderProps.defaultGeo}, which owns the rules.
|
|
49
|
+
*
|
|
36
50
|
* ── The filter column is laid out only when there is something in it ──────
|
|
37
51
|
*
|
|
38
52
|
* `Col md={7}` was unconditional, and on a deployment whose search plan
|
|
@@ -59,6 +73,7 @@ import type { SearchParamsAdapter } from "../headless/SearchStateProvider.js";
|
|
|
59
73
|
import { useFacetPanel } from "../headless/FacetPanel.js";
|
|
60
74
|
import { useAppliedCount } from "../headless/useAppliedCount.js";
|
|
61
75
|
import type { ParseSearchStateOptions } from "../state/urlState.js";
|
|
76
|
+
import type { SearchGeo } from "../api/types.js";
|
|
62
77
|
import { buildRangeGroups } from "../state/ranges.js";
|
|
63
78
|
import { SEARCH_I18N_KEYS } from "../i18n/keys.js";
|
|
64
79
|
import { FacetPanelPane } from "./FacetPanelPane.js";
|
|
@@ -141,6 +156,24 @@ export interface SearchPageProps extends ThemeModeProp, ParseSearchStateOptions
|
|
|
141
156
|
readonly renderCategoryFilter?: (slot: CategoryFilterSlotProps) => ReactNode;
|
|
142
157
|
/** The location control slot (`geo-react`). */
|
|
143
158
|
readonly renderGeoFilter?: (slot: GeoFilterSlotProps) => ReactNode;
|
|
159
|
+
/**
|
|
160
|
+
* What the current location is CALLED, in words — set once here and it
|
|
161
|
+
* reaches both filter surfaces, the desktop panel and the phone chip row.
|
|
162
|
+
* See {@link FacetPanelPaneProps.geoLabel}: this page never prints a
|
|
163
|
+
* coordinate, with or without it.
|
|
164
|
+
*/
|
|
165
|
+
readonly geoLabel?: ReactNode;
|
|
166
|
+
/**
|
|
167
|
+
* Open the search centred where the visitor is, when the URL says nothing
|
|
168
|
+
* about location — see {@link SearchStateProviderProps.defaultGeo} for the
|
|
169
|
+
* four rules that keep it from overruling a link or a person.
|
|
170
|
+
*
|
|
171
|
+
* The host resolves the position; this page does not know what a map or a
|
|
172
|
+
* geocoder is and must not learn. A browser prompt (`usePermission`
|
|
173
|
+
* + `geolocation`) or the server's IP guess both arrive here as the same two
|
|
174
|
+
* numbers, and `geoLabel` is where the name of the place they mean comes in.
|
|
175
|
+
*/
|
|
176
|
+
readonly defaultGeo?: SearchGeo | undefined;
|
|
144
177
|
/** Container chrome under the results — e.g. the ranking-disclosure link. */
|
|
145
178
|
readonly footer?: ReactNode;
|
|
146
179
|
/**
|
|
@@ -225,6 +258,7 @@ interface SearchPageBodyProps {
|
|
|
225
258
|
readonly languages?: readonly string[];
|
|
226
259
|
readonly renderCategoryFilter?: (slot: CategoryFilterSlotProps) => ReactNode;
|
|
227
260
|
readonly renderGeoFilter?: (slot: GeoFilterSlotProps) => ReactNode;
|
|
261
|
+
readonly geoLabel?: ReactNode;
|
|
228
262
|
readonly footer?: ReactNode;
|
|
229
263
|
readonly filtersHeader?: ReactNode;
|
|
230
264
|
readonly resultsHeading?: ReactNode;
|
|
@@ -332,6 +366,7 @@ function SearchPageBody(props: SearchPageBodyProps): ReactElement {
|
|
|
332
366
|
{...(props.renderGeoFilter !== undefined
|
|
333
367
|
? { renderGeoFilter: props.renderGeoFilter }
|
|
334
368
|
: {})}
|
|
369
|
+
{...(props.geoLabel !== undefined ? { geoLabel: props.geoLabel } : {})}
|
|
335
370
|
/>
|
|
336
371
|
)}
|
|
337
372
|
</Flex>
|
|
@@ -396,6 +431,7 @@ function SearchPageBody(props: SearchPageBodyProps): ReactElement {
|
|
|
396
431
|
{...(props.renderGeoFilter !== undefined
|
|
397
432
|
? { renderGeoFilter: props.renderGeoFilter }
|
|
398
433
|
: {})}
|
|
434
|
+
{...(props.geoLabel !== undefined ? { geoLabel: props.geoLabel } : {})}
|
|
399
435
|
/>
|
|
400
436
|
<SkinDialog
|
|
401
437
|
open={sheetOpen}
|
|
@@ -452,6 +488,8 @@ export function SearchPage(props: SearchPageProps): ReactElement {
|
|
|
452
488
|
languages,
|
|
453
489
|
renderCategoryFilter,
|
|
454
490
|
renderGeoFilter,
|
|
491
|
+
geoLabel,
|
|
492
|
+
defaultGeo,
|
|
455
493
|
footer,
|
|
456
494
|
filtersHeader,
|
|
457
495
|
resultsHeading,
|
|
@@ -471,7 +509,7 @@ export function SearchPage(props: SearchPageProps): ReactElement {
|
|
|
471
509
|
|
|
472
510
|
return (
|
|
473
511
|
<SkinTheme surface="base" {...(mode !== undefined ? { mode } : {})}>
|
|
474
|
-
<SearchStateProvider adapter={adapter} {...parseOptions}>
|
|
512
|
+
<SearchStateProvider adapter={adapter} defaultGeo={defaultGeo} {...parseOptions}>
|
|
475
513
|
<SearchPageBody
|
|
476
514
|
{...(renderCard !== undefined ? { renderCard } : {})}
|
|
477
515
|
{...(categoryFeatures !== undefined ? { categoryFeatures } : {})}
|
|
@@ -480,6 +518,7 @@ export function SearchPage(props: SearchPageProps): ReactElement {
|
|
|
480
518
|
{...(languages !== undefined ? { languages } : {})}
|
|
481
519
|
{...(renderCategoryFilter !== undefined ? { renderCategoryFilter } : {})}
|
|
482
520
|
{...(renderGeoFilter !== undefined ? { renderGeoFilter } : {})}
|
|
521
|
+
{...(geoLabel !== undefined ? { geoLabel } : {})}
|
|
483
522
|
{...(footer !== undefined ? { footer } : {})}
|
|
484
523
|
{...(filtersHeader !== undefined ? { filtersHeader } : {})}
|
|
485
524
|
{...(resultsHeading !== undefined ? { resultsHeading } : {})}
|
package/src/default/index.ts
CHANGED
|
@@ -21,7 +21,12 @@
|
|
|
21
21
|
* owns walking the tree; this pair owns the `category` parameter.
|
|
22
22
|
* 4. **`renderGeoFilter`** — the location control. `geo-react` owns the map
|
|
23
23
|
* and the geocoder; this pair owns `lat`/`lon`/`radius_km`/`bbox`, and
|
|
24
|
-
* keeps the controls that WIDEN a location a link already carries.
|
|
24
|
+
* keeps the controls that WIDEN a location a link already carries. Its two
|
|
25
|
+
* companions divide the same seam the same way: `geoLabel` is what the
|
|
26
|
+
* current place is CALLED (owning a coordinate is not permission to print
|
|
27
|
+
* one), and `defaultGeo` is where a fresh search opens when the URL names
|
|
28
|
+
* nowhere — the visitor's own position, resolved by whoever is allowed to
|
|
29
|
+
* ask for it.
|
|
25
30
|
* 5. **retheming through the §68 token JSON** — every surface wraps itself
|
|
26
31
|
* in the shared `SkinTheme`, so a host's regenerated `--stapel-*` custom
|
|
27
32
|
* properties reach this skin with zero code.
|