or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

components.mdfields.mdforms.mdhooks.mdicons.mdindex.mdproviders.mdutilities.md

providers.mddocs/

0

# Context Providers

1

2

Provider components for managing global state including authentication, configuration, themes, data flow, and UI state in Payload CMS admin interfaces.

3

4

## Core Providers

5

6

### RootProvider

7

8

Root provider that wraps all other context providers for the admin interface.

9

10

```typescript { .api }

11

interface RootProviderProps {

12

children: React.ReactNode;

13

}

14

15

function RootProvider(props: RootProviderProps): JSX.Element;

16

```

17

18

Usage example:

19

```typescript

20

import { RootProvider } from '@payloadcms/ui';

21

22

function AdminApp() {

23

return (

24

<RootProvider>

25

{/* All other providers and app content */}

26

</RootProvider>

27

);

28

}

29

```

30

31

### ConfigProvider

32

33

Provides Payload configuration context to child components.

34

35

```typescript { .api }

36

interface ConfigProviderProps {

37

children: React.ReactNode;

38

config: ClientConfig;

39

}

40

41

function ConfigProvider(props: ConfigProviderProps): JSX.Element;

42

43

function useConfig(): ClientConfigContext;

44

45

interface ClientConfigContext {

46

config: ClientConfig;

47

getEntityConfig: (slug: string, type: 'collections' | 'globals') => EntityConfig | null;

48

setConfig: (config: ClientConfig) => void;

49

}

50

```

51

52

### AuthProvider

53

54

Authentication state and methods provider.

55

56

```typescript { .api }

57

interface AuthProviderProps {

58

children: React.ReactNode;

59

user?: ClientUser;

60

permissions?: SanitizedPermissions;

61

}

62

63

function AuthProvider(props: AuthProviderProps): JSX.Element;

64

65

function useAuth<T = any>(): AuthContext<T>;

66

67

interface AuthContext<T> {

68

user: T | null;

69

token?: string;

70

permissions?: SanitizedPermissions;

71

logOut: () => Promise<void>;

72

refreshCookie: () => Promise<void>;

73

setUser: (user: T | null) => void;

74

strategy?: string;

75

}

76

```

77

78

Usage example:

79

```typescript

80

import { AuthProvider, useAuth } from '@payloadcms/ui';

81

82

function AdminWrapper() {

83

const { user, logOut } = useAuth();

84

85

return (

86

<div>

87

{user ? (

88

<div>

89

Welcome, {user.email}

90

<button onClick={logOut}>Logout</button>

91

</div>

92

) : (

93

<div>Please log in</div>

94

)}

95

</div>

96

);

97

}

98

```

99

100

### TranslationProvider

101

102

Internationalization context for multi-language support.

103

104

```typescript { .api }

105

interface TranslationProviderProps {

106

children: React.ReactNode;

107

}

108

109

function TranslationProvider(props: TranslationProviderProps): JSX.Element;

110

111

function useTranslation(): TranslationContext;

112

113

interface TranslationContext {

114

t: (key: string, options?: Record<string, unknown>) => string;

115

i18n: {

116

language: string;

117

languages: string[];

118

changeLanguage: (lang: string) => void;

119

};

120

}

121

```

122

123

### LocaleProvider

124

125

Current locale context provider.

126

127

```typescript { .api }

128

interface LocaleProviderProps {

129

children: React.ReactNode;

130

locale?: string;

131

}

132

133

function LocaleProvider(props: LocaleProviderProps): JSX.Element;

134

135

function useLocale(): LocaleContext;

136

137

interface LocaleContext {

138

locale: string;

139

setLocale: (locale: string) => void;

140

}

141

```

142

143

## UI State Providers

144

145

### ThemeProvider

146

147

Theme configuration and switching provider.

148

149

```typescript { .api }

150

interface ThemeProviderProps {

151

children: React.ReactNode;

152

theme?: 'light' | 'dark' | 'auto';

153

}

154

155

function ThemeProvider(props: ThemeProviderProps): JSX.Element;

156

157

function useTheme(): ThemeContext;

158

159

interface ThemeContext {

160

theme: Theme;

161

setTheme: (theme: 'light' | 'dark' | 'auto') => void;

162

autoMode: boolean;

163

}

164

```

165

166

### WindowInfoProvider

