Native capabilities
Capability-driven UI on React Native follows the same rules as web: use useMediaCapabilities or getCapabilities(client) from @media-sdk/core — never if (provider === "pexels") in tabs, filters, or grids.
Quick reference
tsx
import { useMediaCapabilities } from "@media-sdk/native";
function AppTabs() {
const caps = useMediaCapabilities();
return (
<>
{caps.operations.searchPhotos && <Tab label="Search" />}
{caps.operations.curatedPhotos && <Tab label="Curated" />}
{caps.operations.searchVideos && <Tab label="Videos" />}
</>
);
}MediaCapabilities shape
ts
interface MediaCapabilities {
readonly operations: MediaOperationCapabilities;
readonly photoFilters: MediaFilterCapabilities;
readonly videoFilters: MediaFilterCapabilities;
}Full type reference: Core capabilities.
getCapabilities(client)
For non-hook contexts (client setup, utilities):
ts
import {
getCapabilities,
PexelsMediaClient,
ApiKeyProvider,
} from "@media-sdk/core";
const client = new PexelsMediaClient(new ApiKeyProvider(key));
const caps = getCapabilities(client);
if (caps.operations.curatedPhotos) {
// safe to call client.getCuratedPhotos()
}Custom MediaClient implementations without capabilities receive DEFAULT_CAPABILITIES (all false).
UI gating checklist
| UI control | Gate |
|---|---|
| Curated tab / screen | caps.operations.curatedPhotos |
| Videos tab | caps.operations.searchVideos |
| Orientation filter | caps.photoFilters.orientation or caps.videoFilters.orientation |
| Size filter | caps.photoFilters.size |
| Color filter | caps.photoFilters.color |
| Category filter | caps.photoFilters.category |
| Min width / height | caps.photoFilters.minWidth / minHeight |
| Editor's choice | caps.photoFilters.editorsChoice |
| Locale filter | caps.photoFilters.locale |
Provider differences
Pexels supports curated photos and size filters; Pixabay supports category, min dimensions, and editor's choice. See the provider matrix.
Related
- Filters — passing filters to hooks
- Pexels + Pixabay — full comparison table
- Core capabilities — deep dive