# PollingSubscription

Will dispatch a `fetch` action at the minimum interval of all subscriptions to this
resource.

- Pauses when offline.
- Immediately fetches when online status returns.
- Immediately fetches any new subscriptions.

> **Info: implements**
>
> `PollingSubscription` implements [Subscription](https://dataclient.io/docs/api/SubscriptionManager.md#subscription)

**Web**

```tsx title="index.tsx"
import {
  DataProvider,
  NetworkManager,
  SubscriptionManager,
  PollingSubscription,
} from '@data-client/react';
import { createRoot } from 'react-dom/client';
import App from './App';

const managers = [
  new NetworkManager(),
  new SubscriptionManager(PollingSubscription),
];

createRoot(document.body).render(
  <DataProvider managers={managers}>
    <App />
  </DataProvider>,
);
```

**React Native**

```tsx title="index.tsx"
import {
  DataProvider,
  NetworkManager,
  SubscriptionManager,
  PollingSubscription,
} from '@data-client/react';
import { AppRegistry } from 'react-native';
import App from './App';

const managers = [
  new NetworkManager(),
  new SubscriptionManager(PollingSubscription),
];

const Root = () => (
  <DataProvider managers={managers}>
    <App />
  </DataProvider>
);
AppRegistry.registerComponent('MyApp', () => Root);
```

**NextJS**

```tsx title="app/Provider.tsx"
'use client';
import {
  NetworkManager,
  SubscriptionManager,
  PollingSubscription,
} from '@data-client/react';
import { DataProvider } from '@data-client/react/nextjs';

const managers = [
  new NetworkManager(),
  new SubscriptionManager(PollingSubscription),
];

export default function Provider({
  children,
}: {
  children: React.ReactNode;
}) {
  return <DataProvider managers={managers}>{children}</DataProvider>;
}
```

```tsx title="app/layout.tsx"
import Provider from './Provider';

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <Provider>{children}</Provider>
      </body>
    </html>
  );
}
```

**Expo**

```tsx title="app/_layout.tsx"
import { Stack } from 'expo-router';
import {
  DataProvider,
  NetworkManager,
  SubscriptionManager,
  PollingSubscription,
} from '@data-client/react';

const managers = [
  new NetworkManager(),
  new SubscriptionManager(PollingSubscription),
];

export default function RootLayout() {
  return (
    <DataProvider managers={managers}>
      <Stack>
        <Stack.Screen name="index" />
      </Stack>
    </DataProvider>
  );
}
```

## Dispatched Actions

- 'rdc/fetch'

> #### Note:
>
> This is already used by `DataProvider` by default.