167

168

Window size and breakpoint information provider.

169

170

```typescript { .api }

171

interface WindowInfoProviderProps {

172

children: React.ReactNode;

173

}

174

175

function WindowInfoProvider(props: WindowInfoProviderProps): JSX.Element;

176

177

function useWindowInfo(): WindowInfoContext;

178

179

interface WindowInfoContext {

180

width: number;

181

height: number;

182

breakpoint: {

183

s: boolean;

184

m: boolean;

185

l: boolean;

186

};

187

}

188

```

189

190

### RouteTransitionProvider

191

192

Route transition animations provider.

193

194

```typescript { .api }

195

interface RouteTransitionProviderProps {

196

children: React.ReactNode;

197

}

198

199

function RouteTransitionProvider(props: RouteTransitionProviderProps): JSX.Element;

200

201

function useRouteTransition(): RouteTransitionContext;

202

203

interface RouteTransitionContext {

204

inProgress: boolean;

205

start: () => void;

206

complete: () => void;

207

}

208

```

209

210

### ScrollInfoProvider

211

212

Scroll position information provider.

213

214

```typescript { .api }

215

interface ScrollInfoProviderProps {

216

children: React.ReactNode;

217

}

218

219

function ScrollInfoProvider(props: ScrollInfoProviderProps): JSX.Element;

220

221

function useScrollInfo(): ScrollInfoContext;

222

223

interface ScrollInfoContext {

224

y: number;

225

x: number;

226

direction: 'up' | 'down' | 'left' | 'right' | null;

227

}

228

```

229

230

## Document and Form Providers

231

232

### DocumentInfoProvider

233

234

Current document metadata provider.

235

236

```typescript { .api }

237

interface DocumentInfoProviderProps {

238

children: React.ReactNode;

239

id?: string | number;

240

collection?: string;

241

global?: string;

242

}

243

244

function DocumentInfoProvider(props: DocumentInfoProviderProps): JSX.Element;

245

246

function useDocumentInfo(): DocumentInfoContext;

247

248

interface DocumentInfoContext {

249

id?: string | number;

250

collection?: string;

251

global?: string;

252

hasPublishedDoc?: boolean;

253

unpublishedVersions?: number;

254

publishedVersions?: number;

255

mostRecentVersionIsAutosaved?: boolean;

256

initialState?: Record<string, unknown>;

257

}

258

```

259

260

### DocumentEventsProvider

261

262

Document-level event handling provider.

263

264

```typescript { .api }

265

interface DocumentEventsProviderProps {

266

children: React.ReactNode;

267

}

268

269

function DocumentEventsProvider(props: DocumentEventsProviderProps): JSX.Element;

270

271

function useDocumentEvents(): DocumentEventsContext;

272

273

interface DocumentEventsContext {

274

mostRecentUpdate: number;

275

triggerUpdate: () => void;

276

}

277

```

278

279

### OperationProvider

280

281

Current CRUD operation context provider.

282

283

```typescript { .api }

284

interface OperationProviderProps {

285

children: React.ReactNode;

286

operation: 'create' | 'update';

287

}

288

289

function OperationProvider(props: OperationProviderProps): JSX.Element;

290

291

function useOperation(): string;

292

```

293

294

### EditDepthProvider

295

296

Nested edit depth tracking provider.

297

298

```typescript { .api }

299

interface EditDepthProviderProps {

300

children: React.ReactNode;

301

depth?: number;

302

}

303

304

function EditDepthProvider(props: EditDepthProviderProps): JSX.Element;

305

306

function useEditDepth(): number;

307

```

308

309

## Data Providers

310

311

### ListQueryProvider

312

313

List query and filtering state provider.

314

315

```typescript { .api }

316

interface ListQueryProviderProps {

317

children: React.ReactNode;

318

defaultSort?: string;

319

defaultWhere?: Record<string, unknown>;

320

defaultLimit?: number;

321

}

322

323

function ListQueryProvider(props: ListQueryProviderProps): JSX.Element;

324

325

function useListQuery(): ListQueryContext;

326

327

interface ListQueryContext {

328

data: ListResult;

329

query: ListQuery;

330

refetch: () => Promise<void>;

331

isLoading: boolean;

332

error?: string;

333

updateQuery: (query: Partial<ListQuery>) => void;

334

}

335

```

