The current useItem hook requires users to pass the full URL of an item, which is redundant and inconsistent with other hooks in the library:
// Current API
const { item } = useItem('https://stac-catalog.com/collections/sentinel-2/items/abc123');
This design has several issues:
- Redundancy: The
StacApiProvider already knows the base API URL, yet users must construct the full URL themselves
- Error-prone: Manual URL construction can lead to mistakes (typos, wrong separators, encoding issues)
- Not portable: Hardcoded URLs make switching between environments (dev/staging/prod) difficult
- Inconsistent API:
useCollection takes just a collectionId, but useItem requires a full URL
Proposed Solution
Refactor useItem to accept collectionId and itemId parameters, then construct the URL internally using the stacApi from context:
// Proposed API
const { item } = useItem('sentinel-2', 'abc123');
// Or with an object for clarity:
const { item } = useItem({ collectionId: 'sentinel-2', itemId: 'abc123' });
This follows the STAC API spec pattern: /collections/{collectionId}/items/{itemId}
Benefits
- Consistency: Matches the pattern used by
useCollection
- Simplicity: No manual URL construction required
- Portability: Environment-agnostic (base URL comes from context)
- Type safety: Parameters are clearly defined
- Less error-prone: Reduces chance of URL construction mistakes
Implementation Details
The hook would:
- Accept
collectionId and itemId as parameters
- Get
stacApi from useStacApiContext()
- Construct the URL using
stacApi.baseUrl + /collections/${collectionId}/items/${itemId}
- Use this constructed URL for the query
Breaking Change
⚠️ This is a breaking change that would require a major version bump.
The hook could detect which signature is being used based on the number/type of arguments.
Related
- Consider whether other hooks might benefit from similar improvements
- Update documentation and examples
- Add migration guide if this is a breaking change