# Dummy Data Generator URL: /docs/web/components/dummy-data-generator Multi-step modal wizard that generates Docyrus-compatible sample records — per-field strategies (text/number/date/enum/relation), value-renderer preview, and an opt-in batch save to the data source. **Demo:** ```tsx 'use client'; import { useMemo, useState } from 'react'; import { DummyDataGenerator, type DummyDataGeneratorStep, type DummyGenerationResult, type DummyStrategyMap, buildInitialStrategyMap, generateDummyRows } from '@docyrus/ui/components/dummy-data-generator'; const MOCK_FIELDS = [ { id: '1', slug: 'name', name: 'Name', type: 'field-text' }, { id: '2', slug: 'email', name: 'Email', type: 'field-email' }, { id: '3', slug: 'phone', name: 'Phone', type: 'field-phone' }, { id: '4', slug: 'company', name: 'Company', type: 'field-text' }, { id: '5', slug: 'status', name: 'Status', type: 'field-status', enums: [ { id: 's-active', name: 'Active', color: 'emerald-500', slug: 'active' }, { id: 's-lead', name: 'Lead', color: 'blue-500', slug: 'lead' }, { id: 's-cold', name: 'Cold', color: 'slate-500', slug: 'cold' } ] }, { id: '6', slug: 'rating', name: 'Rating', type: 'field-rating' }, { id: '7', slug: 'amount', name: 'Amount', type: 'field-money' }, { id: '8', slug: 'created_on', name: 'Created on', type: 'field-dateTime' } ] as const; export function DummyDataGeneratorDemo() { const [step, setStep] = useState ); ``` ## Wizard Steps | Step | Purpose | |------|---------| | **Configure** | Pick how many records to generate, then tune each field individually. Strategies are pre-filled per field type (text shape, number range, date window, enum subset, etc.). Read-only or unsupported fields are auto-skipped. | | **Preview** | Renders the first N rows using `useDocyrusFieldComponent(field.type, 'value-renderer')` so every cell looks the same as it does in ``. "Regenerate sample" reseeds the PRNG. | | **Progress** | One spinner while the hook walks each row through `collection.create` (or `client.post('…/items', row)`). | | **Result** | Tiles for created / failed / total rows. Per-row error list when inserts fail. | ## Field-Type Strategies | Field type | Default strategy | Configurable | |------------|------------------|--------------| | `field-text`, `field-textarea`, `field-code` | Slug-aware sentence/full-name/company/job-title detection. | Text shape (word, sentence, paragraph, full name, company, job title, static). | | `field-email`, `field-url`, `field-color`, `field-icon`, `field-currency` | Random pick from a bundled pool. | — | | `field-phone` | Random number with default country code. | Country code (e.g. `+90`). | | `field-number`, `field-money`, `field-percent`, `field-duration`, `field-rating` | Random integer in a sensible range. | Mode (`random` / `sequence` / `fixed`), min / max, integer toggle. | | `field-money` | Adds the companion `___currency` value automatically. | Plus currency code (e.g. `USD`). | | `field-checkbox`, `field-switch` | 50/50 boolean. | Truth ratio slider. | | `field-date`, `field-dateTime` | Random date within last 30 days. | Mode (`recent` / `past` / `future` / `random` / `now`), days window. | | `field-dateRange` | Pair of dates with a random span. | Same plus max span in days. | | `field-time` | Random `HH:mm`. | — | | `field-select`, `field-radioGroup`, `field-status`, `field-enum`, `field-systemEnum` | Random pick from `field.enums` / `field.options`. | Subset of allowed option ids. | | `field-multiSelect`, `field-tagSelect` | 1–3 random picks. | Subset of option ids, items-per-row range. | | `field-userSelect`, `field-userMultiSelect` | Random pick from the `users` array passed to the hook. | Subset of user ids. | | `field-relation` | Random pick from the `relationOptionsByFieldSlug[slug]` pool. Skipped if the pool isn't supplied. | Subset of relation ids. | | `field-json` | Generates `{ sample, generated, index }`. | — | | `field-formula`, `field-relatedField`, `field-identity`, `field-autonumber`, files, images, html / doc editors, location select, query builder, schema repeater, … | **Skipped automatically.** | — | The deterministic seed (Mulberry32) means the preview matches the rows that get inserted — pressing **Regenerate sample** reseeds and re-renders. ## API Reference ### `` The component renders as an inline panel (header + stepper + step body + footer). Wrap it in your own dialog / drawer / sheet if you want modal behavior. | Prop | Type | Description | |------|------|-------------| | `step` / `onStepChange` | `DummyDataGeneratorStep` / `(step) => void` | Current step + setter. Steps: `configure`, `preview`, `progress`, `result`. | | `targetFields` | `ReadonlyArray` | Fields the user can populate. Supplied by the hook from `useDocyrusDataViewSelect`. | | `requiredFieldSlugs` | `ReadonlyArray` | Slugs locked to `enabled: true`. | | `count` / `onCountChange` | `number` / `(next) => void` | Number of records to generate. | | `maxCount` | `number` | UI hard cap. Default `1000`. | | `strategies` / `onStrategiesChange` | `DummyStrategyMap` / `(next) => void` | Per-field generation knobs keyed by slug. | | `generatedRows` / `onRegenerate` | `Array>` / `() => void` | Generated rows (preview + insert) and a "reseed" callback. | | `isGenerating` / `isCreating` | `boolean` | Internal pending flags surfaced in the spinner / footer. | | `generationError` / `result` | `Error \| null` / `DummyGenerationResult \| null` | Final-step state. | | `previewOnly` | `boolean` | When `true` the preview-step CTA is "Finish" — the hook never POSTs. | | `users` | `ReadonlyArray` | Tenant users used by user-select strategies (and shown in the configure step). | | `onConfirmConfigure` / `onStartGeneration` / `onReset` | callbacks | Hook into each step's primary action. | | `previewRowCount` | `number` | Default `10`. | | `exportFileName` | `string` | File name (without extension) for CSV / XLSX downloads. Default `'dummy-data'`. | | `title` / `description` / `icon` | `ReactNode` / `ReactNode` / `string` | Header customization (defaults are translated). | | `className` | `string` | Extra class for the panel root. | ## Components | Component | Description | |-----------|-------------| | `DummyDataGenerator` | Top-level shell — composes `AwesomeDialog` + `Stepper` + step bodies + footer. | | `ConfigureStep` | Step 1 — count slider + per-field strategy controls. | | `PreviewStep` | Step 2 — value-renderer-driven preview table + reseed button. | | `ProgressStep` | Steps 3/4 — progress spinner + result tiles + per-row error list. | ## Helpers | Helper | Description | |--------|-------------| | `buildInitialStrategyMap(fields, existing?)` | Per-slug strategy map seeded from `inferStrategyForField`. Reuses any existing user overrides. | | `inferStrategyForField(field)` | Default strategy for a single field. | | `isSupportedFieldType(type)` | `false` for read-only, file, html-editor, location, formula, etc. | | `generateDummyRows(ctx)` | Pure deterministic generator. Returns `count` rows of slug → value pairs. | | `createRng(seed)` | Mulberry32 PRNG used internally — exported for tests. | ## Type Exports | Type | Description | |------|-------------| | `DummyDataGeneratorProps` | Props for the top-level component. | | `DummyDataGeneratorStep` | `'configure' \| 'preview' \| 'progress' \| 'result'`. | | `DummyStrategyMap` | `Record`. | | `DummyFieldStrategy` | Per-field generation knobs (`enabled`, `textMode`, `min`, `max`, `dateMode`, `selectedOptionIds`, …). | | `DummyGenerationContext` | Pure-generator input (`fields`, `strategies`, `count`, `seed`, `users?`, `relationOptionsByFieldSlug?`). | | `DummyGenerationResult` | `{ totalGenerated, totalCreated, totalFailed, errors }`. | | `DummyUserOption` | User pool entry shape (`id`, `name?`, `display_name?`, `email?`, `avatar_url?`). | | `DummyRelationOption` | Relation pool entry shape (`id`, `name`). | ## See Also - [`useDocyrusDummyDataGeneratorWizard`](/docs/web/hooks/use-docyrus-dummy-data-generator-wizard) — smart hook that wires the wizard to a Docyrus data source in one call. - [`useDocyrusDataImportWizard`](/docs/web/hooks/use-docyrus-data-import-wizard) — companion wizard for ingesting real spreadsheets. - [`useDocyrusFieldComponent`](/docs/web/hooks/use-docyrus-field-component) — the registry that powers the preview-step value renderers.