336

337

### SelectionProvider

338

339

Multi-select state management provider.

340

341

```typescript { .api }

342

interface SelectionProviderProps {

343

children: React.ReactNode;

344

docs: Record<string, unknown>[];

345

}

346

347

function SelectionProvider(props: SelectionProviderProps): JSX.Element;

348

349

function useSelection(): SelectionContext;

350

351

interface SelectionContext {

352

selected: Map<string, Record<string, unknown>>;

353

selectAll: () => void;

354

deselectAll: () => void;

355

toggleSelection: (id: string) => void;

356

isSelected: (id: string) => boolean;

357

count: number;

358

}

359

```

360

361

### PreferencesProvider

362

363

User preferences storage provider.

364

365

```typescript { .api }

366

interface PreferencesProviderProps {

367

children: React.ReactNode;

368

}

369

370

function PreferencesProvider(props: PreferencesProviderProps): JSX.Element;

371

372

function usePreferences(): PreferencesContext;

373

374

interface PreferencesContext {

375

getPreference: <T = any>(key: string) => T;

376

setPreference: <T = any>(key: string, value: T) => void;

377

}

378

```

379

380

### ParamsProvider

381

382

Route parameters context provider.

383

384

```typescript { .api }

385

interface ParamsProviderProps {

386

children: React.ReactNode;

387

params: Record<string, string>;

388

}

389

390

function ParamsProvider(props: ParamsProviderProps): JSX.Element;

391

392

function useParams(): Record<string, string>;

393

```

394

395

## Advanced Providers

396

397

### ServerFunctionsProvider

398

399

Server-side function execution provider.

400

401

```typescript { .api }

402

interface ServerFunctionsProviderProps {

403

children: React.ReactNode;

404

}

405

406

function ServerFunctionsProvider(props: ServerFunctionsProviderProps): JSX.Element;

407

408

function useServerFunctions(): ServerFunctionsContext;

409

410

interface ServerFunctionsContext {

411

renderDocument: RenderDocumentServerFunction;

412

[key: string]: (...args: any[]) => any;

413

}

414

415

type RenderDocumentServerFunction = (

416

args: RenderDocumentArgs

417

) => Promise<RenderDocumentResult>;

418

419

interface RenderDocumentArgs {

420

id?: string | number;

421

collection?: string;

422

global?: string;

423

locale?: string;

424

fallbackLocale?: string;

425

depth?: number;

426

overrides?: Record<string, unknown>;

427

}

428

429

interface RenderDocumentResult {

430

doc: Record<string, unknown>;

431

permissions: Record<string, unknown>;

432

}

433

```

434

435

### ClientFunctionProvider

436

437

Client-side function registry provider.

438

439

```typescript { .api }

440

interface ClientFunctionProviderProps {

441

children: React.ReactNode;

442

}

443

444

function ClientFunctionProvider(props: ClientFunctionProviderProps): JSX.Element;

445

446

function useClientFunctions(): ClientFunctionsContext;

447

function useAddClientFunction(): (name: string, func: Function) => void;

448

449

interface ClientFunctionsContext {

450

[key: string]: Function;

451

}

452

```

453

454

### ActionsProvider

455

456

Global actions registry provider.

457

458

```typescript { .api }

459

interface ActionsProviderProps {

460

children: React.ReactNode;

461

}

462

463

function ActionsProvider(props: ActionsProviderProps): JSX.Element;

464

465

function useActions(): ActionsContext;

466

467

interface ActionsContext {

468

setViewActions: (actions: ViewAction[]) => void;

469

getViewActions: () => ViewAction[];

470

}

471

```

472

473

### LivePreviewProvider

474

475

Live preview functionality provider.

476

477

```typescript { .api }

478

interface LivePreviewProviderProps {

479

children: React.ReactNode;

480

}

481

482

function LivePreviewProvider(props: LivePreviewProviderProps): JSX.Element;

483

```

484

485

### SearchParamsProvider

486

487

URL search parameters provider.

488

489

```typescript { .api }

490

interface SearchParamsProviderProps {

491

children: React.ReactNode;

492

searchParams: Record<string, string>;

493

}

494

495

function SearchParamsProvider(props: SearchParamsProviderProps): JSX.Element;

496

497

function useSearchParams(): SearchParamsContext;

498

499

interface SearchParamsContext {

500

searchParams: Record<string, string>;

501

replace: (params: Record<string, string>) => void;

502

push: (params: Record<string, string>) => void;

503

}

504

```

505

506

## Upload and File Providers

507

508

### UploadHandlersProvider

509

510

Upload handling functions provider.

511

512

```typescript { .api }

513

interface UploadHandlersProviderProps {

514

children: React.ReactNode;

515

}

516

517

function UploadHandlersProvider(props: UploadHandlersProviderProps): JSX.Element;

518

519

function useUploadHandlers(): UploadHandlersContext;

520

521

interface UploadHandlersContext {

522

upload: (files: File[]) => Promise<UploadResult[]>;

523

replace: (id: string, file: File) => Promise<UploadResult>;

524

remove: (id: string) => Promise<void>;

525

}

526

```

527

528

### UploadEditsProvider

529

530

Upload editing state provider.

531

532

```typescript { .api }

533

interface UploadEditsProviderProps {

534

children: React.ReactNode;

535

}

536

537

function UploadEditsProvider(props: UploadEditsProviderProps): JSX.Element;

538

539

function useUploadEdits(): UploadEditsContext;

540

541

interface UploadEditsContext {

542

edits: UploadEdit[];

543

addEdit: (edit: UploadEdit) => void;

544

removeEdit: (id: string) => void;

545

applyEdits: () => Promise<void>;

546

}

547

```

548

549

## Provider Composition Example

550

551

```typescript

552

import {

553

RootProvider,

554

ConfigProvider,

555

AuthProvider,

556

ThemeProvider,

557

TranslationProvider,

558

WindowInfoProvider

559

} from '@payloadcms/ui';

560

561

function AdminApp({ config, user, locale = 'en' }) {

562

return (

563

<RootProvider>

564

<ConfigProvider config={config}>

565

<AuthProvider user={user}>

566

<ThemeProvider theme="auto">

567

<TranslationProvider>

568

<WindowInfoProvider>

569

<LocaleProvider locale={locale}>

570

<YourAdminInterface />

571

</LocaleProvider>

572

</WindowInfoProvider>

573

</TranslationProvider>

574

</ThemeProvider>

575

</AuthProvider>

576

</ConfigProvider>

577

</RootProvider>

578

);

579

}

580

```

581

582

## Types

583

584

```typescript { .api }

585

interface ClientConfig {

586

routes: {

587

admin: string;

588

api: string;

589

};

590

collections: CollectionConfig[];

591

globals: GlobalConfig[];

592

localization?: LocalizationConfig;

593

admin: AdminConfig;

594

}

595

596

interface ClientUser {

597

id: string;

598

email?: string;

599

[key: string]: unknown;

600

}

601

602

interface SanitizedPermissions {

603

collections: Record<string, CollectionPermission>;

604

globals: Record<string, GlobalPermission>;

605

canAccessAdmin: boolean;

606

}

607

608

interface CollectionPermission {

609

create: boolean;

610

read: boolean;

611

update: boolean;

612

delete: boolean;

613

}

614

615

interface GlobalPermission {

616

read: boolean;

617

update: boolean;

618

}

619

620

interface Theme {

621

name: string;

622

colors: Record<string, string>;

623

breakpoints: Record<string, string>;

624

}

625

626

interface EntityConfig {

627

slug: string;

628

labels: {

629

singular: string;

630

plural: string;

631

};

632

fields: FieldConfig[];

633

}

634

635

interface ListResult {

636

docs: Record<string, unknown>[];

637

totalDocs: number;

638

totalPages: number;

639

page: number;

640

limit: number;

641

hasNextPage: boolean;

642

hasPrevPage: boolean;

643

}

644

645

interface ListQuery {

646

where?: Record<string, unknown>;

647

sort?: string;

648

limit?: number;

649

page?: number;

650

}

651

652

interface ViewAction {

653

id: string;

654

label: string;

655

handler: () => void;

656

}

657

658

interface UploadResult {

659

id: string;

660

filename: string;

661

mimeType: string;

662

filesize: number;

663

}

664

665

interface UploadEdit {

666

id: string;

667

type: 'crop' | 'resize' | 'rotate';

668

params: Record<string, unknown>;

669

}

670

```