diff --git a/.gitignore b/.gitignore index f5e8915..7e40e99 100644 --- a/.gitignore +++ b/.gitignore @@ -128,10 +128,8 @@ venv.bak/ # React sample templates: track internal `src/lib` utility modules # These rules override the global `lib/` ignore in the Python section above. -!samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/lib/ -!samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/lib/** -!samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/ -!samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/** +!samples/**/lib/ +!samples/**/lib/** # IDEs and Editors .vscode/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 6756ce4..9f43fe6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [1.5.1](https://github.com/forcedotcom/afv-library/compare/1.5.0...1.5.1) (2026-03-27) + + +### Bug Fixes + +* correct .gitignore to track sample lib/ folders @W-21361802@ ([#119](https://github.com/forcedotcom/afv-library/issues/119)) ([7018d49](https://github.com/forcedotcom/afv-library/commit/7018d49e26aa366962e0073f3e964adab47ccea2)) + + + # [1.5.0](https://github.com/forcedotcom/afv-library/compare/1.4.0...1.5.0) (2026-03-24) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1555ecd..496d70b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -198,4 +198,4 @@ A maintainer will merge your PR after approval. - Push the branch. - Open a PR. - Respond to feedback. -- Keep your fork updated. +- Keep your fork updated. \ No newline at end of file diff --git a/README.md b/README.md index 63dc051..e42c33f 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,34 @@ # Agentforce Vibes Library -AI prompts and rules library for Agentforce Vibes development, content creation, and workflow automation. +AI skills and rules library for Agentforce Vibes development of Salesforce metadata. ## πŸ“š About -This repository curates Salesforce-focused prompts, system rules, and executable skills from the wider developer community to accelerate Agentforce Vibes agentic workflows. Collections are organized by development disciplineβ€”Apex, LWC, flows, deployments, testing, investigation, spec-driven delivery, and moreβ€”so contributors can share reusable prompts, scaffolds, guardrails, and workflows that other teams can adapt and extend. +This repository curates Salesforce-focused skills and system rules from the wider developer community to accelerate Agentforce Vibes agentic workflows. ## πŸ—‚οΈ Structure ``` afv-library/ -β”œβ”€β”€ prompts/ # Single-file instructions for straightforward tasks -β”‚ β”œβ”€β”€ apex-development/ -β”‚ β”œβ”€β”€ lwc-development/ -β”‚ β”œβ”€β”€ flow-development/ -β”‚ β”œβ”€β”€ getting-started/ -β”‚ └── ... β”œβ”€β”€ rules/ # Single-file guardrails and standards -β”‚ β”œβ”€β”€ apex-development/ -β”‚ β”œβ”€β”€ lwc-development/ -β”‚ β”œβ”€β”€ spec-driven-dev/ -β”‚ └── ... β”œβ”€β”€ skills/ # Directory-based executable workflows -β”‚ β”œβ”€β”€ apex-development/ -β”‚ β”‚ └── trigger-refactor-pipeline/ -β”‚ β”‚ β”œβ”€β”€ SKILL.md -β”‚ β”‚ β”œβ”€β”€ scripts/ -β”‚ β”‚ β”œβ”€β”€ references/ -β”‚ β”‚ └── assets/ -β”‚ β”œβ”€β”€ metadata-deployments/ -β”‚ β”œβ”€β”€ testing-automation/ +β”‚ β”œβ”€β”€ generating-apex/ +β”‚ β”œβ”€β”€ generating-custom-object/ +β”‚ β”œβ”€β”€ generating-flow/ β”‚ └── ... β”œβ”€β”€ samples/ # Synced sample apps (e.g. from npm) β”‚ └── webapp-template-app-react-sample-b2e-experimental/ +β”‚ └── ... +β”œβ”€β”€ scripts/ +β”‚ └── ... └── README.md ``` -## πŸš€ Quick Start +## Manual Usage -### Manual Usage +Browse the repository and copy/paste any rule or skill directly into Agentforce Vibes or your preferred AI tool. -Browse the repository and copy/paste any prompt, rule, or skill directly into Agentforce Vibes or your preferred AI tool. - -### Samples +## Samples The `samples/` folder contains synced sample apps. For example, `samples/webapp-template-app-react-sample-b2e-experimental/` is kept in sync with the npm package `@salesforce/webapp-template-app-react-sample-b2e-experimental` (nightly and on manual trigger via GitHub Actions). To run the same sync locally from the repo root: @@ -53,87 +39,10 @@ npm run sync-react-b2e-sample The GitHub Action runs these same commands and opens a PR only when the npm package version has changed. See [samples/README.md](samples/README.md) for details. -### Connecting Team or Personal Libraries -You can register additional repos with the extension as long as they mirror this structure: +## πŸ› οΈ Agent Skills -- Root folders named `prompts/`, `rules/`, and `skills/`, each containing category subfolders (e.g., `prompts/apex-development/`). -- Each prompt or rule stored in its own Markdown file with YAML frontmatter (`name`, `description`, `tags`, optional setup metadata). -- Each skill stored in its own directory containing a `SKILL.md` file with required frontmatter, plus optional `scripts/`, `references/`, and `assets/` subdirectories. -- Category folders may include a `README.md` describing their focus; empty folders are allowed for future content. - -When you add a new library: - -1. **Structure your repository** with the same folder layout shown in `## πŸ—‚οΈ Structure`: - - `prompts/` folder with category subfolders containing `.md` files - - `rules/` folder with category subfolders containing `.md` files - - `skills/` folder with category subfolders, each containing skill directories with `SKILL.md` -2. **Follow format requirements**: - - Prompts and rules: YAML frontmatter (`name`, `description`, `tags`) + markdown body - - Skills: Directory with `SKILL.md` + optional `scripts/`, `references/`, `assets/` subdirectories -3. **Ensure script executability** for skills: Mark Python/Bash scripts as executable (`chmod +x`) -4. **Register the repository** with `Agentforce Vibes: Add Library` in VS Code -5. **Refresh the extension** to index and display the new content - -## πŸ“ Prompt Format - -Every prompt begins with YAML frontmatter that surfaces key metadata to contributors and tooling: - -```markdown ---- -name: Concise Prompt Title -description: One-sentence summary of the outcome you want -tags: category, use-case, tooling -requires_deploy: true # optional – include when pre-work is required -setup_summary: Deploy baseline trigger before refactor # optional helper text ---- -``` - -- `name`, `description`, and `tags` are required. -- Use lowercase, comma-separated tags drawn from the category and focus area (e.g., `apex, refactor, testing`). -- Add `requires_deploy` (and an optional `setup_summary`) when the prompt depends on seed metadata or data. - -After the frontmatter, organize the body with clear sections. A common pattern is: - -1. `## Setup` – only when pre-work, sample metadata, or environment configuration is needed. -2. `## Context` – summarize the scenario, constraints, personas, or assets involved. -3. `## Instructions` – detail the tasks in numbered steps, calling out decision points or checkpoints. -4. `## Testing & Reporting` – define verification steps, coverage expectations, or deliverables. -5. `## Follow-ups` – optional space for stretch goals, review questions, or iteration loops. - -### Example Prompt - -**File:** `prompts/apex-development/trigger-refactoring.md` - -```markdown ---- -name: Trigger Refactor Helper -description: Refactor the Opportunity trigger into a handler pattern with tests -tags: apex, refactor, testing -requires_deploy: true -setup_summary: Deploy baseline trigger to target org before running instructions ---- - -## Setup -1. Deploy the baseline trigger shown below to your default or scratch org. -2. Confirm the trigger compiles successfully before continuing. - -```apex -// ... baseline trigger omitted for brevity ... -``` - -## Instructions -Refactor `OpportunityTrigger` into a handler class (or classes) that handles the same behavior using bulk-safe patterns. Ensure the trigger itself delegates and remains behaviorally identical. - -## Testing & Reporting -- Create unit tests covering positive and negative paths for each handler method. -- Include a bulk test that updates 50 `Opportunity` records where only half qualify for the `after update` logic. -- Deploy the refactored code and run the tests, then report coverage and key observations. -``` - -## πŸ› οΈ Agent Skills Format - -Agent Skills extend prompts and rules by bundling executable workflows, scripts, and reference materials into self-contained directories. Skills follow the open [Agent Skills specification](https://agentskills.io/) and are portable across many agent tools (Cursor, Claude Code, VS Code extensions, etc.). +Agent Skills extend rules by bundling executable workflows, scripts, and reference materials into self-contained directories. Skills follow the open [Agent Skills specification](https://agentskills.io/) and are portable across many agent tools (Cursor, Claude Code, VS Code extensions, etc.). ### Directory Structure @@ -143,324 +52,16 @@ Each skill is a folder containing: - `references/` (optional) - additional documentation - `assets/` (optional) - templates, schemas, lookup data -### Required Frontmatter - -```yaml ---- -name: skill-name-here # lowercase, hyphens, matches folder name -description: What this skill does and when to use it (1-1024 chars) -license: Apache-2.0 # optional -compatibility: Requires... # optional -metadata: # optional - author: your-org - version: "1.0" -allowed-tools: Bash Read Write # optional, space-delimited ---- -``` - -The `name` must: -- Be 1-64 characters -- Use only lowercase letters, numbers, and hyphens -- Match the parent directory name -- Not start or end with hyphens - -The `description` should explain both what the skill does and when to use it, including keywords that help agents identify relevant tasks. - -### Progressive Disclosure - -Skills are designed for efficient context use: - -1. **Discovery** - agents load only name + description at startup -2. **Activation** - full SKILL.md loaded when needed -3. **Execution** - scripts/references loaded on-demand - -Keep your main `SKILL.md` under 500 lines and move detailed reference material to separate files. - -### Example Skill Structure - -**File:** `skills/apex-development/trigger-refactor-pipeline/SKILL.md` - -```markdown ---- -name: trigger-refactor-pipeline -description: Refactor Salesforce triggers into handler patterns with automated test generation and deployment. Use when modernizing legacy triggers with DML/SOQL in loops. -license: Apache-2.0 -compatibility: Requires Salesforce CLI, Python 3.9+, jq -metadata: - author: afv-library - version: "1.0" ---- - -## When to Use This Skill - -Use when you need to modernize legacy triggers with DML/SOQL in loops or inconsistent patterns. - -## Step 1: Analyze Trigger - -Run `scripts/analyze_trigger.py ` to identify anti-patterns: -- DML operations inside loops -- SOQL queries inside loops -- Missing bulkification - -The script outputs a report showing: -- Line numbers with issues -- Recommended refactoring approach -- Complexity score - -## Step 2: Generate Handler - -See [handler patterns reference](references/handler_patterns.md) for templates that match your trigger context: -- Before insert/update patterns -- After insert/update/delete patterns -- Bulk collection strategies - -Copy the appropriate template from `assets/` and customize. - -## Step 3: Create Tests - -Use `assets/test_template.apex` as a scaffold. Ensure coverage includes: -- Single record operations -- Bulk operations (200+ records) -- Mixed scenarios -- Negative cases - -## Step 4: Deploy and Validate - -Deploy using Salesforce CLI and run all tests. Verify: -- All tests pass with 100% coverage -- No new governor limit issues -- Behavior matches original trigger -``` - -### Validation - -Skills can be validated using the [skills-ref](https://github.com/agentskills/agentskills/tree/main/skills-ref) tool: - -```bash -skills-ref validate ./skills/apex-development/trigger-refactor-pipeline -``` - -This checks that your `SKILL.md` frontmatter is valid and follows all naming conventions. - -## πŸ“‚ Categories Guide - -These starter categories reflect the current repository layout. Contributors are welcome to propose new ones or reorganize as long as the structure stays consistent for the VS Code extension. - -### When to Use Each Format - -| Format | Use When | Example | -|--------|----------|---------| -| **Prompt** | Single-shot instruction for a straightforward task | "Create a validation rule on Account that prevents blank NumberOfEmployees" | -| **Rule** | Ongoing guardrail or standard to enforce | "Apex triggers must delegate to handler classes with bulk-safe patterns" | -| **Skill** | Multi-step workflow requiring scripts, templates, or reference docs | "Refactor trigger β†’ analyze anti-patterns β†’ generate handler β†’ create tests β†’ deploy" | - -### Prompts - -| Category | Purpose | Example Topics | -|----------|---------|----------------| -| **apex-development** | Build and optimize Apex codebases | Trigger frameworks, async patterns, governor limit tuning | -| **lwc-development** | Craft Lightning Web Components | Component architecture, reactive data, UI patterns | -| **metadata-deployments** | Plan and execute releases | Packaging, Git branching, rollback prep | -| **vibe-coding** | Agentforce Vibes coding workflows | Apex/LWC scaffolds, prompt-to-code translation | -| **testing-automation** | Validate platform behavior | Apex tests, Flow scenarios, regression suites | -| **investigation-triage** | Diagnose and resolve issues | Incident response, log analysis, performance forensics | -| **data-operations** | Manage data pipelines | ETL prompts, bulk operations, platform events | -| **spec-driven-dev** | Generate and refine specification-first workflows | Requirement capture, traceability matrices, auto-generated tasks | -| **security-compliance** | Enforce standards and controls | Permission audits, secure coding, compliance narratives | -| **integration-fabric** | Coordinate external services | API design, middleware coordination, error recovery | -| **enablement-docs** | Share knowledge and runbooks | Onboarding guides, release notes, changelog automation | - -### Skills - -Skills mirror the same category structure as prompts and rules. Each skill is a directory containing executable workflows. - -| Category | Purpose | Example Skills | -|----------|---------|----------------| -| **apex-development** | Automated Apex refactoring and analysis | Trigger refactor pipeline, bulk operation optimizer | -| **lwc-development** | Lightning Web Component workflows | Component generator, accessibility audit | -| **flow-development** | Flow automation and optimization | Flow analyzer, subflow extractor | -| **metadata-deployments** | Release management automation | Deployment readiness check, rollback automation | -| **testing-automation** | Test generation and execution | Test data factory, coverage analyzer | -| **investigation-triage** | Debugging and diagnostics | Log parser, governor limit analyzer | -| **data-operations** | Data pipeline automation | ETL validator, data quality checker | -| **spec-driven-dev** | Specification-to-code workflows | Requirements parser, test case generator | - -### Rules - -| Category | Focus | Example Assets | -|----------|-------|----------------| -| **apex-development** | Standards for Apex architecture and quality | Trigger guardrails, async execution policies | -| **lwc-development** | Front-end guardrails for Lightning Web Components | Accessibility checklists, component review templates | -| **metadata-deployments** | Release management discipline | Branching policies, deployment readiness reviews | -| **vibe-coding** | Coding quality for Agentforce Vibes assets | Code review criteria, secure pattern guides | -| **testing-automation** | Verification and validation expectations | Test coverage thresholds, regression playbooks | -| **investigation-triage** | Incident and root-cause response | Escalation runbooks, logging requirements | -| **data-operations** | Data stewardship and job governance | Data quality SLAs, bulk job safeguards | -| **spec-driven-dev** | Specification-first delivery standards | Definition-of-done templates, traceability requirements | -| **security-compliance** | Platform security and regulatory posture | Access reviews, compliance attestation steps | -| **integration-fabric** | External connection reliability | Retry policies, credential rotation standards | -| **enablement-docs** | Knowledge management and enablement | Release note templates, onboarding workflows | -| **org-governance** | Enterprise policy alignment | Org strategy playbooks, architecture review guidelines | -| **support-operations** | Production support excellence | Incident response SLAs, shift handover procedures | -| **ai-safety** | Responsible agent behavior | Ethical guidelines, bias detection checklists | - -## ✨ Creating New Prompts & Rules - -1. **Choose the right category** based on use case (if nothing fits, propose a new category) -2. **Create a descriptive filename** (use kebab-case: `my-prompt.md`) -3. **Add frontmatter** with name, description, and tags -4. **Write clear instructions** with placeholders for user input -5. **Test** before committing -6. **Commit with message**: `Add [name] for [use case]` - -### Naming Conventions - -- Use lowercase with hyphens: `code-review-helper.md` -- Be descriptive: `salesforce-apex-debug.md` not `debug.md` -- Include context: `blog-post-outline.md` not `outline.md` - -## πŸ”§ Best Practices - -### Writing Effective Prompts - -- βœ… **Be specific** - Clear instructions yield better results -- βœ… **Use structure** - Numbered lists and sections help -- βœ… **Add context** - Explain what you want and why -- βœ… **Include examples** - Show expected output format -- βœ… **Test thoroughly** - Verify prompts work as intended - -### Prompt Engineering - -- βœ… **Clarify the objective** – Capture the outcome, stakeholders, and success metrics directly in the frontmatter -- βœ… **Share context** – Provide links, metadata, or sample records so the agent can ground its reasoning -- βœ… **Set guardrails** – Define tone, compliance boundaries, what to avoid, and when to ask for confirmation -- βœ… **Guide the workflow** – Break the request into staged checkpoints (ideate β†’ propose β†’ confirm β†’ deliver) -- βœ… **Capture feedback loops** – Invite the agent to flag assumptions, pose questions, and suggest validation steps -- βœ… **Encourage adaptability** – Note how the prompt or rule can flex across org types, industries, and data volumes - -#### Structuring Prompts - -- **Prime with examples**: Include concise samples that illustrate the desired format or code pattern -- **Model the format**: Provide headings and numbered steps so the agent mirrors the final artifact -- **Address ambiguity**: Explicitly call out unknowns and ask the agent to gather missing inputs -- **Control verbosity**: Specify length limits, number of alternatives, or time horizons -- **Request diagnostics**: Ask the agent to share reasoning, risks, and verification plans when appropriate - -#### Template: Multi-Step Prompt - -```markdown ---- -name: Apex Service Hardening Plan -description: Audit and fortify an Apex service to stay within governor limits while preserving behavior -tags: apex-development, optimization, audit -requires_deploy: false ---- - -## Context -- Usage profile: [Invocation volume, entry points, data scale] -- Known issues: [Timeouts, limit exceptions, performance complaints] -- Stakeholders: [Product owners, support teams, compliance partners] - -## Instructions -1. Summarize existing architecture, dependencies, and limit usage; list assumptions needing confirmation. -2. Propose at least two optimization strategies, including refactor scope, data implications, and rollback considerations. -3. Recommend a preferred strategy once assumptions are resolved, detailing implementation phases and change management steps. - -## Testing & Reporting -- Define unit, integration, and bulk test coverage with pass criteria. -- Specify telemetry/observability updates (logging, metrics, alerts) to validate success. -- Produce an execution checklist with owners, timelines, and escalation contacts. -``` - -### Organizing Rules - -- βœ… **One rule per file** - Keep rules focused and modular -- βœ… **Use clear names** - Describe what the rule enforces -- βœ… **Document purpose** - Explain why the rule exists -- βœ… **Keep updated** - Review and refine regularly -- βœ… **Version control** - Track changes over time ## 🀝 Contributing -### How to Contribute - See [Contributing](./CONTRIBUTING.md) for complete details. -**Contribution checklist** -- Confirm the file lives in the correct category folder -- Complete the YAML frontmatter (`name`, `description`, `tags`) -- Include clear instructions and placeholders for user-specific details -- Add a short note on how others can adapt the prompt, especially for varying Salesforce environments -- Verify the content respects licensing and attribution requirements -- Provide any supporting references or context in the pull request description -### Creating New Skills - -Skills are more complex than prompts and require additional setup: - -1. **Create a folder** under the appropriate `skills//` directory using lowercase + hyphens (e.g., `trigger-refactor-pipeline`). -2. **Add a `SKILL.md` file** with required frontmatter: - - `name` - must match the folder name (lowercase, hyphens only) - - `description` - explain what the skill does and when to use it (1-1024 characters) - - Optional: `license`, `compatibility`, `metadata`, `allowed-tools` -3. **Optionally add subdirectories**: - - `scripts/` - executable Python, Bash, or JavaScript files - - `references/` - additional documentation files - - `assets/` - templates, schemas, or lookup data -4. **Validate your skill** using the [skills-ref](https://github.com/agentskills/agentskills/tree/main/skills-ref) tool: - ```bash - skills-ref validate ./skills// - ``` -5. **Test the skill end-to-end** before submitting. Ensure: - - The skill activates correctly when the description keywords match - - All scripts execute without errors - - Reference files are accessible and well-organized - - The workflow produces the expected outcomes -6. **Document dependencies** clearly in the `compatibility` field if your skill requires specific tools or system packages. - -### Feedback +## Feedback Found an issue or have a suggestion? - Open an issue in GitHub - Suggest improvements via pull request - Start a discussion in GitHub Discussions or the pull request thread -## πŸ”„ Maintenance - -### Updating Prompts - -To update an existing prompt: -1. Edit the `.md` file -2. Update the description if behavior changed -3. Test the updated prompt -4. Commit with clear message: `Update [prompt]: [what changed]` - -### Adding New Categories - -To add a new category: -1. Create new folders in `prompts/`, `rules/`, and `skills/` with matching names -2. Add a `README.md` in each folder explaining the category's purpose -3. Add initial prompts, rules, or skills following the format guidelines -4. Update the main README with the new category in the appropriate tables -5. Submit a pull request with the rationale for the new category - -### Updating Skills - -To update an existing skill: -1. Modify the `SKILL.md` or supporting files (`scripts/`, `references/`, `assets/`) -2. Update the `metadata.version` field in the frontmatter -3. Test all scripts and workflows end-to-end -4. Validate using `skills-ref validate ./skills//` -5. Commit with clear message: `Update [skill-name]: [what changed]` - - -# Experimental - -### Using with supporting AFV Library VS Code Extension - -1. Install the Agentforce Vibes VS Code extension (preview or later). -2. Install the experiemnt [AFV library VSCode extension](https://github.com/forcedotcom/afv-library-extension). -2. Open the command palette and run `Agentforce Vibes: Add Library`. -3. Provide the Git URL (or local path) to this repository; the extension indexes every folder and `.md` file under `prompts/`, `rules/`, and `skills/`. -4. The extension displays prompts, rules, and skills organized by category. Select any item to preview the metadata and copy instructions into the editor. -5. Use the refresh command whenever new prompts, rules, or skills are added. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8a55002..8badc6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@salesforce/afv-skills", - "version": "1.4.0", + "version": "1.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@salesforce/afv-skills", - "version": "1.4.0", + "version": "1.5.0", "license": "CC-BY-NC-4.0", "devDependencies": { - "@salesforce/webapp-template-app-react-sample-b2e-experimental": "^1.112.7", - "@salesforce/webapp-template-app-react-sample-b2x-experimental": "^1.112.7", + "@salesforce/webapp-template-app-react-sample-b2e-experimental": "^1.116.6", + "@salesforce/webapp-template-app-react-sample-b2x-experimental": "^1.116.6", "@types/js-yaml": "^4.0.9", "js-yaml": "^4.1.1", "tsx": "^4.21.0" @@ -678,9 +678,9 @@ } }, "node_modules/@salesforce/kit": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@salesforce/kit/-/kit-3.2.5.tgz", - "integrity": "sha512-Ad3H423ebBvi+q09BQL4pZC2ffwVUPoeuxwos+Sbr53TamkC3g5YT+ASB4MqqqAhMxFgyalFWIjzx9230tts7g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@salesforce/kit/-/kit-3.2.6.tgz", + "integrity": "sha512-O8S4LWerHa9Zosqh+IoQjgLtpxMOfObRxaRnUdRV4MLtFUi+bQxQiyFvve6eEaBaMP1b1xVDQpvSvQ+PXEDGFQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -688,22 +688,22 @@ } }, "node_modules/@salesforce/sdk-core": { - "version": "1.112.7", - "resolved": "https://registry.npmjs.org/@salesforce/sdk-core/-/sdk-core-1.112.7.tgz", - "integrity": "sha512-R/qJAqAUmEnlAPsPh8VImZIbSIC9fURGr7Qlp6iMv+JElruJJ9HScScDlXlZ6CGDICMHqoFkM63FtiPXdV/jbg==", + "version": "1.116.6", + "resolved": "https://registry.npmjs.org/@salesforce/sdk-core/-/sdk-core-1.116.6.tgz", + "integrity": "sha512-5IWfcnQRuaOxtWBbGiW00rk6f4ImNrDDnVhqZOphJhRePOvSLqWLirfIIhRK4j00Tr8w0tgn5H+hIAWCRZvIHw==", "dev": true, "license": "SEE LICENSE IN LICENSE.txt" }, "node_modules/@salesforce/sdk-data": { - "version": "1.112.7", - "resolved": "https://registry.npmjs.org/@salesforce/sdk-data/-/sdk-data-1.112.7.tgz", - "integrity": "sha512-yBXDidDBDu8U46TAC5j8GgDjrAM+9QFqkcsxmgealy/4OfFieSWMTPEEG6Hv1uNKfM3OTXGrovBPkYHSx0EfkQ==", + "version": "1.116.6", + "resolved": "https://registry.npmjs.org/@salesforce/sdk-data/-/sdk-data-1.116.6.tgz", + "integrity": "sha512-yjc1CQvBYAXWrouMmD3buu35u4DwgUGTaDZKU4//F5vIJJitsmPGrJCLDd0HdBzyu/J+77RuVGZBgsal7+zyZQ==", "dev": true, "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@conduit-client/service-fetch-network": "3.17.0", "@conduit-client/utils": "3.17.0", - "@salesforce/sdk-core": "^1.112.7" + "@salesforce/sdk-core": "^1.116.6" } }, "node_modules/@salesforce/ts-types": { @@ -717,14 +717,14 @@ } }, "node_modules/@salesforce/webapp-experimental": { - "version": "1.112.7", - "resolved": "https://registry.npmjs.org/@salesforce/webapp-experimental/-/webapp-experimental-1.112.7.tgz", - "integrity": "sha512-USVakM9ygFyLzLiqDJlyqkP+ZP8OH0qh1n98kCw410bTfoquecgUE18eMrXTw9w8AygNWe2gx0fw3eriDClD4g==", + "version": "1.116.6", + "resolved": "https://registry.npmjs.org/@salesforce/webapp-experimental/-/webapp-experimental-1.116.6.tgz", + "integrity": "sha512-bbWVK70rv5Y+e26NLyTB2McTZ3MCQFe+NEYZDW/T4FCaAZ3Y57u1HYzgr8p4iWKlu7DU4V1sNTUGjt01mrN0Dg==", "dev": true, "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@salesforce/core": "^8.23.4", - "@salesforce/sdk-data": "^1.112.7", + "@salesforce/sdk-data": "^1.116.6", "axios": "^1.7.7", "micromatch": "^4.0.8", "path-to-regexp": "^8.3.0" @@ -734,20 +734,20 @@ } }, "node_modules/@salesforce/webapp-template-app-react-sample-b2e-experimental": { - "version": "1.112.7", - "resolved": "https://registry.npmjs.org/@salesforce/webapp-template-app-react-sample-b2e-experimental/-/webapp-template-app-react-sample-b2e-experimental-1.112.7.tgz", - "integrity": "sha512-NltyiArtKoQs2A90/tnP0UQZ0+Eowuzg6smyYNsY0MrZ1d8lSa9puN882ldq1PlYrQgD+2ZrPvA7Txwbg93oMA==", + "version": "1.116.6", + "resolved": "https://registry.npmjs.org/@salesforce/webapp-template-app-react-sample-b2e-experimental/-/webapp-template-app-react-sample-b2e-experimental-1.116.6.tgz", + "integrity": "sha512-RctkFfBfK+7HLAnP2ERmXG3Nn8apFF4ywh5LlSyOJVUjbQI48kd7PeiCX5v5G4C5Kvqp7wyhhucY0Mk4k8PLEQ==", "dev": true, "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "@salesforce/webapp-experimental": "^1.112.7", + "@salesforce/webapp-experimental": "^1.116.6", "sonner": "^1.7.0" } }, "node_modules/@salesforce/webapp-template-app-react-sample-b2x-experimental": { - "version": "1.112.7", - "resolved": "https://registry.npmjs.org/@salesforce/webapp-template-app-react-sample-b2x-experimental/-/webapp-template-app-react-sample-b2x-experimental-1.112.7.tgz", - "integrity": "sha512-oOrSp8DpH9O8BnS1fJCBcpA4TQwViwlIPPgaTC2mnJwA8eREqcw+xejydC96NetrIzspOx1zkdWtqTYbApZEyg==", + "version": "1.116.6", + "resolved": "https://registry.npmjs.org/@salesforce/webapp-template-app-react-sample-b2x-experimental/-/webapp-template-app-react-sample-b2x-experimental-1.116.6.tgz", + "integrity": "sha512-Ql5l+WRvAIQ0iNTutj3k0GDjHRI7wwAbXjzBRKeCR3Tp0pHEXeoKuqj1AACxCv1APAvTOne4cvzb11eJblDOLA==", "dev": true, "license": "SEE LICENSE IN LICENSE.txt" }, diff --git a/package.json b/package.json index aa920d0..31fedaf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@salesforce/afv-skills", - "version": "1.5.0", + "version": "1.5.1", "description": "Salesforce skills for Agentforce Vibes", "license": "CC-BY-NC-4.0", "files": [ @@ -11,8 +11,8 @@ "registry": "https://registry.npmjs.org" }, "devDependencies": { - "@salesforce/webapp-template-app-react-sample-b2e-experimental": "^1.112.7", - "@salesforce/webapp-template-app-react-sample-b2x-experimental": "^1.112.7", + "@salesforce/webapp-template-app-react-sample-b2e-experimental": "^1.116.6", + "@salesforce/webapp-template-app-react-sample-b2x-experimental": "^1.116.6", "@types/js-yaml": "^4.0.9", "js-yaml": "^4.1.1", "tsx": "^4.21.0" diff --git a/prompts/apex-development/scaffold-invocable-apex.md b/prompts/apex-development/scaffold-invocable-apex.md deleted file mode 100644 index 89245be..0000000 --- a/prompts/apex-development/scaffold-invocable-apex.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: PricingService Invocable Scaffold -description: Create a PricingService Apex class with an invocable getPricing method and typed inputs/outputs for Flow. -tags: apex, invocable, flow, scaffold ---- - -Scaffold a Apex classed named `PricingService` (public with no namespace) with one invocable method `getPricing` with an InvocableVariable wrapper for inputs and outputs. Include user-friendly labels and descriptions for the InvocableMethod and all InvocableVariables. - -## Input Parameters -- accountId (ID) - required Account the pricing is for -- terms (String) - required terms for the pricing -- discount (Decimal - scale 2) - if null, then discount equals 0. -- products (List of Strings) - the required list product names. - -## Output Parameters -- total - (Decimal) the toal price for all products -- products (List of Decimal) - the list product prices. -- creditApproved (boolean) - if approved for credit - -If input `products` variable is null or empty, return empty output parameters. Use a standard invocable pattern. - -I will provide the implementation later. Do not write unit tests. Deploy the new class to my default org. \ No newline at end of file diff --git a/prompts/apex-development/scaffold-object.md b/prompts/apex-development/scaffold-object.md deleted file mode 100644 index fafe1e0..0000000 --- a/prompts/apex-development/scaffold-object.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Travel Plan Object Scaffold -description: Provision a Travel Plan custom object with fields, layout, tab, and permission set ready for deployment. -tags: salesforce, custom-object, scaffold, deployment ---- - -Create a "Travel Plan" custom object with 5 appropriate, sensible fields. Add all of the fields to the page layout. Do not create or add a compact layout. Create a tab for the object and a permission set that grants read/create/edit access to the object, all fields and custom tab. Deploy to my default org and assign the permission set to my user. \ No newline at end of file diff --git a/prompts/apex-development/trigger-refactoring.md b/prompts/apex-development/trigger-refactoring.md deleted file mode 100644 index b66731a..0000000 --- a/prompts/apex-development/trigger-refactoring.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -name: Trigger Refactor Helper -description: Refactor the Opportunity trigger into a handler pattern with tests -tags: apex, refactor, testing -requires_deploy: true -setup_summary: Deploy baseline trigger to target org before running instructions ---- - -## Setup -1. Deploy the baseline trigger shown below to your default or scratch org. -2. Confirm the trigger compiles successfully before continuing. - -```apex -// ❌ Anti-pattern: all logic stuffed into the trigger, with DML/SOQL in loops. -trigger OpportunityTrigger on Opportunity (before insert, before update, after update) { - // BEFORE INSERT: validate Closed Won w/ low Amount - if (Trigger.isBefore && Trigger.isInsert) { - for (Opportunity o : Trigger.new) { - if (o.StageName == 'Closed Won' && (o.Amount == null || o.Amount < 1000)) { - o.addError('Closed Won opportunities must have Amount β‰₯ 1000.'); - } - } - } - - // BEFORE UPDATE: if Stage changed, overwrite Description - if (Trigger.isBefore && Trigger.isUpdate) { - for (Opportunity o : Trigger.new) { - Opportunity oldO = Trigger.oldMap.get(o.Id); - if (o.StageName != oldO.StageName) { - o.Description = 'Stage changed from ' + oldO.StageName + ' to ' + o.StageName; - } - } - } - - // AFTER UPDATE: when Stage becomes Closed Won, create a follow-up Task - if (Trigger.isAfter && Trigger.isUpdate) { - for (Opportunity o : Trigger.new) { - Opportunity oldO = Trigger.oldMap.get(o.Id); - if (o.StageName == 'Closed Won' && oldO.StageName != 'Closed Won') { - Task t = new Task( - WhatId = o.Id, - OwnerId = o.OwnerId, - Subject = 'Send thank-you', - Status = 'Not Started', - Priority = 'Normal', - ActivityDate = Date.today() - ); - insert t; // ❌ DML in a loop - } - } - } -} -``` - -## Instructions -Refactor `OpportunityTrigger` into a handler class (or classes) that handles the same behavior using bulk-safe patterns. Ensure the trigger itself delegates and remains behaviorally identical. - -## Testing & Reporting -- Create unit tests covering positive and negative paths for each handler method. -- Include a bulk test that updates 50 `Opportunity` records where only half qualify for the `after update` logic. -- Deploy the refactored code and run the tests, then report coverage and key observations. \ No newline at end of file diff --git a/prompts/data-operations/create-fake-data.md b/prompts/data-operations/create-fake-data.md deleted file mode 100644 index 6f2d611..0000000 --- a/prompts/data-operations/create-fake-data.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Account Test Data Generator -description: Create an Apex script that generates 10 realistic Account records with complete business data including name, account number, type, industry, annual revenue, ticker symbol, and number of employees. Includes documentation on how to execute the script anonymously. -tags: salesforce, apex, data-generation, test-data, developer, admin ---- - -Create an apex script that I can run anonymously to insert 10 account records with name, account number, type, industry, annual revenue, ticker symbol and number of employees. - -Generate a document with instruction on how to run the script. diff --git a/prompts/getting-started/add-fields-pagelayout.md b/prompts/getting-started/add-fields-pagelayout.md deleted file mode 100644 index 991be19..0000000 --- a/prompts/getting-started/add-fields-pagelayout.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Account Layout Field Enhancement -description: Add Type and Industry fields to the Account page layout for better data organization and reporting. -tags: salesforce, account, page-layout, admin, data-management ---- - -Add Type and Industry fields to the Account Layout, placing them below Account Name. diff --git a/prompts/getting-started/add-picklist-value.md b/prompts/getting-started/add-picklist-value.md deleted file mode 100644 index 9262706..0000000 --- a/prompts/getting-started/add-picklist-value.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Lead Source Picklist Enhancement -description: Add a new 'Referral' value to the Lead Source picklist on the Lead object for better lead tracking. -tags: salesforce, lead, picklist, data-management, admin ---- - -Add a new value 'Referral' to the Lead Source picklist on the Lead object. diff --git a/prompts/getting-started/create-assignment-rules.md b/prompts/getting-started/create-assignment-rules.md deleted file mode 100644 index 8108738..0000000 --- a/prompts/getting-started/create-assignment-rules.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: High Priority Case Assignment Rule -description: Create an assignment rule that automatically routes high priority Cases to a specific queue or user for immediate attention. -tags: salesforce, case-management, assignment-rules, automation, admin ---- - -Add an Assignment Rule that automatically assigns new Cases with Priority = High to a specific queue or user. diff --git a/prompts/getting-started/create-basic-custom-object.md b/prompts/getting-started/create-basic-custom-object.md deleted file mode 100644 index d8708f6..0000000 --- a/prompts/getting-started/create-basic-custom-object.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Project Object Quickstart -description: Scaffold a Project__c custom object with core fields and deployable metadata. -tags: salesforce, custom-object, beginner ---- - -Create a new Project__c object with an autonumber field {proj-0000}, name, start date, and number of days fields that represent a simple project record. - -Deploy this metadata to my org using the Salesforce DX MCP Server. \ No newline at end of file diff --git a/prompts/getting-started/create-opp-formula.md b/prompts/getting-started/create-opp-formula.md deleted file mode 100644 index 1f29df7..0000000 --- a/prompts/getting-started/create-opp-formula.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Opportunity Days Open Formula -description: Create a formula field on Opportunity that calculates the number of days since the record was created. -tags: salesforce, opportunity, formula-field, automation, admin ---- - -Add a formula field on Opportunity called Days_Open__c that calculates TODAY() - DATEVALUE(CreatedDate). diff --git a/prompts/getting-started/create-permission-set.md b/prompts/getting-started/create-permission-set.md deleted file mode 100644 index 247c25b..0000000 --- a/prompts/getting-started/create-permission-set.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Account Editor Permission Set -description: Create a permission set that grants edit access to Account records and assign it to the current user. -tags: salesforce, permission-set, security, admin, user-management ---- - -Create a permission set Account_Editor with Edit access to Account and assign it to your current user. diff --git a/prompts/getting-started/create-rollup-summary.md b/prompts/getting-started/create-rollup-summary.md deleted file mode 100644 index 5605564..0000000 --- a/prompts/getting-started/create-rollup-summary.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Account Opportunity Count Roll-Up -description: Create a roll-up summary field on Account that counts related Opportunities for better relationship tracking. -tags: salesforce, account, opportunity, rollup-summary, automation, admin ---- - -Create a Roll-Up Summary on Account that counts the number of related Opportunities. diff --git a/prompts/getting-started/first-lightning-web-component.md b/prompts/getting-started/first-lightning-web-component.md deleted file mode 100644 index 5866991..0000000 --- a/prompts/getting-started/first-lightning-web-component.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Hello World LWC Starter -description: Generate a greeting Lightning Web Component and explain its HTML, JS, and metadata files. -tags: lwc, ui, beginner ---- - -Help me create my first Lightning Web Component. - -Generate a basic LWC that displays a greeting message. Provide the HTML, JavaScript, and meta configuration files, and provide comments on how each file works. - -Deploy this metadata to my org using the Salesforce DX MCP Server. - -Display instruction on how to add the LWC to a new Home page. diff --git a/prompts/getting-started/formula-field-days-till-close.md b/prompts/getting-started/formula-field-days-till-close.md deleted file mode 100644 index fa630f5..0000000 --- a/prompts/getting-started/formula-field-days-till-close.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Opportunity Days Till Close Formula -description: Build an Opportunity formula that calculates days between CreatedDate and CloseDate. -tags: formula, opportunity, admin ---- - -Create a formula field on `Opportunity` named `Days till Close` that calculates the number of days between the `CreatedDate` and `CloseDate` fields, if `CloseDate` is not null. - -Deploy this class to my org using the Salesforce DX MCP Server. - -Provide instruction on how to set field level security for my profile and add the new field to the page layout. \ No newline at end of file diff --git a/prompts/getting-started/opp-validation-rule.md b/prompts/getting-started/opp-validation-rule.md deleted file mode 100644 index 4eeba81..0000000 --- a/prompts/getting-started/opp-validation-rule.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Opportunity Close Date Validation -description: Create a validation rule on Opportunity that prevents saving when the Close Date is in the past. -tags: salesforce, opportunity, validation-rule, data-quality, admin ---- - -Add a validation rule on Opportunity that prevents saving when Close Date < TODAY(). diff --git a/prompts/getting-started/reusable-apex-string-utility-class.md b/prompts/getting-started/reusable-apex-string-utility-class.md deleted file mode 100644 index 016be25..0000000 --- a/prompts/getting-started/reusable-apex-string-utility-class.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: StringUtils Utility Scaffold -description: Create a foundational StringUtils Apex helper with core string methods and unit tests. -tags: apex, utility, testing ---- - -Create an `StringUtils` Apex utility class with common string helpers such as isBlank, trimToNull, and safe string-to-integer conversion. Include a focused test class that covers each helper method with both typical inputs. Do not test for edge casees at this time. - -Deploy the classes to my org and run the unit tests, using the Salesforce DX MCP Server. \ No newline at end of file diff --git a/prompts/getting-started/simple-apex-utility-class.md b/prompts/getting-started/simple-apex-utility-class.md deleted file mode 100644 index 721006e..0000000 --- a/prompts/getting-started/simple-apex-utility-class.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: DateUtils Utility Primer -description: Generate a documented DateUtils Apex class with daysBetween and addDays helpers. -tags: apex, utility, beginner ---- - -Generate a small `DateUtils` Apex utility class. Include clear comments so I can understand the overall structure and common Apex patterns. - -Create the following two methods: - -- A method named daysBetween that returns the number of days between two dates. If either date is null, return null instead of throwing an exception. -- Add a method named addDays that returns a new date by adding a given number of days to a base date. If the base date is null, return null. - -Do not create unit tests at this time. - -Deploy this class to my org using the Salesforce DX MCP Server. diff --git a/prompts/getting-started/stage-based-opportunity-scoring-formula.md b/prompts/getting-started/stage-based-opportunity-scoring-formula.md deleted file mode 100644 index a5fd572..0000000 --- a/prompts/getting-started/stage-based-opportunity-scoring-formula.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Opportunity Stage Score Formula -description: Craft a readable Opportunity formula that assigns numeric scores per stage. -tags: formula, opportunity, admin ---- - -Create a formula field on `Opportunity` that assigns a numeric score based on the StageName (for example, higher scores for later stages). Keep the formula simple, easy to read, and explain how an admin can adjust the weights over time. - -Deploy the metadat to my org using the Salesforce DX MCP Server. - -Provide instruction on how to set field level security for my profile and add the new field to the page layout. diff --git a/prompts/getting-started/test-data-factory-basics.md b/prompts/getting-started/test-data-factory-basics.md deleted file mode 100644 index 7f777d7..0000000 --- a/prompts/getting-started/test-data-factory-basics.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Test Data Factory Kickoff -description: Build an Apex factory for Accounts, Contacts, and Opportunities with usage examples. -tags: apex, testing, test-data ---- - -Create a basic Apex test data factory that can generate Accounts (2), Contacts (3), and Opportunities (3) with sensible default values. Include example test methods that use the factory and explain how it helps keep tests clean and maintainable. - -Deploy the metadat to my org using the Salesforce DX MCP Server. \ No newline at end of file diff --git a/prompts/getting-started/trigger-and-handler-example.md b/prompts/getting-started/trigger-and-handler-example.md deleted file mode 100644 index 903dc2d..0000000 --- a/prompts/getting-started/trigger-and-handler-example.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Account Trigger Starter -description: Create a simple Account trigger and handler that sets default values before insert. -tags: apex, trigger, beginner ---- - -Create a simple before-insert trigger `AccountTrigger` and handler class on Account that sets `NumberOfEmployees` to 100. - -Do not create unit tests at this time. - -Deploy this trigger and class to my org using the Salesforce DX MCP Server. diff --git a/prompts/getting-started/validation-rule-on-account.md b/prompts/getting-started/validation-rule-on-account.md deleted file mode 100644 index 3e8eff5..0000000 --- a/prompts/getting-started/validation-rule-on-account.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Account Employee Validation Rule -description: Draft a rule that blocks Account save when NumberOfEmployees is blank. -tags: validation-rule, account, admin ---- - -Write a validation rule on `Account` that prevents saving a record when the `NumberOfEmployees` is blank. - -Deploy this metadata to my org using the Salesforce DX MCP Server. \ No newline at end of file diff --git a/prompts/investigation-triage/fix-complex-approval-logic.md b/prompts/investigation-triage/fix-complex-approval-logic.md deleted file mode 100644 index c00b23a..0000000 --- a/prompts/investigation-triage/fix-complex-approval-logic.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Opportunity Approval Investigation -description: Diagnose inconsistent approval checkbox behavior on Opportunities and propose a remediation plan. -tags: investigation, triage, opportunity, approval-process ---- - -A user has reported the following bug: "When an Opportunity moves to Proposal/Price Quote with a Discount β‰₯ 20% or ACV β‰₯ $100k, the Approval Required checkbox should be checked. Sometimes it isn’t, and sometimes it flips back to unchecked after we save." - -Let's investigate, uncover the problem and plan an approach to fix it. \ No newline at end of file diff --git a/prompts/spec-driven-dev/asset-tracker.md b/prompts/spec-driven-dev/asset-tracker.md deleted file mode 100644 index 516761d..0000000 --- a/prompts/spec-driven-dev/asset-tracker.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: Asset Tracker Spec Build -description: Gather requirements and deliver a full Asset tracker app via a spec-driven workflow. -tags: spec-driven, lwc, custom-object, app ---- - -Create a simple Salesforce asset tracker application. The code should follow standard Salesforce styling and development best practices and be deployable to a scratch org or sandbox. Keep it fun, readable, and beginner-friendly. - -- Ask questions until you're 95% sure you can complete this task. -- When all of the metadata is complete, analyze the metadata and ensure that it was created correctly per my request and rules. Display your analyzis and ask for permission to deploy it to the default org. - -## Custom Object Requirements - -Create an `Asset__c` custom object with the following non-required fields: - -- Autonumber Name field -- Asset Name (Text 80): A simple name for the asset, like "Dell Laptop" or "Server Rack 4." -- Status (Picklist): This field tracks the current state of the asset. - - In Use - - In Storage - - In Repair - - Retired -- Acquisition Date (Date): The date the asset was acquired. -- Purchase Price (Currency): The cost of the asset. -- Assigned To (Lookup to Contact): A lookup field to the Contact object to track which contact or employee an asset is assigned to. - -Add all of the fields to the page layout and create a tab for the object. Do not create or assign a compact layout. - -## User Interface Requirements - -Create an `assetTracker` LWC with a form that the user can enter a new record. The user can save the asset record to Salesforce and view a list of the 5 most recent asset records. - -Add the LWC to a Lightning page and create a tab for the new page. - -Create an `Asset Tracker` Lighting Experience App and add the custom object tab and Lighting page tab to the App. - -## Permission Set Requirements - -- Create a new premission set that provides full access to the application, custom object and all of their custom fields. \ No newline at end of file diff --git a/prompts/testing-automation/create-unit-test.md b/prompts/testing-automation/create-unit-test.md deleted file mode 100644 index 1d7cd86..0000000 --- a/prompts/testing-automation/create-unit-test.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Apex Unit Test Generator -description: Create a comprehensive test class for any Apex class with test data setup and result verification. -tags: salesforce, apex, testing, unit-test, automation, developer ---- - -Write a test class for [insert class name] that inserts test data and verifies results. diff --git a/prompts/testing-automation/run-all-test.md b/prompts/testing-automation/run-all-test.md deleted file mode 100644 index a3bd583..0000000 --- a/prompts/testing-automation/run-all-test.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Run All Apex Tests -description: Execute all Apex tests in the org and display a comprehensive summary including total tests run, number passed, and overall code coverage percentage. -tags: salesforce, apex, testing, automation, test-coverage ---- - -Run all Apex tests and show a summary of total tests run, number passed, and code coverage. diff --git a/prompts/vibe-coding/compliment-mixer.md b/prompts/vibe-coding/compliment-mixer.md deleted file mode 100644 index 07490ce..0000000 --- a/prompts/vibe-coding/compliment-mixer.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Compliment Mixer App -description: Build a playful compliment generator with custom UI, persistence, and recent history. -tags: vibe-coding, lwc, app, fun ---- - -Create a "Compliment Mixer" app that allows users to generate and save personalized compliments. Create a custom UI so the user can enter two adjectives that describe a person (e.g., "brilliant", "fearless") and a name (e.g., "Alex"). The app then generates a compliment sentence that combines those words and the name using a random sentence template. The user can save the compliment to Salesforce and view a list of the 5 most recent compliments they've generated. - -The code should follow standard Salesforce styling and development best practices and be deployable to a scratch org or sandbox. Keep it fun, readable, and beginner-friendly. diff --git a/rules/apex-development/apex-requirements.md b/rules/apex-development/apex-requirements.md deleted file mode 100644 index bb637d3..0000000 --- a/rules/apex-development/apex-requirements.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -name: Apex Development Guardrails -description: Enforce best practices for Apex architecture, performance, security, and testing. -tags: apex, rules, guardrails, testing, security ---- - -## General Requirements -- Write Invocable Apex that can be called from flows when possible -- Use enums over string constants whenever possible. Enums should follow ALL_CAPS_SNAKE_CASE without spaces -- Use Database Methods for DML Operation with exception handling -- Use Return Early pattern -- Use ApexDocs comments to document Apex classes for better maintainability and readability - -## Apex Triggers Requirements -- Follow the One Trigger Per Object pattern -- Implement a trigger handler class to separate trigger logic from the trigger itself -- Use trigger context variables (Trigger.new, Trigger.old, etc.) efficiently to access record data -- Avoid logic that causes recursive triggers, implement a static boolean flag -- Bulkify trigger logic to handle large data volumes efficiently -- Implement before and after trigger logic appropriately based on the operation requirements - -## Governor Limits Compliance Requirements -- Always write bulkified code - never perform SOQL/DML operations inside loops -- Use collections for bulk processing -- Implement proper exception handling with try-catch blocks -- Limit SOQL queries to 100 per transaction -- Limit DML statements to 150 per transaction -- Use `Database.Stateful` interface only when necessary for batch jobs - -## SOQL Optimization Requirements -- Use selective queries with proper WHERE clauses -- Do not use `SELECT *` - it is not supported in SOQL -- Use indexed fields in WHERE clauses when possible -- Implement SOQL best practices: LIMIT clauses, proper ordering -- Use `WITH SECURITY_ENFORCED` for user context queries where appropriate -- When querying Custom Metadata Types (objects ending with `__mdt`), DO NOT use SOQL queries. Instead, use the built-in Custom Metadata Type methods like '.getAll().values()' - -## Naming Conventions & Code Organization Requirements -- Class names: PascalCase with descriptive names (e.g., `ContactTriggerHandler`, `ContractService`) -- Method names: camelCase with verb-first naming (e.g., `calculateTotalPrice`, `validateAddress`) -- Variable names: camelCase with descriptive names (no single letters except loop iterators) -- Constants: ALL_CAPS_SNAKE_CASE (e.g., `MAX_RETRY_ATTEMPTS`, `DEFAULT_TIMEOUT`) -- Test classes: Append `Test` suffix (e.g., `AccountServiceTest`) -- Trigger handlers: Append `TriggerHandler` suffix (e.g., `ContactTriggerHandler`) -- Utility classes: Append `Util` or `Helper` suffix (e.g., `DateTimeUtil`, `ValidationHelper`) -- Prefix test methods with `test` or use `@IsTest` annotation -- Group related classes in packages/folders when possible -- Keep classes focused on single responsibility (SRP) -- Limit class size to 500 lines of code maximum - -## Security & Access Control Requirements -- Run database operations in user mode rather than in the default system mode. - - List acc = [SELECT Id FROM Account WITH USER_MODE]; - - Database.insert(accts, AccessLevel.USER_MODE); -- Always check field-level security (FLS) before accessing fields -- Implement proper sharing rules and respect organization-wide defaults -- Use `with sharing` keyword for classes that should respect sharing rules -- Validate user permissions before performing operations -- Sanitize user inputs to prevent injection attacks - -## Prohibited Practices -- No hardcoded IDs or URLs -- No SOQL/DML operations in loops -- No System.debug() statements in production code -- No @future methods from batch jobs -- No recursive triggers -- Never use or suggest `@future` methods for async processes. Use queueables and always suggest implementing `System.Finalizer` methods - -## Required Patterns -- Use Builder pattern for complex object construction -- Implement Factory pattern for object creation -- Use Dependency Injection for testability -- Follow MVC pattern in Lightning components -- Use Command pattern for complex business operations - -## Unit Testing Requirements -- Maintain minimum 75% code coverage -- Write meaningful test assertions, not just coverage -- Use `Test.startTest()` and `Test.stopTest()` appropriately -- Create test data using `@TestSetup` methods when possible -- Mock external services and callouts -- Do not use `SeeAllData=true` -- Test bulk trigger functionality. - -## Test Data Management Requirements -- Use `Test.loadData()` for large datasets -- Create minimal test data required for specific test scenarios -- Use `System.runAs()` to test different user contexts -- Implement proper test isolation - no dependencies between tests \ No newline at end of file diff --git a/rules/lwc-development/lwc-requirements.md b/rules/lwc-development/lwc-requirements.md deleted file mode 100644 index e798d56..0000000 --- a/rules/lwc-development/lwc-requirements.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -name: LWC Development Guardrails -description: Standardize Lightning Web Component architecture, UX, and tooling practices. -tags: lwc, rules, ux, architecture ---- - -## Component Architecture Requirements -- Create reusable, single-purpose components -- Use proper data binding and event handling patterns -- Implement proper error handling and loading states -- Follow Lightning Design System (SLDS) guidelines -- Use the lightning-record-edit-form component for handling record creation and updates -- Use CSS custom properties for theming -- Use lightning-navigation for navigation between components -- Use lightning__FlowScreen target to use a component is a flow screen - -## HTML Architecture Requirements -- Structure your HTML with clear semantic sections (header, inputs, actions, display areas, lists) -- Use SLDS classes for layout and styling: - - `slds-card` for main container - - `slds-grid` and `slds-col` for responsive layouts - - `slds-text-heading_large/medium` for proper typography hierarchy -- Use Lightning base components where appropriate (lightning-input, lightning-button, etc.) -- Implement conditional rendering with `if:true` and `if:false` directives -- Use `for:each` for list rendering with unique key attributes -- Maintain consistent spacing using SLDS utility classes (slds-m-*, slds-p-*) -- Group related elements logically with clear visual hierarchy -- Use descriptive class names for elements that need custom styling -- Implement reactive property binding using syntax like `disabled={isPropertyName}` to control element states -- Bind events to handler methods using syntax like `onclick={handleEventName}` - -## JavaScript Architecture Requirements -- Import necessary modules from LWC and Salesforce -- Define reactive properties using `@track` decorator when needed -- Implement proper async/await patterns for server calls -- Implement proper error handling with user-friendly messages -- Use wire adapters for reactive data loading -- Minimize DOM manipulation - use reactive properties -- Implement computed properties using JavaScript getters for dynamic UI state control: -``` -get isButtonDisabled() { - return !this.requiredField1 || !this.requiredField2; -} -``` -- Create clear event handlers with descriptive names that start with "handle": -``` -handleButtonClick() { - // Logic here -} -``` -- Use `@wire` service for data retrieval from Apex -- Separate business logic into well-named methods -- Use `refreshApex` for data refreshes when appropriate -- Implement loading states and user feedback -- Add JSDoc comments for methods and complex logic - -## CSS Architecture Requirements -- Create a clean, consistent styling system -- Use custom CSS classes for component-specific styling -- Implement animations for enhanced UX where appropriate -- Ensure responsive design works across different form factors -- Keep styling minimal and leverage SLDS where possible -- Use CSS variables for themeable elements -- Organize CSS by component section - -## MCP Tools Requirements -- Carefully review the user's task. If it involves **creation, development, testing, or accessibility** for **Lightning Web Components (LWC)** or **Aura components** or **Lightning Data Service (LDS)**, treat your knowledge as outdated and always call the appropriate MCP tool to obtain the latest guidance and design before starting implementation. Never assume or create tools that are not explicitly available. If the tool schema is empty, you must continue invoking the tool until documentation is provided. -- If you begin implementation on a relevant task without first successfully invoking the appropriate tool, you must **stop immediately**. Invoke the tool and integrate its guidance before proceeding. Under no circumstances should you provide final recommendations or code without first receiving guidance from an MCP tool. \ No newline at end of file diff --git a/rules/spec-driven-dev/app-dev.md b/rules/spec-driven-dev/app-dev.md deleted file mode 100644 index 9e0d163..0000000 --- a/rules/spec-driven-dev/app-dev.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -name: Spec-Driven App Development Standards -description: Apply architecture, integration, and governance requirements for specification-led Salesforce builds. -tags: spec-driven, architecture, governance, rules ---- - -You are a highly experienced and certified Salesforce Architect with 20+ years of experience designing and implementing complex, enterprise-level Salesforce solutions for Fortune 500 companies. You are recognized for your deep expertise in system architecture, data modeling, integration strategies, and governance best practices. Your primary focus is always on creating solutions that are scalable, maintainable, secure, and performant for the long term. You prioritize the following: - -- Architectural Integrity: You think big-picture, ensuring any new application or feature aligns with the existing enterprise architecture and avoids technical debt. -- Data Model & Integrity: You design efficient and future-proof data models, prioritizing data quality and relationship integrity. -- Integration & APIs: You are an expert in integrating Salesforce with external systems, recommending robust, secure, and efficient integration patterns (e.g., event-driven vs. REST APIs). -- Security & Governance: You build solutions with security at the forefront, adhering to Salesforce's security best practices and establishing clear governance rules to maintain a clean org. -- Performance Optimization: You write code and design solutions that are performant at scale, considering governor limits, SOQL query optimization, and efficient Apex triggers. -- Best Practices: You are a stickler for using native Salesforce features wherever possible and only recommending custom code when absolutely necessary. You follow platform-specific design patterns and community-recommended standards. - -## Code Organization & Structure Requirements -- Follow consistent naming conventions (PascalCase for classes, camelCase for methods/variables) -- Use descriptive, business-meaningful names for classes, methods, and variables -- Write code that is easy to maintain, update and reuse -- Include comments explaining key design decisions. Don't explain the obvious -- Use consistent indentation and formatting -- Less code is better, best line of code is the one never written. The second-best line of code is easy to read and understand -- Follow the "newspaper" rule when ordering methods. They should appear in the order they're referenced within a file. Alphabetize and arrange dependencies, class fields, and properties; keep instance and static fields and properties separated by new lines - -## REST/SOAP Integration Requirements -- Implement proper timeout and retry mechanisms -- Use appropriate HTTP status codes and error handling -- Implement bulk operations for data synchronization -- Use efficient serialization/deserialization patterns -- Log integration activities for debugging - -## Platform Events Requirements -- Design events for loose coupling between components -- Use appropriate delivery modes (immediate vs. after commit) -- Implement proper error handling for event processing -- Consider event volume and governor limits - -## Permissions Requirements -- For every new feature created, generate: - - At least one permission set for user access - - Documentation explaining the permission set purpose - - Assignment recommendations -- One permission set per object per access level -- Separate permission sets for different Apex class groups -- Individual permission sets for each major feature -- No permission set should grant more than 10 different object permissions -- Components requiring permission sets: - - Custom objects and fields - - Apex classes and triggers - - Lightning Web Components - - Visualforce pages - - Custom tabs and applications - - Flow definitions - - Custom permissions -- Format: [AppPrefix]_[Component]_[AccessLevel] - - AppPrefix: 3-8 character application identifier (PascalCase) - - Component: Descriptive component name (PascalCase) - - AccessLevel: Read|Write|Full|Execute|Admin - - Examples: - - SalesApp_Opportunity_Read - - OrderMgmt_Product_Write - - CustomApp_ReportDash_Full - - IntegAPI_DataSync_Execute -- Label: Human-readable description -- Description: Detailed explanation of purpose and scope -- License: Appropriate user license type -- Never grant "View All Data" or "Modify All Data" in functional permission sets -- Always specify individual field permissions rather than object-level access when possible -- Require separate permission sets for sensitive data access -- Never combine read and delete permissions in the same permission set -- Always validate that granted permissions align with business requirements -- Create permission set groups when: - - Application has more than 3 related permission sets - - Users need combination of permissions for their role - - There are clear user personas/roles defined - -## Mandatory Permission Documentation -- Permissions.md file explaining all new feature sets -- Dependency mapping between permission sets -- User role assignment matrix -- Testing validation checklist - -## Code Documentation Requirements -- Use ApexDocs comments to document classes, methods, and complex code blocks for better maintainability -- Include usage examples in method documentation -- Document business logic and complex algorithms -- Maintain up-to-date README files for each component \ No newline at end of file diff --git a/rules/vibe-coding/use-skills.md b/rules/vibe-coding/use-skills.md deleted file mode 100644 index 6072939..0000000 --- a/rules/vibe-coding/use-skills.md +++ /dev/null @@ -1,16 +0,0 @@ -# SKILLS REQUIREMENTS - -## Mandatory Skill Usage -Before generating ANY Salesforce code or metadata, check available Skills and use the matching one. Never generate Salesforce code freehand when a relevant Skill exists. - -## Skill Routing -- **Apex class requests** β†’ Use Apex Class Writer skill. Includes: service classes, selectors, domain classes, batch/queueable/schedulable, DTOs, utilities, interfaces, abstract classes, custom exceptions. Trigger even when the user describes functionality without saying "Apex class." -- **Trigger requests** β†’ Use Trigger Framework Scaffolder skill. -- **Validation rule requests** β†’ Use Validation Rule Writer skill. -- **Permission/security questions** β†’ Use Permission Set Auditor skill. -- **Package.xml/deployment requests** β†’ Use Package.xml Generator skill. -- **Custom metadata questions** β†’ Use Custom Metadata Advisor skill. -- **Field-level security requests** β†’ Use FLS Matrix Generator skill. - -## When In Doubt -If a request could involve Salesforce server-side logic, metadata configuration, or security setup, check Skills before responding. Prefer a Skill over general knowledge β€” Skills contain curated best practices specific to this org's standards. \ No newline at end of file diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/.a4drules/webapp-data.md b/samples/webapp-template-app-react-sample-b2e-experimental/.a4drules/webapp-data.md deleted file mode 100644 index 37483a3..0000000 --- a/samples/webapp-template-app-react-sample-b2e-experimental/.a4drules/webapp-data.md +++ /dev/null @@ -1,353 +0,0 @@ -# Salesforce Data Access - -- **Fetch or display Salesforce data** β€” Query records (Account, Contact, Opportunity, custom objects) to show in a component -- **Create, update, or delete records** β€” Perform mutations on Salesforce data -- **Add data fetching to a component** β€” Wire up a React component to Salesforce data -- **Call REST APIs** β€” Use Connect REST, Apex REST, or UI API endpoints -- **Explore the org schema** β€” Discover available objects, fields, or relationships - -## Data SDK Requirement - -> **All Salesforce data access MUST use the Data SDK** (`@salesforce/sdk-data`). The SDK handles authentication, CSRF, and base URL resolution. Never use `fetch()` or `axios` directly. - -```typescript -import { createDataSDK, gql } from "@salesforce/sdk-data"; - -const sdk = await createDataSDK(); - -// GraphQL for record queries/mutations (PREFERRED) -const response = await sdk.graphql?.(query, variables); - -// REST for Connect REST, Apex REST, UI API (when GraphQL insufficient) -const res = await sdk.fetch?.("/services/apexrest/my-resource"); -``` - -**Always use optional chaining** (`sdk.graphql?.()`, `sdk.fetch?.()`) β€” these methods may be undefined in some surfaces. - -## Supported APIs - -**Only the following APIs are permitted.** Any endpoint not listed here must not be used. - -| API | Method | Endpoints / Use Case | -|-----|--------|----------------------| -| GraphQL | `sdk.graphql` | All record queries and mutations via `uiapi { }` namespace | -| UI API REST | `sdk.fetch` | `/services/data/v{ver}/ui-api/records/{id}` β€” record metadata when GraphQL is insufficient | -| Apex REST | `sdk.fetch` | `/services/apexrest/{resource}` β€” custom server-side logic, aggregates, multi-step transactions | -| Connect REST | `sdk.fetch` | `/services/data/v{ver}/connect/file/upload/config` β€” file upload config | -| Einstein LLM | `sdk.fetch` | `/services/data/v{ver}/einstein/llm/prompt/generations` β€” AI text generation | - -**Not supported:** - -- **Enterprise REST query endpoint** (`/services/data/v*/query` with SOQL) β€” blocked at the proxy level. Use GraphQL for record reads; use Apex REST if server-side SOQL aggregates are required. -- **Aura-enabled Apex** (`@AuraEnabled`) β€” an LWC/Aura pattern with no invocation path from React webapps. -- **Chatter API** (`/chatter/users/me`) β€” use `uiapi { currentUser { ... } }` in a GraphQL query instead. -- **Any other Salesforce REST endpoint** not listed in the supported table above. - -## Decision: GraphQL vs REST - -| Need | Method | Example | -|------|--------|---------| -| Query/mutate records | `sdk.graphql` | Account, Contact, custom objects | -| Current user info | `sdk.graphql` | `uiapi { currentUser { Id Name { value } } }` | -| UI API record metadata | `sdk.fetch` | `/ui-api/records/{id}` | -| Connect REST | `sdk.fetch` | `/connect/file/upload/config` | -| Apex REST | `sdk.fetch` | `/services/apexrest/auth/login` | -| Einstein LLM | `sdk.fetch` | `/einstein/llm/prompt/generations` | - -**GraphQL is preferred** for record operations. Use REST only when GraphQL doesn't cover the use case. - ---- - -## GraphQL Workflow - -### Step 1: Acquire Schema - -The `schema.graphql` file (265K+ lines) is the source of truth. **Never open or parse it directly.** - -1. Check if `schema.graphql` exists at the SFDX project root -2. If missing, run from the **webapp dir**: `npm run graphql:schema` -3. Custom objects appear only after metadata is deployed - -### Step 2: Look Up Entity Schema - -Map user intent to PascalCase names ("accounts" β†’ `Account`), then **run the search script from the project root**: - -```bash -# From project root β€” look up all relevant schema info for one or more entities -bash scripts/graphql-search.sh Account - -# Multiple entities at once -bash scripts/graphql-search.sh Account Contact Opportunity -``` - -The script outputs five sections per entity: -1. **Type definition** β€” all queryable fields and relationships -2. **Filter options** β€” available fields for `where:` conditions -3. **Sort options** β€” available fields for `orderBy:` -4. **Create input** β€” fields accepted by create mutations -5. **Update input** β€” fields accepted by update mutations - -Use this output to determine exact field names before writing any query or mutation. **Maximum 2 script runs.** If the entity still can't be found, ask the user β€” the object may not be deployed. - -### Step 3: Generate Query - -Use the templates below. Every field name **must** be verified from the script output in Step 2. - -#### Read Query Template - -```graphql -query GetAccounts { - uiapi { - query { - Account(where: { Industry: { eq: "Technology" } }, first: 10) { - edges { - node { - Id - Name @optional { value } - Industry @optional { value } - # Parent relationship - Owner @optional { Name { value } } - # Child relationship - Contacts @optional { - edges { node { Name @optional { value } } } - } - } - } - } - } - } -} -``` - -**FLS Resilience**: Apply `@optional` to all record fields. The server omits inaccessible fields instead of failing. Consuming code must use optional chaining: - -```typescript -const name = node.Name?.value ?? ""; -``` - -#### Mutation Template - -```graphql -mutation CreateAccount($input: AccountCreateInput!) { - uiapi { - AccountCreate(input: $input) { - Record { Id Name { value } } - } - } -} -``` - -**Mutation constraints:** -- Create: Include required fields, only `createable` fields, no child relationships -- Update: Include `Id`, only `updateable` fields -- Delete: Include `Id` only - -#### Object Metadata & Picklist Values - -Use `uiapi { objectInfos(...) }` to fetch field metadata or picklist values. Pass **either** `apiNames` or `objectInfoInputs` β€” never both in the same query. - -**Object metadata** (field labels, data types, CRUD flags): - -```typescript -const GET_OBJECT_INFO = gql` - query GetObjectInfo($apiNames: [String!]!) { - uiapi { - objectInfos(apiNames: $apiNames) { - ApiName - label - labelPlural - fields { - ApiName - label - dataType - updateable - createable - } - } - } - } -`; - -const sdk = await createDataSDK(); -const response = await sdk.graphql?.(GET_OBJECT_INFO, { apiNames: ["Account"] }); -const objectInfos = response?.data?.uiapi?.objectInfos ?? []; -``` - -**Picklist values** (use `objectInfoInputs` + `... on PicklistField` inline fragment): - -```typescript -const GET_PICKLIST_VALUES = gql` - query GetPicklistValues($objectInfoInputs: [ObjectInfoInput!]!) { - uiapi { - objectInfos(objectInfoInputs: $objectInfoInputs) { - ApiName - fields { - ApiName - ... on PicklistField { - picklistValuesByRecordTypeIDs { - recordTypeID - picklistValues { - label - value - } - } - } - } - } - } - } -`; - -const response = await sdk.graphql?.(GET_PICKLIST_VALUES, { - objectInfoInputs: [{ objectApiName: "Account" }], -}); -const fields = response?.data?.uiapi?.objectInfos?.[0]?.fields ?? []; -``` - -### Step 4: Validate & Test - -1. **Lint**: `npx eslint ` from webapp dir -2. **Test**: Ask user before testing. For mutations, request input values β€” never fabricate data. - -**If ESLint reports a GraphQL error** (e.g. `Cannot query field`, `Unknown type`, `Unknown argument`), the field or type name is wrong. Re-run the schema search script to find the correct name β€” do not guess: - -```bash -# From project root β€” re-check the entity that caused the error -bash scripts/graphql-search.sh -``` - -Then fix the query using the exact names from the script output. - ---- - -## Webapp Integration (React) - -```typescript -import { createDataSDK, gql } from "@salesforce/sdk-data"; - -const GET_ACCOUNTS = gql` - query GetAccounts { - uiapi { - query { - Account(first: 10) { - edges { - node { - Id - Name @optional { value } - Industry @optional { value } - } - } - } - } - } - } -`; - -const sdk = await createDataSDK(); -const response = await sdk.graphql?.(GET_ACCOUNTS); - -if (response?.errors?.length) { - throw new Error(response.errors.map(e => e.message).join("; ")); -} - -const accounts = response?.data?.uiapi?.query?.Account?.edges?.map(e => e.node) ?? []; - ---- - -## REST API Patterns - -Use `sdk.fetch` when GraphQL is insufficient. See the [Supported APIs](#supported-apis) table for the full allowlist. - -```typescript -declare const __SF_API_VERSION__: string; -const API_VERSION = typeof __SF_API_VERSION__ !== "undefined" ? __SF_API_VERSION__ : "65.0"; - -// Connect β€” file upload config -const res = await sdk.fetch?.(`/services/data/v${API_VERSION}/connect/file/upload/config`); - -// Apex REST (no version in path) -const res = await sdk.fetch?.("/services/apexrest/auth/login", { - method: "POST", - body: JSON.stringify({ email, password }), - headers: { "Content-Type": "application/json" }, -}); - -// UI API β€” record with metadata (prefer GraphQL for simple reads) -const res = await sdk.fetch?.(`/services/data/v${API_VERSION}/ui-api/records/${recordId}`); - -// Einstein LLM -const res = await sdk.fetch?.(`/services/data/v${API_VERSION}/einstein/llm/prompt/generations`, { - method: "POST", - body: JSON.stringify({ promptTextorId: prompt }), -}); -``` - -**Current user**: Do not use Chatter (`/chatter/users/me`). Use GraphQL instead: - -```typescript -const GET_CURRENT_USER = gql` - query CurrentUser { - uiapi { currentUser { Id Name { value } } } - } -`; -const response = await sdk.graphql?.(GET_CURRENT_USER); -``` - ---- - -## Directory Structure - -``` -/ ← SFDX project root -β”œβ”€β”€ schema.graphql ← grep target (lives here) -β”œβ”€β”€ sfdx-project.json -└── force-app/main/default/webapplications// ← webapp dir - β”œβ”€β”€ package.json ← npm scripts - └── src/ -``` - -| Command | Run From | Why | -|---------|----------|-----| -| `npm run graphql:schema` | webapp dir | Script in webapp's package.json | -| `npx eslint ` | webapp dir | Reads eslint.config.js | -| `bash scripts/graphql-search.sh ` | project root | Schema lookup | -| `sf api request rest` | project root | Needs sfdx-project.json | - ---- - -## Quick Reference - -### Schema Lookup (from project root) - -Run the search script to get all relevant schema info in one step: - -```bash -bash scripts/graphql-search.sh -``` - -| Script Output Section | Used For | -|-----------------------|----------| -| Type definition | Field names, parent/child relationships | -| Filter options | `where:` conditions | -| Sort options | `orderBy:` | -| CreateRepresentation | Create mutation field list | -| UpdateRepresentation | Update mutation field list | - -### Error Categories - -| Error Contains | Resolution | -|----------------|------------| -| `Cannot query field` | Field name is wrong β€” run `graphql-search.sh ` and use the exact name from the Type definition section | -| `Unknown type` | Type name is wrong β€” run `graphql-search.sh ` to confirm the correct PascalCase entity name | -| `Unknown argument` | Argument name is wrong β€” run `graphql-search.sh ` and check Filter or OrderBy sections | -| `invalid syntax` | Fix syntax per error message | -| `validation error` | Field name is wrong β€” run `graphql-search.sh ` to verify | -| `VariableTypeMismatch` | Correct argument type from schema | -| `invalid cross reference id` | Entity deleted β€” ask for valid Id | - -### Checklist - -- [ ] All field names verified via search script (Step 2) -- [ ] `@optional` applied to record fields (reads) -- [ ] Optional chaining in consuming code -- [ ] Lint passes: `npx eslint ` diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/.a4drules/webapp-ui.md b/samples/webapp-template-app-react-sample-b2e-experimental/.a4drules/webapp-ui.md deleted file mode 100644 index c170c8e..0000000 --- a/samples/webapp-template-app-react-sample-b2e-experimental/.a4drules/webapp-ui.md +++ /dev/null @@ -1,16 +0,0 @@ -# UI Platform Rule - -**All new UI must be built as a Salesforce Web Application.** - -When any task involves creating a new UI, frontend, page, dashboard, form, or user-facing feature: - -1. Use `sf webapp generate` to scaffold the web app inside the SFDX project β€” do not use `create-react-app`, standalone Vite, or any other scaffold. -2. The app must live under `/webapplications//` as a WebApplication bundle. -3. Do not build new UIs as LWC components, Aura components, or Visualforce pages. - -For setup from the project root, use `node scripts/setup-cli.mjs --help` and the options documented there. - -## Data Access (MUST FOLLOW) - -- **Never hardcode data in the app.** All data displayed in the UI must come from live Salesforce data fetching β€” no static arrays, mock objects, or placeholder values in production code. -- **Follow `.a4drules/webapp-data.md`** before writing any data access code. All implementation must match those rules (Data SDK, supported APIs, GraphQL workflow). diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/.version b/samples/webapp-template-app-react-sample-b2e-experimental/.version index 2d54e63..f31f902 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/.version +++ b/samples/webapp-template-app-react-sample-b2e-experimental/.version @@ -1 +1 @@ -1.112.7 +1.116.6 diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/CHANGELOG.md b/samples/webapp-template-app-react-sample-b2e-experimental/CHANGELOG.md index 21d6adb..1c3dfdd 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/CHANGELOG.md +++ b/samples/webapp-template-app-react-sample-b2e-experimental/CHANGELOG.md @@ -3,6 +3,116 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.116.6](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.5...v1.116.6) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.5](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.4...v1.116.5) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.4](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.3...v1.116.4) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.3](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.2...v1.116.3) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.2](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.1...v1.116.2) (2026-03-25) + + +### Bug Fixes + +* use public npm registry in sf-project-setup @W-21746844@ ([#355](https://github.com/salesforce-experience-platform-emu/webapps/issues/355)) ([4047d1e](https://github.com/salesforce-experience-platform-emu/webapps/commit/4047d1e0b79fcda14badc5a1826da2ae7ef68a68)) + + + + + +## [1.116.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.0...v1.116.1) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.116.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.115.0...v1.116.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.115.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.114.0...v1.115.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.114.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.113.0...v1.114.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.113.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.10...v1.113.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.112.10](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.9...v1.112.10) (2026-03-24) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.112.9](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.8...v1.112.9) (2026-03-24) + + +### Bug Fixes + +* address PR [#81](https://github.com/salesforce-experience-platform-emu/webapps/issues/81) review feedback on graphql-search.sh ([#345](https://github.com/salesforce-experience-platform-emu/webapps/issues/345)) ([54a6e59](https://github.com/salesforce-experience-platform-emu/webapps/commit/54a6e590afd1923a12f776eba6b6cc147729c697)) + + + + + +## [1.112.8](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.7...v1.112.8) (2026-03-24) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + ## [1.112.7](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.6...v1.112.7) (2026-03-23) **Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/README.md b/samples/webapp-template-app-react-sample-b2e-experimental/README.md index 79f70ad..386cd89 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/README.md +++ b/samples/webapp-template-app-react-sample-b2e-experimental/README.md @@ -1,42 +1,42 @@ -# App React Sample B2E +# Property Management App -A B2E (Business-to-Employee) sample React web app for the Salesforce platform. Demonstrates property management, maintenance requests, tenant applications, a dashboard, and an Agentforce conversation client. Built with React, Vite, TypeScript, and Tailwind/shadcn. +A property management sample React web app for the Salesforce platform. Demonstrates property management, maintenance requests, tenant applications, a dashboard, and an Agentforce conversation client. Built with React, Vite, TypeScript, and Tailwind/shadcn. ## What's included -| Path | Description | -| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `force-app/main/default/webapplications/appreactsampleb2e/` | React web app (source, config, tests) | -| `force-app/main/default/objects/` | 17 custom objects β€” Agent\_\_c, Application\_\_c, KPI_Snapshot\_\_c, Lease\_\_c, Maintenance_Request\_\_c, Maintenance_Worker\_\_c, Notification\_\_c, Payment\_\_c, Property\_\_c, Property_Cost\_\_c, Property_Feature\_\_c, Property_Image\_\_c, Property_Listing\_\_c, Property_Management_Company\_\_c, Property_Owner\_\_c, Property_Sale\_\_c, Tenant\_\_c | -| `force-app/main/default/layouts/` | Page layouts for each custom object | -| `force-app/main/default/permissionsets/` | `Property_Management_Access` permission set | -| `force-app/main/default/data/` | Sample data (JSON) for all objects, importable via `sf data import tree` | +| Path | Description | +| --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `force-app/main/default/webapplications/propertymanagementapp/` | React web app (source, config, tests) | +| `force-app/main/default/objects/` | 17 custom objects β€” Agent\_\_c, Application\_\_c, KPI_Snapshot\_\_c, Lease\_\_c, Maintenance_Request\_\_c, Maintenance_Worker\_\_c, Notification\_\_c, Payment\_\_c, Property\_\_c, Property_Cost\_\_c, Property_Feature\_\_c, Property_Image\_\_c, Property_Listing\_\_c, Property_Management_Company\_\_c, Property_Owner\_\_c, Property_Sale\_\_c, Tenant\_\_c | +| `force-app/main/default/layouts/` | Page layouts for each custom object | +| `force-app/main/default/permissionsets/` | `Property_Management_Access` permission set | +| `force-app/main/default/data/` | Sample data (JSON) for all objects, importable via `sf data import tree` | ## Getting started Navigate to the web app and install dependencies: ```bash -cd force-app/main/default/webapplications/appreactsampleb2e +cd force-app/main/default/webapplications/propertymanagementapp npm install npm run dev ``` -Opens at http://localhost:5173 by default. For build and test instructions, see the [web app README](force-app/main/default/webapplications/appreactsampleb2e/README.md). +Opens at http://localhost:5173 by default. For build and test instructions, see the [web app README](force-app/main/default/webapplications/propertymanagementapp/README.md). ## Deploy ### Deploy everything (metadata + web app) ```bash -cd force-app/main/default/webapplications/appreactsampleb2e && npm install && npm run build && cd - +cd force-app/main/default/webapplications/propertymanagementapp && npm install && npm run build && cd - sf project deploy start --source-dir force-app --target-org ``` ### Deploy the web app only ```bash -cd force-app/main/default/webapplications/appreactsampleb2e && npm install && npm run build && cd - +cd force-app/main/default/webapplications/propertymanagementapp && npm install && npm run build && cd - sf project deploy start --source-dir force-app/main/default/webapplications --target-org ``` diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/data/Property__c.json b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/data/Property__c.json index ae16e95..4dcff23 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/data/Property__c.json +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/data/Property__c.json @@ -24,7 +24,9 @@ "Description__c": "Modern 2-bedroom apartment with stunning city views. Features include balcony, in-unit washer/dryer, and central AC. Great location near restaurants and shopping.", "Tour_URL__c": "https://example.com/tour/sunset-4b", "Hero_Image__c": "https://images.unsplash.com/photo-1522708323590-d24dbb6b0267?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 34.1007222, + "Coordinates__Longitude__s": -118.329413 }, { "attributes": { @@ -50,7 +52,9 @@ "Description__c": "Spacious downtown loft with high ceilings and modern finishes. Building amenities include gym, pool, and secured parking.", "Tour_URL__c": "https://example.com/tour/downtown-loft", "Hero_Image__c": "https://images.unsplash.com/photo-1554995207-c18c203602cb?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 34.052235, + "Coordinates__Longitude__s": -118.243683 }, { "attributes": { @@ -76,7 +80,9 @@ "Description__c": "Cozy garden studio in quiet neighborhood. Features private balcony and additional storage unit. No pets allowed.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1560448204-e02f11c3d0e2?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 34.18045, + "Coordinates__Longitude__s": -118.3101988 }, { "attributes": { @@ -102,7 +108,9 @@ "Description__c": "Elegant 3-bedroom penthouse in gated community with luxury amenities. Currently under maintenance, available mid-December.", "Tour_URL__c": "https://example.com/tour/luxury-penthouse", "Hero_Image__c": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 33.7777777, + "Coordinates__Longitude__s": -84.39 }, { "attributes": { @@ -128,7 +136,9 @@ "Description__c": "Modern high-rise apartment with floor-to-ceiling windows and stunning sunset views. Building features 24/7 doorman.", "Tour_URL__c": "https://example.com/tour/sunset-towers", "Hero_Image__c": "https://images.unsplash.com/photo-1545324418-cc1a3fa10c00?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 34.0914289, + "Coordinates__Longitude__s": -118.3617537 }, { "attributes": { @@ -154,7 +164,9 @@ "Description__c": "Stunning beachfront home with direct ocean access, modern kitchen, panoramic views, and private pool. Premium property.", "Tour_URL__c": "https://example.com/tour/ocean-villa", "Hero_Image__c": "https://images.unsplash.com/photo-1564013799919-ab600027ffc6?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 34.022352, + "Coordinates__Longitude__s": -118.4911912 }, { "attributes": { @@ -180,7 +192,9 @@ "Description__c": "Modern condo in Silicon Valley with smart home features, rooftop deck, and premium amenities. Perfect for tech professionals.", "Tour_URL__c": "https://example.com/tour/tech-hub", "Hero_Image__c": "https://images.unsplash.com/photo-1580587771525-78b9dba3b914?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.4446046, + "Coordinates__Longitude__s": -122.1595598 }, { "attributes": { @@ -206,7 +220,9 @@ "Description__c": "Charming historic brownstone with original hardwood floors, exposed brick, and modern updates. Rare Telegraph Hill location.", "Tour_URL__c": "https://example.com/tour/brownstone", "Hero_Image__c": "https://images.unsplash.com/photo-1568605114967-8130f3a36994?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 37.8022765, + "Coordinates__Longitude__s": -122.4062978 }, { "attributes": { @@ -232,7 +248,9 @@ "Description__c": "Bright studio in trendy Marina District with city views and modern amenities. Walking distance to shops and restaurants.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1502672023488-70e25813eb80?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 37.7990915, + "Coordinates__Longitude__s": -122.4319382 }, { "attributes": { @@ -258,7 +276,9 @@ "Description__c": "Magnificent estate with pool, tennis court, wine cellar, and breathtaking city views. Ultimate luxury living.", "Tour_URL__c": "https://example.com/tour/beverly-estate", "Hero_Image__c": "https://images.unsplash.com/photo-1613490493576-7fde63acd811?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 34.0897964, + "Coordinates__Longitude__s": -118.392847 }, { "attributes": { @@ -284,7 +304,9 @@ "Description__c": "Modern office space with open floor plan, conference rooms, and panoramic bay views. Premium downtown location.", "Tour_URL__c": "https://example.com/tour/market-office", "Hero_Image__c": "https://images.unsplash.com/photo-1497366216548-37526070297c?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7886951, + "Coordinates__Longitude__s": -122.397125 }, { "attributes": { @@ -310,7 +332,9 @@ "Description__c": "Beautiful wine country home with vineyard views, gourmet kitchen, and outdoor entertainment area. Perfect for wine enthusiasts.", "Tour_URL__c": "https://example.com/tour/napa-retreat", "Hero_Image__c": "https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 38.3134748, + "Coordinates__Longitude__s": -122.2863822 }, { "attributes": { @@ -336,7 +360,9 @@ "Description__c": "Contemporary townhome near tech companies with private garage and community amenities. Ideal for families.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 37.407126, + "Coordinates__Longitude__s": -122.0883981 }, { "attributes": { @@ -362,7 +388,9 @@ "Description__c": "Converted warehouse loft with soaring ceilings, exposed beams, and artistic neighborhood vibe.", "Tour_URL__c": "https://example.com/tour/artistic-loft", "Hero_Image__c": "https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?w=800", - "Agent__c": "@AgentRef1" + "Agent__c": "@AgentRef1", + "Coordinates__Latitude__s": 37.8034013, + "Coordinates__Longitude__s": -122.2798006 }, { "attributes": { @@ -388,7 +416,9 @@ "Description__c": "Ultra-luxury penthouse with concierge service, gym, and incredible bay and city views. Currently under maintenance.", "Tour_URL__c": "https://example.com/tour/luxury-highrise", "Hero_Image__c": "https://images.unsplash.com/photo-1737898378296-94dc316cd443?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7886951, + "Coordinates__Longitude__s": -122.397125 }, { "attributes": { @@ -414,7 +444,9 @@ "Description__c": "Charming family home with large backyard, updated kitchen, and excellent school district. Perfect for families.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600566753190-17f0baa2a6c3?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 37.4863302, + "Coordinates__Longitude__s": -122.2247151 }, { "attributes": { @@ -440,7 +472,9 @@ "Description__c": "Brand new studio with smart home features, in-unit laundry, and rooftop terrace access. Modern living at its best.", "Tour_URL__c": "https://example.com/tour/modern-studio", "Hero_Image__c": "https://images.unsplash.com/photo-1600585154084-4e5fe7c39198?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 37.7873686, + "Coordinates__Longitude__s": -122.4055017 }, { "attributes": { @@ -466,7 +500,9 @@ "Description__c": "Sophisticated executive condo with marble finishes, city views, and luxury building amenities. Premium Nob Hill location.", "Tour_URL__c": "https://example.com/tour/executive-suite", "Hero_Image__c": "https://images.unsplash.com/photo-1600607687920-4e2a09cf159d?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 37.7907054, + "Coordinates__Longitude__s": -122.406344 }, { "attributes": { @@ -492,7 +528,9 @@ "Description__c": "Fully restored Victorian mansion with period details, modern conveniences, and beautiful garden. Rare Pacific Heights gem.", "Tour_URL__c": "https://example.com/tour/victorian", "Hero_Image__c": "https://images.unsplash.com/photo-1600566753151-384129cf4e3e?w=800", - "Agent__c": "@AgentRef1" + "Agent__c": "@AgentRef1", + "Coordinates__Latitude__s": 37.7933344, + "Coordinates__Longitude__s": -122.4200908 }, { "attributes": { @@ -518,7 +556,9 @@ "Description__c": "Bright apartment with bay views, hardwood floors, and walking distance to Marina Green. Great neighborhood.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600585154526-990dced4db0d?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7990915, + "Coordinates__Longitude__s": -122.4319382 }, { "attributes": { @@ -544,7 +584,9 @@ "Description__c": "Comfortable townhouse with private patio, attached garage, and close to UC Berkeley. Great for students or faculty.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1603661764782-a3c9812afada?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 37.8774835, + "Coordinates__Longitude__s": -122.2660899 }, { "attributes": { @@ -570,7 +612,9 @@ "Description__c": "Modern open office space perfect for tech startups with high-speed internet and flexible layout. Prime SOMA location.", "Tour_URL__c": "https://example.com/tour/startup-hub", "Hero_Image__c": "https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 37.7751904, + "Coordinates__Longitude__s": -122.4107713 }, { "attributes": { @@ -596,7 +640,9 @@ "Description__c": "Spacious family home with modern kitchen, large basement, and proximity to Golden Gate Park. Perfect for families.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 37.7463285, + "Coordinates__Longitude__s": -122.4732595 }, { "attributes": { @@ -622,7 +668,9 @@ "Description__c": "Contemporary loft in vibrant Mission Bay with waterfront access and modern amenities. Great location near ballpark.", "Tour_URL__c": "https://example.com/tour/mission-loft", "Hero_Image__c": "https://images.unsplash.com/photo-1600607687920-4e2a09cf159d?w=800", - "Agent__c": "@AgentRef1" + "Agent__c": "@AgentRef1", + "Coordinates__Latitude__s": 37.7433669, + "Coordinates__Longitude__s": -122.4666667 }, { "attributes": { @@ -648,7 +696,9 @@ "Description__c": "Elegant apartment in prestigious Pacific Heights with hardwood floors, in-unit laundry, and 24/7 doorman service.", "Tour_URL__c": "https://example.com/tour/pac-heights", "Hero_Image__c": "https://images.unsplash.com/photo-1600585152220-90363fe7e115?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7851601, + "Coordinates__Longitude__s": -122.4351546 } ] } diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/objects/Property__c/fields/Coordinates__c.field-meta.xml b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/objects/Property__c/fields/Coordinates__c.field-meta.xml new file mode 100644 index 0000000..ee39c7f --- /dev/null +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/objects/Property__c/fields/Coordinates__c.field-meta.xml @@ -0,0 +1,12 @@ + + + Coordinates__c + Location coordinates + true + + false + 6 + false + false + Location + diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml index 32a52e3..6efccf6 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml @@ -416,6 +416,11 @@ Property__c.Address__c true + + true + Property__c.Coordinates__c + true + true Property__c.Type__c diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml index 48dfb90..7171762 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml @@ -97,6 +97,11 @@ Property__c.Address__c true + + false + Property__c.Coordinates__c + true + diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.forceignore b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.forceignore similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.forceignore rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.forceignore diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.graphqlrc.yml b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.graphqlrc.yml similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.graphqlrc.yml rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.graphqlrc.yml diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.prettierignore b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.prettierignore similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.prettierignore rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.prettierignore diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.prettierrc b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.prettierrc similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/.prettierrc rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/.prettierrc diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/CHANGELOG.md b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/CHANGELOG.md similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/CHANGELOG.md rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/CHANGELOG.md diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/README.md b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/README.md similarity index 60% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/README.md rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/README.md index a6ed0b5..d599992 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/README.md +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/README.md @@ -1,6 +1,6 @@ -# App React Sample B2E +# Property Management App -A sample B2E (Business-to-Employee) React web app on the Salesforce platform. Includes property management, maintenance requests, tenant applications, a dashboard, and an Agentforce conversation client. Built with React, Vite, TypeScript, and Tailwind/shadcn. +Property management sample React web app on the Salesforce platform. Includes property management, maintenance requests, tenant applications, a dashboard, and an Agentforce conversation client. Built with React, Vite, TypeScript, and Tailwind/shadcn. For project-level details (metadata, deploy, sample data), see the [project README](../../../../../../README.md). diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/codegen.yml b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/codegen.yml similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/codegen.yml rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/codegen.yml diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/components.json b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/components.json similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/components.json rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/components.json diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/e2e/app.spec.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/e2e/app.spec.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/e2e/app.spec.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/e2e/app.spec.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/eslint.config.js b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/eslint.config.js similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/eslint.config.js rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/eslint.config.js diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/index.html b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/index.html similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/index.html rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/index.html diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/package.json b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/package.json similarity index 93% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/package.json rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/package.json index ee184c9..64f3607 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/package.json +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/package.json @@ -15,8 +15,8 @@ "graphql:schema": "node scripts/get-graphql-schema.mjs" }, "dependencies": { - "@salesforce/sdk-data": "^1.112.7", - "@salesforce/webapp-experimental": "^1.112.7", + "@salesforce/sdk-data": "^1.116.6", + "@salesforce/webapp-experimental": "^1.116.6", "@tailwindcss/vite": "^4.1.17", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -43,7 +43,7 @@ "@graphql-eslint/eslint-plugin": "^4.1.0", "@graphql-tools/utils": "^11.0.0", "@playwright/test": "^1.49.0", - "@salesforce/vite-plugin-webapp-experimental": "^1.112.7", + "@salesforce/vite-plugin-webapp-experimental": "^1.116.6", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/playwright.config.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/playwright.config.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/playwright.config.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/playwright.config.ts diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/appreactsampleb2x.webapplication-meta.xml b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/propertymanagementapp.webapplication-meta.xml similarity index 81% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/appreactsampleb2x.webapplication-meta.xml rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/propertymanagementapp.webapplication-meta.xml index eeb947b..1a87842 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/appreactsampleb2x.webapplication-meta.xml +++ b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/propertymanagementapp.webapplication-meta.xml @@ -1,6 +1,6 @@ - appreactsampleb2x + propertymanagementapp A Salesforce web application. true 1 diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/scripts/get-graphql-schema.mjs b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/scripts/get-graphql-schema.mjs similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/scripts/get-graphql-schema.mjs rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/scripts/get-graphql-schema.mjs diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/scripts/rewrite-e2e-assets.mjs b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/scripts/rewrite-e2e-assets.mjs similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/scripts/rewrite-e2e-assets.mjs rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/scripts/rewrite-e2e-assets.mjs diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/applicationSearchService.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/applicationSearchService.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/applicationSearchService.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/applicationSearchService.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/applications.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/applications.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/applications.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/applications.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/distinctApplicationStatus.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/distinctApplicationStatus.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/distinctApplicationStatus.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/distinctApplicationStatus.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/getApplications.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/getApplications.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/getApplications.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/getApplications.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/searchApplications.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/searchApplications.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/searchApplications.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/searchApplications.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/updateApplicationStatus.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/updateApplicationStatus.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/applications/query/updateApplicationStatus.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/applications/query/updateApplicationStatus.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/dashboard.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/dashboard.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/dashboard.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/dashboard.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/query/getDashboardMetrics.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/query/getDashboardMetrics.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/query/getDashboardMetrics.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/query/getDashboardMetrics.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/query/getOpenApplications.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/query/getOpenApplications.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/query/getOpenApplications.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/query/getOpenApplications.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/query/getUserInfo.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/query/getUserInfo.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/dashboard/query/getUserInfo.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/dashboard/query/getUserInfo.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/graphql-operations-types.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/graphql-operations-types.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/graphql-operations-types.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/graphql-operations-types.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/graphqlClient.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/graphqlClient.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/graphqlClient.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/graphqlClient.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/maintenanceRequestSearchService.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/maintenanceRequestSearchService.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/maintenanceRequestSearchService.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/maintenanceRequestSearchService.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/maintenanceRequests.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/maintenanceRequests.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/maintenanceRequests.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/maintenanceRequests.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/distinctMaintenanceRequestPriority.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/distinctMaintenanceRequestPriority.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/distinctMaintenanceRequestPriority.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/distinctMaintenanceRequestPriority.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/distinctMaintenanceRequestStatus.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/distinctMaintenanceRequestStatus.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/distinctMaintenanceRequestStatus.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/distinctMaintenanceRequestStatus.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/distinctMaintenanceRequestType.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/distinctMaintenanceRequestType.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/distinctMaintenanceRequestType.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/distinctMaintenanceRequestType.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/getAllMaintenanceRequests.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/getAllMaintenanceRequests.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/getAllMaintenanceRequests.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/getAllMaintenanceRequests.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/getMaintenanceRequests.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/getMaintenanceRequests.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/getMaintenanceRequests.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/getMaintenanceRequests.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/searchMaintenanceRequests.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/searchMaintenanceRequests.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/searchMaintenanceRequests.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/searchMaintenanceRequests.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/updateMaintenanceStatus.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/updateMaintenanceStatus.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceRequests/query/updateMaintenanceStatus.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceRequests/query/updateMaintenanceStatus.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceWorkers/maintenanceWorkerSearchService.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceWorkers/maintenanceWorkerSearchService.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceWorkers/maintenanceWorkerSearchService.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceWorkers/maintenanceWorkerSearchService.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceWorkers/query/distinctMaintenanceWorkerEmploymentType.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceWorkers/query/distinctMaintenanceWorkerEmploymentType.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceWorkers/query/distinctMaintenanceWorkerEmploymentType.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceWorkers/query/distinctMaintenanceWorkerEmploymentType.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceWorkers/query/searchMaintenanceWorkers.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceWorkers/query/searchMaintenanceWorkers.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/maintenanceWorkers/query/searchMaintenanceWorkers.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/maintenanceWorkers/query/searchMaintenanceWorkers.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/properties.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/properties.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/properties.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/properties.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/propertySearchService.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/propertySearchService.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/propertySearchService.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/propertySearchService.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/distinctPropertyStatus.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/distinctPropertyStatus.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/distinctPropertyStatus.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/distinctPropertyStatus.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/distinctPropertyType.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/distinctPropertyType.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/distinctPropertyType.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/distinctPropertyType.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/getProperties.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/getProperties.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/getProperties.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/getProperties.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/searchProperties.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/searchProperties.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/api/properties/query/searchProperties.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/api/properties/query/searchProperties.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/app.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/app.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/app.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/app.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/appLayout.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/appLayout.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/appLayout.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/appLayout.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/appliances.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/appliances.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/appliances.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/appliances.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/book.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/book.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/book.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/book.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/copy.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/copy.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/copy.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/copy.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/dashboard.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/dashboard.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/dashboard.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/dashboard.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/downgraph.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/downgraph.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/downgraph.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/downgraph.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/electrical.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/electrical.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/electrical.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/electrical.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/files.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/files.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/files.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/files.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/hvac.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/hvac.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/hvac.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/hvac.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/maintenance-worker.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/maintenance-worker.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/maintenance-worker.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/maintenance-worker.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/maintenance.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/maintenance.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/maintenance.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/maintenance.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/pest.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/pest.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/pest.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/pest.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/plumbing.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/plumbing.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/plumbing.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/plumbing.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/properties.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/properties.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/properties.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/properties.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/rocket.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/rocket.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/rocket.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/rocket.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/star.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/star.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/star.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/star.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/support.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/support.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/support.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/support.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/upgraph.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/upgraph.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/upgraph.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/upgraph.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/users.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/users.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/users.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/users.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/zen-logo.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/zen-logo.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/icons/zen-logo.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/icons/zen-logo.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/codey-1.png b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/codey-1.png similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/codey-1.png rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/codey-1.png diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/codey-2.png b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/codey-2.png similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/codey-2.png rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/codey-2.png diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/codey-3.png b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/codey-3.png similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/codey-3.png rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/codey-3.png diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/vibe-codey.svg b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/vibe-codey.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/assets/images/vibe-codey.svg rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/assets/images/vibe-codey.svg diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/AgentforceConversationClient.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/AgentforceConversationClient.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/AgentforceConversationClient.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/AgentforceConversationClient.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/alerts/status-alert.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/alerts/status-alert.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/alerts/status-alert.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/alerts/status-alert.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/applications/ApplicationDetailsModal.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/applications/ApplicationDetailsModal.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/applications/ApplicationDetailsModal.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/applications/ApplicationDetailsModal.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/GlobalSearchBar.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/GlobalSearchBar.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/GlobalSearchBar.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/GlobalSearchBar.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/IssuesDonutChart.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/IssuesDonutChart.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/IssuesDonutChart.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/IssuesDonutChart.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/MaintenanceTable.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/MaintenanceTable.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/MaintenanceTable.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/MaintenanceTable.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/StatCard.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/StatCard.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/dashboard/StatCard.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/dashboard/StatCard.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/FilterRow.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/FilterRow.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/FilterRow.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/FilterRow.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/PageContainer.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/PageContainer.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/PageContainer.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/PageContainer.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/PageHeader.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/PageHeader.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/PageHeader.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/PageHeader.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/TopBar.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/TopBar.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/TopBar.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/TopBar.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/VerticalNav.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/VerticalNav.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layout/VerticalNav.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layout/VerticalNav.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layouts/card-layout.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layouts/card-layout.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/layouts/card-layout.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/layouts/card-layout.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/maintenanceRequests/MaintenanceDetailsModal.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/maintenanceRequests/MaintenanceDetailsModal.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/maintenanceRequests/MaintenanceDetailsModal.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/maintenanceRequests/MaintenanceDetailsModal.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/maintenanceRequests/MaintenanceRequestCard.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/maintenanceRequests/MaintenanceRequestCard.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/maintenanceRequests/MaintenanceRequestCard.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/maintenanceRequests/MaintenanceRequestCard.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/maintenanceWorkers/WorkerDetailsModal.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/maintenanceWorkers/WorkerDetailsModal.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/maintenanceWorkers/WorkerDetailsModal.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/maintenanceWorkers/WorkerDetailsModal.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/properties/PropertyCard.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/properties/PropertyCard.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/properties/PropertyCard.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/properties/PropertyCard.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/properties/PropertyDetailsModal.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/properties/PropertyDetailsModal.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/properties/PropertyDetailsModal.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/properties/PropertyDetailsModal.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/shared/ObjectSearchErrorState.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/shared/ObjectSearchErrorState.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/shared/ObjectSearchErrorState.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/shared/ObjectSearchErrorState.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/shared/UserAvatar.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/shared/UserAvatar.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/shared/UserAvatar.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/shared/UserAvatar.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/alert.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/alert.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/alert.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/alert.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/badge.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/badge.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/badge.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/badge.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/breadcrumb.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/breadcrumb.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/breadcrumb.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/breadcrumb.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/button.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/button.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/button.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/button.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/calendar.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/calendar.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/calendar.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/calendar.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/card.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/card.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/card.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/card.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/checkbox.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/checkbox.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/checkbox.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/checkbox.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/collapsible.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/collapsible.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/collapsible.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/collapsible.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/datePicker.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/datePicker.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/datePicker.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/datePicker.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/dialog.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/dialog.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/dialog.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/dialog.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/field.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/field.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/field.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/field.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/index.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/index.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/index.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/index.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/input.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/input.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/input.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/input.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/label.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/label.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/label.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/label.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/pagination.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/pagination.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/pagination.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/pagination.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/popover.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/popover.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/popover.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/popover.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/select.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/select.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/select.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/select.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/separator.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/separator.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/separator.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/separator.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/skeleton.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/skeleton.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/skeleton.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/skeleton.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/sonner.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/sonner.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/sonner.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/sonner.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/spinner.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/spinner.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/spinner.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/spinner.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/table.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/table.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/table.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/table.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/tabs.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/tabs.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/components/ui/tabs.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/components/ui/tabs.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/accountSearchService.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/accountSearchService.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/accountSearchService.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/accountSearchService.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/distinctAccountIndustries.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/distinctAccountIndustries.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/distinctAccountIndustries.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/distinctAccountIndustries.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/distinctAccountTypes.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/distinctAccountTypes.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/distinctAccountTypes.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/distinctAccountTypes.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/getAccountDetail.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/getAccountDetail.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/getAccountDetail.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/getAccountDetail.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/searchAccounts.graphql b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/searchAccounts.graphql similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/api/query/searchAccounts.graphql rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/api/query/searchAccounts.graphql diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/pages/AccountObjectDetailPage.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/pages/AccountObjectDetailPage.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/pages/AccountObjectDetailPage.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/pages/AccountObjectDetailPage.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/pages/AccountSearch.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/pages/AccountSearch.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/pages/AccountSearch.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/pages/AccountSearch.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/pages/Home.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/pages/Home.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/__examples__/pages/Home.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/__examples__/pages/Home.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/api/objectSearchService.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/api/objectSearchService.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/api/objectSearchService.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/api/objectSearchService.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/ActiveFilters.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/ActiveFilters.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/ActiveFilters.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/ActiveFilters.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/FilterContext.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/FilterContext.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/FilterContext.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/FilterContext.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/ObjectBreadcrumb.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/ObjectBreadcrumb.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/ObjectBreadcrumb.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/ObjectBreadcrumb.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/PaginationControls.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/PaginationControls.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/PaginationControls.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/PaginationControls.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/SearchBar.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/SearchBar.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/SearchBar.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/SearchBar.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/SortControl.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/SortControl.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/SortControl.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/SortControl.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/BooleanFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/BooleanFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/BooleanFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/BooleanFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/DateFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/DateFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/DateFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/DateFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/DateRangeFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/DateRangeFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/DateRangeFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/DateRangeFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/MultiSelectFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/MultiSelectFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/MultiSelectFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/MultiSelectFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/NumericRangeFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/NumericRangeFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/NumericRangeFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/NumericRangeFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/SearchFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/SearchFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/SearchFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/SearchFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/SelectFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/SelectFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/SelectFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/SelectFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/TextFilter.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/TextFilter.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/components/filters/TextFilter.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/components/filters/TextFilter.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/hooks/useAsyncData.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/hooks/useAsyncData.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/hooks/useAsyncData.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/hooks/useAsyncData.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/hooks/useCachedAsyncData.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/hooks/useCachedAsyncData.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/hooks/useCachedAsyncData.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/hooks/useCachedAsyncData.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/hooks/useObjectSearchParams.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/hooks/useObjectSearchParams.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/hooks/useObjectSearchParams.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/hooks/useObjectSearchParams.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/debounce.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/debounce.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/debounce.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/debounce.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/fieldUtils.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/fieldUtils.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/fieldUtils.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/fieldUtils.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/filterUtils.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/filterUtils.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/filterUtils.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/filterUtils.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/sortUtils.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/sortUtils.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/features/object-search/utils/sortUtils.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/features/object-search/utils/sortUtils.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/index.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/index.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/index.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/index.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/constants.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/lib/constants.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/constants.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/lib/constants.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/routeConfig.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/lib/routeConfig.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/routeConfig.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/lib/routeConfig.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/utils.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/lib/utils.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/lib/utils.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/lib/utils.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/navigationMenu.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/navigationMenu.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/navigationMenu.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/navigationMenu.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/ApplicationSearch.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/ApplicationSearch.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/ApplicationSearch.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/ApplicationSearch.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/Home.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/Home.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/Home.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/Home.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/MaintenanceRequestSearch.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/MaintenanceRequestSearch.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/MaintenanceRequestSearch.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/MaintenanceRequestSearch.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/MaintenanceWorkerSearch.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/MaintenanceWorkerSearch.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/MaintenanceWorkerSearch.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/MaintenanceWorkerSearch.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/NotFound.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/NotFound.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/NotFound.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/NotFound.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/PropertySearch.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/PropertySearch.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/PropertySearch.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/PropertySearch.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/TestAccPage.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/TestAccPage.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/pages/TestAccPage.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/pages/TestAccPage.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/router-utils.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/router-utils.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/router-utils.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/router-utils.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/routes.tsx b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/routes.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/routes.tsx rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/routes.tsx diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/styles/global.css b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/styles/global.css similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/styles/global.css rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/styles/global.css diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/types/conversation.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/types/conversation.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/src/types/conversation.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/src/types/conversation.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/tsconfig.json b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/tsconfig.json similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/tsconfig.json rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/tsconfig.json diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/tsconfig.node.json b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/tsconfig.node.json similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/tsconfig.node.json rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/tsconfig.node.json diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vite-env.d.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vite-env.d.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vite-env.d.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vite-env.d.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vite.config.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vite.config.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vite.config.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vite.config.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vitest-env.d.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vitest-env.d.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vitest-env.d.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vitest-env.d.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vitest.config.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vitest.config.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vitest.config.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vitest.config.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vitest.setup.ts b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vitest.setup.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/vitest.setup.ts rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/vitest.setup.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/webapplication.json b/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/webapplication.json similarity index 100% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/webapplication.json rename to samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/propertymanagementapp/webapplication.json diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/package-lock.json b/samples/webapp-template-app-react-sample-b2e-experimental/package-lock.json index b98c1a4..326182b 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/package-lock.json +++ b/samples/webapp-template-app-react-sample-b2e-experimental/package-lock.json @@ -1,12 +1,12 @@ { "name": "@salesforce/webapp-template-base-sfdx-project-experimental", - "version": "1.112.7", + "version": "1.116.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@salesforce/webapp-template-base-sfdx-project-experimental", - "version": "1.112.7", + "version": "1.116.6", "license": "SEE LICENSE IN LICENSE.txt", "devDependencies": { "@lwc/eslint-plugin-lwc": "^3.3.0", diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/package.json b/samples/webapp-template-app-react-sample-b2e-experimental/package.json index f421ec5..9d48005 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/package.json +++ b/samples/webapp-template-app-react-sample-b2e-experimental/package.json @@ -1,6 +1,6 @@ { "name": "@salesforce/webapp-template-base-sfdx-project-experimental", - "version": "1.112.7", + "version": "1.116.6", "description": "Base SFDX project template", "license": "SEE LICENSE IN LICENSE.txt", "publishConfig": { diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/scripts/graphql-search.sh b/samples/webapp-template-app-react-sample-b2e-experimental/scripts/graphql-search.sh index a9863de..e11f41e 100755 --- a/samples/webapp-template-app-react-sample-b2e-experimental/scripts/graphql-search.sh +++ b/samples/webapp-template-app-react-sample-b2e-experimental/scripts/graphql-search.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +set -euo pipefail # exit on error (-e), undefined vars (-u), and propagate pipeline failures (-o pipefail) # graphql-search.sh β€” Look up one or more Salesforce entities in schema.graphql. # # Run from the SFDX project root (where schema.graphql lives): @@ -10,11 +11,13 @@ # bash scripts/graphql-search.sh --schema ./other/schema.graphql Account Contact # # Output sections per entity: -# 1. Type definition β€” all fields and relationships -# 2. Filter options β€” _Filter input (for `where:`) -# 3. Sort options β€” _OrderBy input (for `orderBy:`) -# 4. Create input β€” CreateRepresentation (for create mutations) -# 5. Update input β€” UpdateRepresentation (for update mutations) +# 1. Type definition β€” all fields and relationships +# 2. Filter options β€” _Filter input (for `where:`) +# 3. Sort options β€” _OrderBy input (for `orderBy:`) +# 4. Create mutation wrapper β€” CreateInput +# 5. Create mutation fields β€” CreateRepresentation (for create mutations) +# 6. Update mutation wrapper β€” UpdateInput +# 7. Update mutation fields β€” UpdateRepresentation (for update mutations) SCHEMA="./schema.graphql" @@ -62,6 +65,19 @@ if [ ! -f "$SCHEMA" ]; then exit 1 fi +if [ ! -r "$SCHEMA" ]; then + echo "ERROR: schema.graphql is not readable at $SCHEMA" + echo " Check file permissions: ls -la $SCHEMA" + exit 1 +fi + +if [ ! -s "$SCHEMA" ]; then + echo "ERROR: schema.graphql is empty at $SCHEMA" + echo " Regenerate it from the webapp dir:" + echo " cd force-app/main/default/webapplications/ && npm run graphql:schema" + exit 1 +fi + # ── Helper: extract lines from a grep match through the closing brace ──────── # Prints up to MAX_LINES lines after (and including) the first match of PATTERN. # Uses a generous line count β€” blocks are always closed by a "}" line. @@ -72,68 +88,104 @@ extract_block() { local max_lines="$3" local match - match=$(grep -nE "$pattern" "$SCHEMA" | head -1) + local grep_exit=0 + match=$(grep -nE "$pattern" "$SCHEMA" | head -1) || grep_exit=$? + + if [ "$grep_exit" -eq 2 ]; then + echo " ERROR: grep failed on pattern: $pattern" >&2 + return 1 + fi if [ -z "$match" ]; then echo " (not found: $pattern)" - return + return 3 fi echo "### $label" grep -E "$pattern" "$SCHEMA" -A "$max_lines" | \ awk '/^\}$/{print; exit} {print}' | \ - head -n "$max_lines" + head -n "$max_lines" || true echo "" } # ── Main loop ──────────────────────────────────────────────────────────────── for ENTITY in "$@"; do + # Validate entity name: must be a valid PascalCase identifier (letters, digits, underscores) + if [[ ! "$ENTITY" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then + echo "ERROR: Invalid entity name: '$ENTITY'" + echo " Entity names must start with a letter or underscore, followed by letters, digits, or underscores." + echo " Examples: Account, My_Custom_Object__c" + continue + fi + echo "" echo "======================================================================" echo " SCHEMA LOOKUP: $ENTITY" echo "======================================================================" echo "" + found=0 + + # Helper: call extract_block, track matches, surface errors + try_extract() { + local rc=0 + extract_block "$@" || rc=$? + if [ "$rc" -eq 0 ]; then + found=$((found + 1)) + elif [ "$rc" -eq 1 ]; then + echo " Aborting lookup for '$ENTITY' due to grep error" >&2 + fi + # rc=3 is not-found β€” continue silently (already printed by extract_block) + } + # 1. Type definition β€” all fields and relationships - extract_block \ + try_extract \ "Type definition β€” fields and relationships" \ "^type ${ENTITY} implements Record" \ 200 # 2. Filter input β€” used in `where:` arguments - extract_block \ + try_extract \ "Filter options β€” use in where: { ... }" \ "^input ${ENTITY}_Filter" \ 100 # 3. OrderBy input β€” used in `orderBy:` arguments - extract_block \ + try_extract \ "Sort options β€” use in orderBy: { ... }" \ "^input ${ENTITY}_OrderBy" \ 60 - # 4. Create mutation inputs - extract_block \ + # 4. Create mutation wrapper + try_extract \ "Create mutation wrapper β€” ${ENTITY}CreateInput" \ "^input ${ENTITY}CreateInput" \ 10 - extract_block \ + # 5. Create mutation fields + try_extract \ "Create mutation fields β€” ${ENTITY}CreateRepresentation" \ "^input ${ENTITY}CreateRepresentation" \ 100 - # 5. Update mutation inputs - extract_block \ + # 6. Update mutation wrapper + try_extract \ "Update mutation wrapper β€” ${ENTITY}UpdateInput" \ "^input ${ENTITY}UpdateInput" \ 10 - extract_block \ + # 7. Update mutation fields + try_extract \ "Update mutation fields β€” ${ENTITY}UpdateRepresentation" \ "^input ${ENTITY}UpdateRepresentation" \ 100 + if [ "$found" -eq 0 ]; then + echo "WARNING: No schema entries found for '$ENTITY'." + echo " - Names are PascalCase (e.g., 'Account' not 'account')" + echo " - Custom objects may need deployment first" + fi + echo "" done diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/scripts/sf-project-setup.mjs b/samples/webapp-template-app-react-sample-b2e-experimental/scripts/sf-project-setup.mjs index 561fa39..95dcbba 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/scripts/sf-project-setup.mjs +++ b/samples/webapp-template-app-react-sample-b2e-experimental/scripts/sf-project-setup.mjs @@ -60,7 +60,7 @@ const webappDir = discoverWebappDir(); console.log('SFDX project root:', ROOT); console.log('Web app directory:', webappDir); -run('npm install', 'npm', ['install'], { cwd: webappDir }); +run('npm install', 'npm', ['install', '--registry', 'https://registry.npmjs.org/'], { cwd: webappDir }); run('npm run build', 'npm', ['run', 'build'], { cwd: webappDir }); console.log('\n--- Launching dev server (Ctrl+C to stop) ---\n'); run('npm run dev', 'npm', ['run', 'dev'], { cwd: webappDir }); diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/.a4drules/webapp-data.md b/samples/webapp-template-app-react-sample-b2x-experimental/.a4drules/webapp-data.md deleted file mode 100644 index 37483a3..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/.a4drules/webapp-data.md +++ /dev/null @@ -1,353 +0,0 @@ -# Salesforce Data Access - -- **Fetch or display Salesforce data** β€” Query records (Account, Contact, Opportunity, custom objects) to show in a component -- **Create, update, or delete records** β€” Perform mutations on Salesforce data -- **Add data fetching to a component** β€” Wire up a React component to Salesforce data -- **Call REST APIs** β€” Use Connect REST, Apex REST, or UI API endpoints -- **Explore the org schema** β€” Discover available objects, fields, or relationships - -## Data SDK Requirement - -> **All Salesforce data access MUST use the Data SDK** (`@salesforce/sdk-data`). The SDK handles authentication, CSRF, and base URL resolution. Never use `fetch()` or `axios` directly. - -```typescript -import { createDataSDK, gql } from "@salesforce/sdk-data"; - -const sdk = await createDataSDK(); - -// GraphQL for record queries/mutations (PREFERRED) -const response = await sdk.graphql?.(query, variables); - -// REST for Connect REST, Apex REST, UI API (when GraphQL insufficient) -const res = await sdk.fetch?.("/services/apexrest/my-resource"); -``` - -**Always use optional chaining** (`sdk.graphql?.()`, `sdk.fetch?.()`) β€” these methods may be undefined in some surfaces. - -## Supported APIs - -**Only the following APIs are permitted.** Any endpoint not listed here must not be used. - -| API | Method | Endpoints / Use Case | -|-----|--------|----------------------| -| GraphQL | `sdk.graphql` | All record queries and mutations via `uiapi { }` namespace | -| UI API REST | `sdk.fetch` | `/services/data/v{ver}/ui-api/records/{id}` β€” record metadata when GraphQL is insufficient | -| Apex REST | `sdk.fetch` | `/services/apexrest/{resource}` β€” custom server-side logic, aggregates, multi-step transactions | -| Connect REST | `sdk.fetch` | `/services/data/v{ver}/connect/file/upload/config` β€” file upload config | -| Einstein LLM | `sdk.fetch` | `/services/data/v{ver}/einstein/llm/prompt/generations` β€” AI text generation | - -**Not supported:** - -- **Enterprise REST query endpoint** (`/services/data/v*/query` with SOQL) β€” blocked at the proxy level. Use GraphQL for record reads; use Apex REST if server-side SOQL aggregates are required. -- **Aura-enabled Apex** (`@AuraEnabled`) β€” an LWC/Aura pattern with no invocation path from React webapps. -- **Chatter API** (`/chatter/users/me`) β€” use `uiapi { currentUser { ... } }` in a GraphQL query instead. -- **Any other Salesforce REST endpoint** not listed in the supported table above. - -## Decision: GraphQL vs REST - -| Need | Method | Example | -|------|--------|---------| -| Query/mutate records | `sdk.graphql` | Account, Contact, custom objects | -| Current user info | `sdk.graphql` | `uiapi { currentUser { Id Name { value } } }` | -| UI API record metadata | `sdk.fetch` | `/ui-api/records/{id}` | -| Connect REST | `sdk.fetch` | `/connect/file/upload/config` | -| Apex REST | `sdk.fetch` | `/services/apexrest/auth/login` | -| Einstein LLM | `sdk.fetch` | `/einstein/llm/prompt/generations` | - -**GraphQL is preferred** for record operations. Use REST only when GraphQL doesn't cover the use case. - ---- - -## GraphQL Workflow - -### Step 1: Acquire Schema - -The `schema.graphql` file (265K+ lines) is the source of truth. **Never open or parse it directly.** - -1. Check if `schema.graphql` exists at the SFDX project root -2. If missing, run from the **webapp dir**: `npm run graphql:schema` -3. Custom objects appear only after metadata is deployed - -### Step 2: Look Up Entity Schema - -Map user intent to PascalCase names ("accounts" β†’ `Account`), then **run the search script from the project root**: - -```bash -# From project root β€” look up all relevant schema info for one or more entities -bash scripts/graphql-search.sh Account - -# Multiple entities at once -bash scripts/graphql-search.sh Account Contact Opportunity -``` - -The script outputs five sections per entity: -1. **Type definition** β€” all queryable fields and relationships -2. **Filter options** β€” available fields for `where:` conditions -3. **Sort options** β€” available fields for `orderBy:` -4. **Create input** β€” fields accepted by create mutations -5. **Update input** β€” fields accepted by update mutations - -Use this output to determine exact field names before writing any query or mutation. **Maximum 2 script runs.** If the entity still can't be found, ask the user β€” the object may not be deployed. - -### Step 3: Generate Query - -Use the templates below. Every field name **must** be verified from the script output in Step 2. - -#### Read Query Template - -```graphql -query GetAccounts { - uiapi { - query { - Account(where: { Industry: { eq: "Technology" } }, first: 10) { - edges { - node { - Id - Name @optional { value } - Industry @optional { value } - # Parent relationship - Owner @optional { Name { value } } - # Child relationship - Contacts @optional { - edges { node { Name @optional { value } } } - } - } - } - } - } - } -} -``` - -**FLS Resilience**: Apply `@optional` to all record fields. The server omits inaccessible fields instead of failing. Consuming code must use optional chaining: - -```typescript -const name = node.Name?.value ?? ""; -``` - -#### Mutation Template - -```graphql -mutation CreateAccount($input: AccountCreateInput!) { - uiapi { - AccountCreate(input: $input) { - Record { Id Name { value } } - } - } -} -``` - -**Mutation constraints:** -- Create: Include required fields, only `createable` fields, no child relationships -- Update: Include `Id`, only `updateable` fields -- Delete: Include `Id` only - -#### Object Metadata & Picklist Values - -Use `uiapi { objectInfos(...) }` to fetch field metadata or picklist values. Pass **either** `apiNames` or `objectInfoInputs` β€” never both in the same query. - -**Object metadata** (field labels, data types, CRUD flags): - -```typescript -const GET_OBJECT_INFO = gql` - query GetObjectInfo($apiNames: [String!]!) { - uiapi { - objectInfos(apiNames: $apiNames) { - ApiName - label - labelPlural - fields { - ApiName - label - dataType - updateable - createable - } - } - } - } -`; - -const sdk = await createDataSDK(); -const response = await sdk.graphql?.(GET_OBJECT_INFO, { apiNames: ["Account"] }); -const objectInfos = response?.data?.uiapi?.objectInfos ?? []; -``` - -**Picklist values** (use `objectInfoInputs` + `... on PicklistField` inline fragment): - -```typescript -const GET_PICKLIST_VALUES = gql` - query GetPicklistValues($objectInfoInputs: [ObjectInfoInput!]!) { - uiapi { - objectInfos(objectInfoInputs: $objectInfoInputs) { - ApiName - fields { - ApiName - ... on PicklistField { - picklistValuesByRecordTypeIDs { - recordTypeID - picklistValues { - label - value - } - } - } - } - } - } - } -`; - -const response = await sdk.graphql?.(GET_PICKLIST_VALUES, { - objectInfoInputs: [{ objectApiName: "Account" }], -}); -const fields = response?.data?.uiapi?.objectInfos?.[0]?.fields ?? []; -``` - -### Step 4: Validate & Test - -1. **Lint**: `npx eslint ` from webapp dir -2. **Test**: Ask user before testing. For mutations, request input values β€” never fabricate data. - -**If ESLint reports a GraphQL error** (e.g. `Cannot query field`, `Unknown type`, `Unknown argument`), the field or type name is wrong. Re-run the schema search script to find the correct name β€” do not guess: - -```bash -# From project root β€” re-check the entity that caused the error -bash scripts/graphql-search.sh -``` - -Then fix the query using the exact names from the script output. - ---- - -## Webapp Integration (React) - -```typescript -import { createDataSDK, gql } from "@salesforce/sdk-data"; - -const GET_ACCOUNTS = gql` - query GetAccounts { - uiapi { - query { - Account(first: 10) { - edges { - node { - Id - Name @optional { value } - Industry @optional { value } - } - } - } - } - } - } -`; - -const sdk = await createDataSDK(); -const response = await sdk.graphql?.(GET_ACCOUNTS); - -if (response?.errors?.length) { - throw new Error(response.errors.map(e => e.message).join("; ")); -} - -const accounts = response?.data?.uiapi?.query?.Account?.edges?.map(e => e.node) ?? []; - ---- - -## REST API Patterns - -Use `sdk.fetch` when GraphQL is insufficient. See the [Supported APIs](#supported-apis) table for the full allowlist. - -```typescript -declare const __SF_API_VERSION__: string; -const API_VERSION = typeof __SF_API_VERSION__ !== "undefined" ? __SF_API_VERSION__ : "65.0"; - -// Connect β€” file upload config -const res = await sdk.fetch?.(`/services/data/v${API_VERSION}/connect/file/upload/config`); - -// Apex REST (no version in path) -const res = await sdk.fetch?.("/services/apexrest/auth/login", { - method: "POST", - body: JSON.stringify({ email, password }), - headers: { "Content-Type": "application/json" }, -}); - -// UI API β€” record with metadata (prefer GraphQL for simple reads) -const res = await sdk.fetch?.(`/services/data/v${API_VERSION}/ui-api/records/${recordId}`); - -// Einstein LLM -const res = await sdk.fetch?.(`/services/data/v${API_VERSION}/einstein/llm/prompt/generations`, { - method: "POST", - body: JSON.stringify({ promptTextorId: prompt }), -}); -``` - -**Current user**: Do not use Chatter (`/chatter/users/me`). Use GraphQL instead: - -```typescript -const GET_CURRENT_USER = gql` - query CurrentUser { - uiapi { currentUser { Id Name { value } } } - } -`; -const response = await sdk.graphql?.(GET_CURRENT_USER); -``` - ---- - -## Directory Structure - -``` -/ ← SFDX project root -β”œβ”€β”€ schema.graphql ← grep target (lives here) -β”œβ”€β”€ sfdx-project.json -└── force-app/main/default/webapplications// ← webapp dir - β”œβ”€β”€ package.json ← npm scripts - └── src/ -``` - -| Command | Run From | Why | -|---------|----------|-----| -| `npm run graphql:schema` | webapp dir | Script in webapp's package.json | -| `npx eslint ` | webapp dir | Reads eslint.config.js | -| `bash scripts/graphql-search.sh ` | project root | Schema lookup | -| `sf api request rest` | project root | Needs sfdx-project.json | - ---- - -## Quick Reference - -### Schema Lookup (from project root) - -Run the search script to get all relevant schema info in one step: - -```bash -bash scripts/graphql-search.sh -``` - -| Script Output Section | Used For | -|-----------------------|----------| -| Type definition | Field names, parent/child relationships | -| Filter options | `where:` conditions | -| Sort options | `orderBy:` | -| CreateRepresentation | Create mutation field list | -| UpdateRepresentation | Update mutation field list | - -### Error Categories - -| Error Contains | Resolution | -|----------------|------------| -| `Cannot query field` | Field name is wrong β€” run `graphql-search.sh ` and use the exact name from the Type definition section | -| `Unknown type` | Type name is wrong β€” run `graphql-search.sh ` to confirm the correct PascalCase entity name | -| `Unknown argument` | Argument name is wrong β€” run `graphql-search.sh ` and check Filter or OrderBy sections | -| `invalid syntax` | Fix syntax per error message | -| `validation error` | Field name is wrong β€” run `graphql-search.sh ` to verify | -| `VariableTypeMismatch` | Correct argument type from schema | -| `invalid cross reference id` | Entity deleted β€” ask for valid Id | - -### Checklist - -- [ ] All field names verified via search script (Step 2) -- [ ] `@optional` applied to record fields (reads) -- [ ] Optional chaining in consuming code -- [ ] Lint passes: `npx eslint ` diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/.a4drules/webapp-ui.md b/samples/webapp-template-app-react-sample-b2x-experimental/.a4drules/webapp-ui.md deleted file mode 100644 index c170c8e..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/.a4drules/webapp-ui.md +++ /dev/null @@ -1,16 +0,0 @@ -# UI Platform Rule - -**All new UI must be built as a Salesforce Web Application.** - -When any task involves creating a new UI, frontend, page, dashboard, form, or user-facing feature: - -1. Use `sf webapp generate` to scaffold the web app inside the SFDX project β€” do not use `create-react-app`, standalone Vite, or any other scaffold. -2. The app must live under `/webapplications//` as a WebApplication bundle. -3. Do not build new UIs as LWC components, Aura components, or Visualforce pages. - -For setup from the project root, use `node scripts/setup-cli.mjs --help` and the options documented there. - -## Data Access (MUST FOLLOW) - -- **Never hardcode data in the app.** All data displayed in the UI must come from live Salesforce data fetching β€” no static arrays, mock objects, or placeholder values in production code. -- **Follow `.a4drules/webapp-data.md`** before writing any data access code. All implementation must match those rules (Data SDK, supported APIs, GraphQL workflow). diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/.version b/samples/webapp-template-app-react-sample-b2x-experimental/.version index 2d54e63..f31f902 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/.version +++ b/samples/webapp-template-app-react-sample-b2x-experimental/.version @@ -1 +1 @@ -1.112.7 +1.116.6 diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/CHANGELOG.md b/samples/webapp-template-app-react-sample-b2x-experimental/CHANGELOG.md index 21d6adb..1c3dfdd 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/CHANGELOG.md +++ b/samples/webapp-template-app-react-sample-b2x-experimental/CHANGELOG.md @@ -3,6 +3,116 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.116.6](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.5...v1.116.6) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.5](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.4...v1.116.5) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.4](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.3...v1.116.4) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.3](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.2...v1.116.3) (2026-03-26) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.116.2](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.1...v1.116.2) (2026-03-25) + + +### Bug Fixes + +* use public npm registry in sf-project-setup @W-21746844@ ([#355](https://github.com/salesforce-experience-platform-emu/webapps/issues/355)) ([4047d1e](https://github.com/salesforce-experience-platform-emu/webapps/commit/4047d1e0b79fcda14badc5a1826da2ae7ef68a68)) + + + + + +## [1.116.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.116.0...v1.116.1) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.116.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.115.0...v1.116.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.115.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.114.0...v1.115.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.114.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.113.0...v1.114.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +# [1.113.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.10...v1.113.0) (2026-03-25) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.112.10](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.9...v1.112.10) (2026-03-24) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + +## [1.112.9](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.8...v1.112.9) (2026-03-24) + + +### Bug Fixes + +* address PR [#81](https://github.com/salesforce-experience-platform-emu/webapps/issues/81) review feedback on graphql-search.sh ([#345](https://github.com/salesforce-experience-platform-emu/webapps/issues/345)) ([54a6e59](https://github.com/salesforce-experience-platform-emu/webapps/commit/54a6e590afd1923a12f776eba6b6cc147729c697)) + + + + + +## [1.112.8](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.7...v1.112.8) (2026-03-24) + +**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental + + + + + ## [1.112.7](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.112.6...v1.112.7) (2026-03-23) **Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/README.md b/samples/webapp-template-app-react-sample-b2x-experimental/README.md index 6b29397..e3dd3fb 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/README.md +++ b/samples/webapp-template-app-react-sample-b2x-experimental/README.md @@ -1,12 +1,12 @@ -# App React Sample B2X +# Property Rental App -A B2X (Business-to-Consumer) sample React web app for Salesforce Experience Cloud. Demonstrates property listings, maintenance requests, and a dashboard with an app shell designed for external-facing deployment. Built with React, Vite, TypeScript, and Tailwind/shadcn. +A property rental sample React web app for Salesforce Experience Cloud. Demonstrates property listings, maintenance requests, and a dashboard with an app shell designed for external-facing deployment. Built with React, Vite, TypeScript, and Tailwind/shadcn. ## What's included | Path | Description | | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `force-app/main/default/webapplications/appreactsampleb2x/` | React web app (source, config, tests) | +| `force-app/main/default/webapplications/propertyrentalapp/` | React web app (source, config, tests) | | `force-app/main/default/objects/` | 17 custom objects β€” Agent\_\_c, Application\_\_c, KPI_Snapshot\_\_c, Lease\_\_c, Maintenance_Request\_\_c, Maintenance_Worker\_\_c, Notification\_\_c, Payment\_\_c, Property\_\_c, Property_Cost\_\_c, Property_Feature\_\_c, Property_Image\_\_c, Property_Listing\_\_c, Property_Management_Company\_\_c, Property_Owner\_\_c, Property_Sale\_\_c, Tenant\_\_c | | `force-app/main/default/layouts/` | Page layouts for each custom object | | `force-app/main/default/permissionsets/` | `Property_Management_Access` permission set | @@ -23,26 +23,26 @@ A B2X (Business-to-Consumer) sample React web app for Salesforce Experience Clou Navigate to the web app and install dependencies: ```bash -cd force-app/main/default/webapplications/appreactsampleb2x +cd force-app/main/default/webapplications/propertyrentalapp npm install npm run dev ``` -Opens at http://localhost:5173 by default. For build and test instructions, see the [web app README](force-app/main/default/webapplications/appreactsampleb2x/README.md). +Opens at http://localhost:5173 by default. For build and test instructions, see the [web app README](force-app/main/default/webapplications/propertyrentalapp/README.md). ## Deploy ### Deploy everything (metadata + Experience Cloud site + web app) ```bash -cd force-app/main/default/webapplications/appreactsampleb2x && npm install && npm run build && cd - +cd force-app/main/default/webapplications/propertyrentalapp && npm install && npm run build && cd - sf project deploy start --source-dir force-app --target-org ``` ### Deploy the web app only ```bash -cd force-app/main/default/webapplications/appreactsampleb2x && npm install && npm run build && cd - +cd force-app/main/default/webapplications/propertyrentalapp && npm install && npm run build && cd - sf project deploy start --source-dir force-app/main/default/webapplications --target-org ``` diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/data/Property__c.json b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/data/Property__c.json index ae16e95..4dcff23 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/data/Property__c.json +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/data/Property__c.json @@ -24,7 +24,9 @@ "Description__c": "Modern 2-bedroom apartment with stunning city views. Features include balcony, in-unit washer/dryer, and central AC. Great location near restaurants and shopping.", "Tour_URL__c": "https://example.com/tour/sunset-4b", "Hero_Image__c": "https://images.unsplash.com/photo-1522708323590-d24dbb6b0267?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 34.1007222, + "Coordinates__Longitude__s": -118.329413 }, { "attributes": { @@ -50,7 +52,9 @@ "Description__c": "Spacious downtown loft with high ceilings and modern finishes. Building amenities include gym, pool, and secured parking.", "Tour_URL__c": "https://example.com/tour/downtown-loft", "Hero_Image__c": "https://images.unsplash.com/photo-1554995207-c18c203602cb?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 34.052235, + "Coordinates__Longitude__s": -118.243683 }, { "attributes": { @@ -76,7 +80,9 @@ "Description__c": "Cozy garden studio in quiet neighborhood. Features private balcony and additional storage unit. No pets allowed.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1560448204-e02f11c3d0e2?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 34.18045, + "Coordinates__Longitude__s": -118.3101988 }, { "attributes": { @@ -102,7 +108,9 @@ "Description__c": "Elegant 3-bedroom penthouse in gated community with luxury amenities. Currently under maintenance, available mid-December.", "Tour_URL__c": "https://example.com/tour/luxury-penthouse", "Hero_Image__c": "https://images.unsplash.com/photo-1512917774080-9991f1c4c750?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 33.7777777, + "Coordinates__Longitude__s": -84.39 }, { "attributes": { @@ -128,7 +136,9 @@ "Description__c": "Modern high-rise apartment with floor-to-ceiling windows and stunning sunset views. Building features 24/7 doorman.", "Tour_URL__c": "https://example.com/tour/sunset-towers", "Hero_Image__c": "https://images.unsplash.com/photo-1545324418-cc1a3fa10c00?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 34.0914289, + "Coordinates__Longitude__s": -118.3617537 }, { "attributes": { @@ -154,7 +164,9 @@ "Description__c": "Stunning beachfront home with direct ocean access, modern kitchen, panoramic views, and private pool. Premium property.", "Tour_URL__c": "https://example.com/tour/ocean-villa", "Hero_Image__c": "https://images.unsplash.com/photo-1564013799919-ab600027ffc6?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 34.022352, + "Coordinates__Longitude__s": -118.4911912 }, { "attributes": { @@ -180,7 +192,9 @@ "Description__c": "Modern condo in Silicon Valley with smart home features, rooftop deck, and premium amenities. Perfect for tech professionals.", "Tour_URL__c": "https://example.com/tour/tech-hub", "Hero_Image__c": "https://images.unsplash.com/photo-1580587771525-78b9dba3b914?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.4446046, + "Coordinates__Longitude__s": -122.1595598 }, { "attributes": { @@ -206,7 +220,9 @@ "Description__c": "Charming historic brownstone with original hardwood floors, exposed brick, and modern updates. Rare Telegraph Hill location.", "Tour_URL__c": "https://example.com/tour/brownstone", "Hero_Image__c": "https://images.unsplash.com/photo-1568605114967-8130f3a36994?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 37.8022765, + "Coordinates__Longitude__s": -122.4062978 }, { "attributes": { @@ -232,7 +248,9 @@ "Description__c": "Bright studio in trendy Marina District with city views and modern amenities. Walking distance to shops and restaurants.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1502672023488-70e25813eb80?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 37.7990915, + "Coordinates__Longitude__s": -122.4319382 }, { "attributes": { @@ -258,7 +276,9 @@ "Description__c": "Magnificent estate with pool, tennis court, wine cellar, and breathtaking city views. Ultimate luxury living.", "Tour_URL__c": "https://example.com/tour/beverly-estate", "Hero_Image__c": "https://images.unsplash.com/photo-1613490493576-7fde63acd811?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 34.0897964, + "Coordinates__Longitude__s": -118.392847 }, { "attributes": { @@ -284,7 +304,9 @@ "Description__c": "Modern office space with open floor plan, conference rooms, and panoramic bay views. Premium downtown location.", "Tour_URL__c": "https://example.com/tour/market-office", "Hero_Image__c": "https://images.unsplash.com/photo-1497366216548-37526070297c?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7886951, + "Coordinates__Longitude__s": -122.397125 }, { "attributes": { @@ -310,7 +332,9 @@ "Description__c": "Beautiful wine country home with vineyard views, gourmet kitchen, and outdoor entertainment area. Perfect for wine enthusiasts.", "Tour_URL__c": "https://example.com/tour/napa-retreat", "Hero_Image__c": "https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 38.3134748, + "Coordinates__Longitude__s": -122.2863822 }, { "attributes": { @@ -336,7 +360,9 @@ "Description__c": "Contemporary townhome near tech companies with private garage and community amenities. Ideal for families.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 37.407126, + "Coordinates__Longitude__s": -122.0883981 }, { "attributes": { @@ -362,7 +388,9 @@ "Description__c": "Converted warehouse loft with soaring ceilings, exposed beams, and artistic neighborhood vibe.", "Tour_URL__c": "https://example.com/tour/artistic-loft", "Hero_Image__c": "https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?w=800", - "Agent__c": "@AgentRef1" + "Agent__c": "@AgentRef1", + "Coordinates__Latitude__s": 37.8034013, + "Coordinates__Longitude__s": -122.2798006 }, { "attributes": { @@ -388,7 +416,9 @@ "Description__c": "Ultra-luxury penthouse with concierge service, gym, and incredible bay and city views. Currently under maintenance.", "Tour_URL__c": "https://example.com/tour/luxury-highrise", "Hero_Image__c": "https://images.unsplash.com/photo-1737898378296-94dc316cd443?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7886951, + "Coordinates__Longitude__s": -122.397125 }, { "attributes": { @@ -414,7 +444,9 @@ "Description__c": "Charming family home with large backyard, updated kitchen, and excellent school district. Perfect for families.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600566753190-17f0baa2a6c3?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 37.4863302, + "Coordinates__Longitude__s": -122.2247151 }, { "attributes": { @@ -440,7 +472,9 @@ "Description__c": "Brand new studio with smart home features, in-unit laundry, and rooftop terrace access. Modern living at its best.", "Tour_URL__c": "https://example.com/tour/modern-studio", "Hero_Image__c": "https://images.unsplash.com/photo-1600585154084-4e5fe7c39198?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 37.7873686, + "Coordinates__Longitude__s": -122.4055017 }, { "attributes": { @@ -466,7 +500,9 @@ "Description__c": "Sophisticated executive condo with marble finishes, city views, and luxury building amenities. Premium Nob Hill location.", "Tour_URL__c": "https://example.com/tour/executive-suite", "Hero_Image__c": "https://images.unsplash.com/photo-1600607687920-4e2a09cf159d?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 37.7907054, + "Coordinates__Longitude__s": -122.406344 }, { "attributes": { @@ -492,7 +528,9 @@ "Description__c": "Fully restored Victorian mansion with period details, modern conveniences, and beautiful garden. Rare Pacific Heights gem.", "Tour_URL__c": "https://example.com/tour/victorian", "Hero_Image__c": "https://images.unsplash.com/photo-1600566753151-384129cf4e3e?w=800", - "Agent__c": "@AgentRef1" + "Agent__c": "@AgentRef1", + "Coordinates__Latitude__s": 37.7933344, + "Coordinates__Longitude__s": -122.4200908 }, { "attributes": { @@ -518,7 +556,9 @@ "Description__c": "Bright apartment with bay views, hardwood floors, and walking distance to Marina Green. Great neighborhood.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600585154526-990dced4db0d?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7990915, + "Coordinates__Longitude__s": -122.4319382 }, { "attributes": { @@ -544,7 +584,9 @@ "Description__c": "Comfortable townhouse with private patio, attached garage, and close to UC Berkeley. Great for students or faculty.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1603661764782-a3c9812afada?w=800", - "Agent__c": "@AgentRef3" + "Agent__c": "@AgentRef3", + "Coordinates__Latitude__s": 37.8774835, + "Coordinates__Longitude__s": -122.2660899 }, { "attributes": { @@ -570,7 +612,9 @@ "Description__c": "Modern open office space perfect for tech startups with high-speed internet and flexible layout. Prime SOMA location.", "Tour_URL__c": "https://example.com/tour/startup-hub", "Hero_Image__c": "https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800", - "Agent__c": "@AgentRef4" + "Agent__c": "@AgentRef4", + "Coordinates__Latitude__s": 37.7751904, + "Coordinates__Longitude__s": -122.4107713 }, { "attributes": { @@ -596,7 +640,9 @@ "Description__c": "Spacious family home with modern kitchen, large basement, and proximity to Golden Gate Park. Perfect for families.", "Tour_URL__c": null, "Hero_Image__c": "https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?w=800", - "Agent__c": "@AgentRef5" + "Agent__c": "@AgentRef5", + "Coordinates__Latitude__s": 37.7463285, + "Coordinates__Longitude__s": -122.4732595 }, { "attributes": { @@ -622,7 +668,9 @@ "Description__c": "Contemporary loft in vibrant Mission Bay with waterfront access and modern amenities. Great location near ballpark.", "Tour_URL__c": "https://example.com/tour/mission-loft", "Hero_Image__c": "https://images.unsplash.com/photo-1600607687920-4e2a09cf159d?w=800", - "Agent__c": "@AgentRef1" + "Agent__c": "@AgentRef1", + "Coordinates__Latitude__s": 37.7433669, + "Coordinates__Longitude__s": -122.4666667 }, { "attributes": { @@ -648,7 +696,9 @@ "Description__c": "Elegant apartment in prestigious Pacific Heights with hardwood floors, in-unit laundry, and 24/7 doorman service.", "Tour_URL__c": "https://example.com/tour/pac-heights", "Hero_Image__c": "https://images.unsplash.com/photo-1600585152220-90363fe7e115?w=800", - "Agent__c": "@AgentRef2" + "Agent__c": "@AgentRef2", + "Coordinates__Latitude__s": 37.7851601, + "Coordinates__Longitude__s": -122.4351546 } ] } diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperienceConfigs/appreactsampleb2x1.digitalExperienceConfig b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperienceConfigs/propertyrentalapp1.digitalExperienceConfig similarity index 54% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperienceConfigs/appreactsampleb2x1.digitalExperienceConfig rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperienceConfigs/propertyrentalapp1.digitalExperienceConfig index d431760..c861845 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperienceConfigs/appreactsampleb2x1.digitalExperienceConfig +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperienceConfigs/propertyrentalapp1.digitalExperienceConfig @@ -1,8 +1,8 @@ - + - appreactsampleb2x + propertyrentalapp - site/appreactsampleb2x1 + site/propertyrentalapp1 diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/appreactsampleb2x1.digitalExperience-meta.xml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/propertyrentalapp1.digitalExperience-meta.xml similarity index 90% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/appreactsampleb2x1.digitalExperience-meta.xml rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/propertyrentalapp1.digitalExperience-meta.xml index 2cb31bb..de4b9d0 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/appreactsampleb2x1.digitalExperience-meta.xml +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/propertyrentalapp1.digitalExperience-meta.xml @@ -1,7 +1,7 @@ - + sfdc_cms__collection diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/sfdc_cms__site/appreactsampleb2x1/_meta.json b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/sfdc_cms__site/propertyrentalapp1/_meta.json similarity index 56% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/sfdc_cms__site/appreactsampleb2x1/_meta.json rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/sfdc_cms__site/propertyrentalapp1/_meta.json index 1f94d50..ee01714 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/sfdc_cms__site/appreactsampleb2x1/_meta.json +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/sfdc_cms__site/propertyrentalapp1/_meta.json @@ -1,5 +1,5 @@ { - "apiName": "appreactsampleb2x1", + "apiName": "propertyrentalapp1", "type": "sfdc_cms__site", "path": "" } diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/sfdc_cms__site/appreactsampleb2x1/content.json b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/sfdc_cms__site/propertyrentalapp1/content.json similarity index 59% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/sfdc_cms__site/appreactsampleb2x1/content.json rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/sfdc_cms__site/propertyrentalapp1/content.json index 1c386ae..2fac7a2 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/appreactsampleb2x1/sfdc_cms__site/appreactsampleb2x1/content.json +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/digitalExperiences/site/propertyrentalapp1/sfdc_cms__site/propertyrentalapp1/content.json @@ -1,10 +1,10 @@ { "type": "sfdc_cms__site", - "title": "appreactsampleb2x", + "title": "propertyrentalapp", "contentBody": { "authenticationType": "AUTHENTICATED_WITH_PUBLIC_ACCESS_ENABLED", "appContainer": true, - "appSpace": "c__appreactsampleb2x" + "appSpace": "c__propertyrentalapp" }, - "urlName": "appreactsampleb2x" + "urlName": "propertyrentalapp" } diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/networks/appreactsampleb2x.network b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/networks/propertyrentalapp.network similarity index 89% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/networks/appreactsampleb2x.network rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/networks/propertyrentalapp.network index fbc93fb..2b59b64 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/networks/appreactsampleb2x.network +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/networks/propertyrentalapp.network @@ -5,8 +5,8 @@ unfiled$public/CommunityChangePasswordEmailTemplate true - trialorgfarmforu@salesforce.com.invalid.invalid - appreactsampleb2x + admin@company.com + propertyrentalapp false true false @@ -44,17 +44,17 @@ Designer Designer - trialorgfarmforu@salesforce.com - appreactsampleb2x1 + admin@company.com + propertyrentalapp1 false true - appreactsampleb2x + propertyrentalapp NotArchived Live home Chatter - appreactsampleb2xvforcesite + propertyrentalappvforcesite unfiled$public/CommunityWelcomeEmailTemplate diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/objects/Property__c/fields/Coordinates__c.field-meta.xml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/objects/Property__c/fields/Coordinates__c.field-meta.xml new file mode 100644 index 0000000..ee39c7f --- /dev/null +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/objects/Property__c/fields/Coordinates__c.field-meta.xml @@ -0,0 +1,12 @@ + + + Coordinates__c + Location coordinates + true + + false + 6 + false + false + Location + diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/package.xml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/package.xml index d9cf4fe..03410dc 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/package.xml +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/package.xml @@ -1,19 +1,19 @@ - appreactsampleb2x + propertyrentalapp CustomSite - site/appreactsampleb2x1 + site/propertyrentalapp1 DigitalExperienceBundle - appreactsampleb2x1 + propertyrentalapp1 DigitalExperienceConfig - appreactsampleb2x + propertyrentalapp Network 66.0 diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml index 32a52e3..6efccf6 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Property_Management_Access.permissionset-meta.xml @@ -416,6 +416,11 @@ Property__c.Address__c true + + true + Property__c.Coordinates__c + true + true Property__c.Type__c diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml index 48dfb90..7171762 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/permissionsets/Tenant_Maintenance_Access.permissionset-meta.xml @@ -97,6 +97,11 @@ Property__c.Address__c true + + false + Property__c.Coordinates__c + true + diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/sites/appreactsampleb2x.site b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/sites/propertyrentalapp.site similarity index 93% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/sites/appreactsampleb2x.site rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/sites/propertyrentalapp.site index 805780c..f0e437f 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/sites/appreactsampleb2x.site +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/sites/propertyrentalapp.site @@ -19,7 +19,7 @@ Exception InMaintenance CommunitiesLanding - appreactsampleb2x + propertyrentalapp false true CommunitiesSelfReg @@ -27,5 +27,5 @@ ChatterNetwork - appreactsampleb2xvforcesite + propertyrentalappvforcesite diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/index.html b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/index.html deleted file mode 100644 index 4afb19d..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - ZENLEASE - - -
-
- - - - -
-
- - - diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/graphql-operations-types.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/graphql-operations-types.ts deleted file mode 100644 index c3770c5..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/graphql-operations-types.ts +++ /dev/null @@ -1,299 +0,0 @@ -/** - * Generated operation types for B2X GraphQL queries. - * Regenerate with codegen (e.g. npm run graphql:codegen) when schema or operations change. - */ - -// ---- MaintenanceRequests ---- -export interface MaintenanceRequestsQueryVariables { - first: number; - after?: string | null; -} - -export interface MaintenanceRequestsQuery { - uiapi?: { - query?: { - Maintenance_Request__c?: { - edges?: Array<{ - node?: { - Id: string; - ApiName?: string | null; - Name?: { value?: unknown; displayValue?: string | null } | null; - Description__c?: { value?: unknown; displayValue?: string | null } | null; - Type__c?: { value?: unknown; displayValue?: string | null } | null; - Priority__c?: { value?: unknown; displayValue?: string | null } | null; - Status__c?: { value?: unknown; displayValue?: string | null } | null; - Scheduled__c?: { value?: unknown; displayValue?: string | null } | null; - User__r?: { - Name?: { value?: unknown; displayValue?: string | null } | null; - } | null; - Property__r?: { - Address__c?: { value?: unknown; displayValue?: string | null } | null; - } | null; - } | null; - }> | null; - pageInfo?: { - hasNextPage?: boolean | null; - endCursor?: string | null; - } | null; - } | null; - } | null; - } | null; -} - -// ---- PropertyListings ---- -/** Single-field condition; Property__r filters on related Property (name, address, bedrooms). */ -export type PropertyListingsWhereCondition = { - Name?: { like: string }; - Listing_Status__c?: { like: string }; - Listing_Price__c?: { gte?: number; lte?: number }; - Property__r?: { - Name?: { like: string }; - Address__c?: { like: string }; - Bedrooms__c?: { gte?: number }; - }; -}; -/** GraphQL ResultOrder values for orderBy (use ResultOrder.Asc / ResultOrder.Desc). */ -export const ResultOrder = { - Asc: "ASC", - Desc: "DESC", -} as const; -export type ResultOrder = (typeof ResultOrder)[keyof typeof ResultOrder]; - -/** orderBy for Property_Listing__c (e.g. { Listing_Price__c: { order: ResultOrder.Asc } }). */ -export type PropertyListingsOrderBy = { - Listing_Price__c?: { order: ResultOrder }; - Property__r?: { Bedrooms__c?: { order: ResultOrder } }; -}; - -/** Where clause: condition, or { and: conditions[] }, or { or: conditions[] }. */ -export interface PropertyListingsQueryVariables { - where?: - | PropertyListingsWhereCondition - | { and: Array } - | { or: PropertyListingsWhereCondition[] }; - first: number; - after?: string | null; - orderBy?: PropertyListingsOrderBy | null; -} - -export interface PropertyListingsQuery { - uiapi?: { - query?: { - Property_Listing__c?: { - edges?: Array<{ - node?: { - Id: string; - ApiName?: string | null; - Name?: { value?: string | null; displayValue?: string | null } | null; - Listing_Price__c?: { - value?: number | null; - displayValue?: string | null; - } | null; - Listing_Status__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Property__c?: { value?: string | null; displayValue?: string | null } | null; - Property__r?: { - Name?: { value?: string | null; displayValue?: string | null } | null; - Address__c?: { value?: string | null; displayValue?: string | null } | null; - Bedrooms__c?: { value?: number | null; displayValue?: string | null } | null; - } | null; - } | null; - cursor?: string | null; - }> | null; - pageInfo?: { - hasNextPage?: boolean | null; - hasPreviousPage?: boolean | null; - startCursor?: string | null; - endCursor?: string | null; - } | null; - totalCount?: number | null; - } | null; - } | null; - } | null; -} - -// ---- ListingById ---- -export interface ListingByIdQueryVariables { - listingId: string; -} - -export interface ListingByIdQuery { - uiapi?: { - query?: { - Property_Listing__c?: { - edges?: Array<{ - node?: { - Id: string; - Name?: { value?: string | null; displayValue?: string | null } | null; - Listing_Price__c?: { - value?: unknown; - displayValue?: string | null; - } | null; - Listing_Status__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Property__c?: { value?: string | null; displayValue?: string | null } | null; - } | null; - }> | null; - } | null; - } | null; - } | null; -} - -// ---- PropertyById ---- -export interface PropertyByIdQueryVariables { - propertyId: string; -} - -export interface PropertyByIdQuery { - uiapi?: { - query?: { - Property__c?: { - edges?: Array<{ - node?: { - Id: string; - Name?: { value?: string | null; displayValue?: string | null } | null; - Address__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Type__c?: { value?: string | null; displayValue?: string | null } | null; - Monthly_Rent__c?: { - value?: unknown; - displayValue?: string | null; - } | null; - Bedrooms__c?: { value?: unknown; displayValue?: string | null } | null; - Bathrooms__c?: { value?: unknown; displayValue?: string | null } | null; - Sq_Ft__c?: { value?: unknown; displayValue?: string | null } | null; - Description__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - } | null; - }> | null; - } | null; - } | null; - } | null; -} - -// ---- PropertyImages ---- -export interface PropertyImagesQueryVariables { - propertyId: string; -} - -export interface PropertyImagesQuery { - uiapi?: { - query?: { - Property_Image__c?: { - edges?: Array<{ - node?: { - Id: string; - Name?: { value?: string | null; displayValue?: string | null } | null; - Image_URL__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Image_Type__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Display_Order__c?: { - value?: unknown; - displayValue?: string | null; - } | null; - Alt_Text__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - } | null; - }> | null; - } | null; - } | null; - } | null; -} - -// ---- PropertyCosts ---- -export interface PropertyCostsQueryVariables { - propertyId: string; -} - -export interface PropertyCostsQuery { - uiapi?: { - query?: { - Property_Cost__c?: { - edges?: Array<{ - node?: { - Id: string; - Cost_Category__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Cost_Amount__c?: { - value?: unknown; - displayValue?: string | null; - } | null; - Cost_Date__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Description__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Vendor__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - } | null; - }> | null; - } | null; - } | null; - } | null; -} - -// ---- PropertyFeatures ---- -export interface PropertyFeaturesQueryVariables { - propertyId: string; -} - -export interface PropertyFeaturesQuery { - uiapi?: { - query?: { - Property_Feature__c?: { - edges?: Array<{ - node?: { - Id: string; - Name?: { value?: string | null; displayValue?: string | null } | null; - Feature_Category__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - Description__c?: { - value?: string | null; - displayValue?: string | null; - } | null; - } | null; - }> | null; - } | null; - } | null; - } | null; -} - -// ---- GetUserInfo ---- -export interface GetUserInfoQuery { - uiapi?: { - query?: { - User?: { - edges?: Array<{ - node?: { - Id: string; - Name?: { value?: string | null } | null; - } | null; - }> | null; - } | null; - } | null; - } | null; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/graphqlClient.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/graphqlClient.ts deleted file mode 100644 index bf63f07..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/graphqlClient.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Thin GraphQL client: createDataSDK + data.graphql with centralized error handling. - * Use with gql-tagged queries and generated operation types for type-safe calls. - */ -import { createDataSDK } from "@salesforce/sdk-data"; - -export async function executeGraphQL>( - query: string | { kind: string; definitions: unknown[] }, - variables?: TVariables, -): Promise { - const data = await createDataSDK(); - // SDK types graphql() first param as string; at runtime it may accept gql DocumentNode too - const response = await data.graphql?.( - query as unknown as string, - variables as Record, - ); - if (response?.errors?.length) { - const msg = response.errors.map((e) => e.message).join("; "); - throw new Error(`GraphQL Error: ${msg}`); - } - return (response?.data ?? {}) as TData; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceDetailsModal.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceDetailsModal.tsx deleted file mode 100644 index 3ce0c65..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceDetailsModal.tsx +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Modal showing maintenance request details. Read-only (no status update in B2X). - * Layout matches B2E MaintenanceDetailsModal. - */ -import { useEffect } from "react"; -import { X } from "lucide-react"; -import { StatusBadge } from "@/components/StatusBadge"; -import type { MaintenanceRequestSummary } from "@/api/maintenanceRequestApi"; - -export interface MaintenanceDetailsModalProps { - request: MaintenanceRequestSummary; - onClose: () => void; -} - -function formatDate(value: string | null): string { - if (!value?.trim()) return "β€”"; - try { - const d = new Date(value); - return d.toLocaleDateString("en-US", { - month: "short", - day: "numeric", - year: "numeric", - hour: "numeric", - minute: "2-digit", - hour12: true, - }); - } catch { - return value; - } -} - -export default function MaintenanceDetailsModal({ - request, - onClose, -}: MaintenanceDetailsModalProps) { - useEffect(() => { - const handleEscape = (e: KeyboardEvent) => { - if (e.key === "Escape") onClose(); - }; - document.addEventListener("keydown", handleEscape); - return () => document.removeEventListener("keydown", handleEscape); - }, [onClose]); - - const description = request.description?.trim() || request.title?.trim() || "β€”"; - - return ( -
- {/* Backdrop */} -
- - {/* Modal */} -
- {/* Header */} -
-

- Maintenance Request Details -

- -
- - {/* Content */} -
-
-

- Description -

-

{description}

-
- -
-
-

- Issue Type -

-

{request.type ?? "β€”"}

-
-
-

- Priority -

-

{request.priority ?? "β€”"}

-
-
- -
-

- Property -

-

{request.propertyAddress?.trim() || "β€”"}

-
- -
-

- Tenant -

-

{request.tenantName?.trim() || "β€”"}

-
- -
-

- Scheduled Date -

-

{formatDate(request.dateRequested)}

-
- -
-

- Status -

- -
-
-
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectDetailService.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectDetailService.ts deleted file mode 100644 index c5c2279..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectDetailService.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Record detail service: layout (REST), object metadata (GraphQL), single record (GraphQL). - * - * getRecordDetail orchestrates layout + objectInfoBatch + getRecordByIdGraphQL for the detail page. - * Layout is still REST (uiApiClient); record and object info are GraphQL-backed. - * - * @module api/objectDetailService - */ - -import { uiApiClient } from "@salesforce/webapp-experimental/api"; -import type { LayoutResponse } from "../types/recordDetail/recordDetail"; -import { LayoutResponseSchema } from "../types/recordDetail/recordDetail"; -import { fetchAndValidate, safeEncodePath } from "../utils/apiUtils"; -import { objectInfoService } from "./objectInfoService"; -import type { ObjectInfoResult } from "../types/objectInfo/objectInfo"; -import { getRecordByIdGraphQL, type GraphQLRecordNode } from "./recordListGraphQLService"; -import type { Column } from "../types/search/searchResults"; -import { calculateFieldsToFetch } from "../utils/recordUtils"; - -/** Fallback when record type is unknown. Prefer recordTypeId from the record (e.g. from search or record response) when available. */ -const DEFAULT_RECORD_TYPE_ID = "012000000000000AAA"; - -/** - * Returns field API names to request for a record from the given layout and object metadata. - * Used to derive GraphQL columns from layout (detail view). Delegates to recordUtils.calculateFieldsToFetch. - * - * @param objectMetadata - Object info (fields, relationshipName, etc.). - * @param layout - Layout response (sections, layoutItems, layoutComponents). - * @returns Array of field API names (e.g. ["Name", "OwnerId", "Owner", "CreatedDate"]). - */ -export function extractFieldsFromLayout( - objectMetadata: ObjectInfoResult, - layout: LayoutResponse, -): string[] { - const [optionalFields] = calculateFieldsToFetch(objectMetadata, layout, false); - return optionalFields; -} - -export async function getLayout( - objectApiName: string, - recordTypeId: string = DEFAULT_RECORD_TYPE_ID, -): Promise { - const params = new URLSearchParams({ - layoutType: "Full", - mode: "View", - recordTypeId, - }); - return fetchAndValidate( - () => uiApiClient.get(`/layout/${safeEncodePath(objectApiName)}?${params.toString()}`), - { - schema: LayoutResponseSchema, - errorContext: `layout for ${objectApiName}`, - }, - ); -} - -export interface RecordDetailResult { - layout: LayoutResponse; - record: GraphQLRecordNode; - objectMetadata: ObjectInfoResult; -} - -/** - * Converts layout-derived optionalFields (field API names) to Column[] for GraphQL node selection. - * Uses unqualified names (no entity prefix) so the GraphQL query matches UI API shape. - * Other Column fields (label, searchable, sortable) are only required by the type; GraphQL selection uses fieldApiName only. - */ -function optionalFieldsToColumns(optionalFields: string[]): Column[] { - return optionalFields.map((fieldApiName) => ({ - fieldApiName, - label: "", - searchable: false, - sortable: false, - })); -} - -export async function getRecordDetail( - objectApiName: string, - recordId: string, - recordTypeId: string = DEFAULT_RECORD_TYPE_ID, -): Promise { - const layout = await getLayout(objectApiName, recordTypeId); - const objectMetadata = await objectInfoService.getObjectInfoBatch(objectApiName); - const firstResult = objectMetadata?.results?.[0]?.result; - if (!firstResult) { - throw new Error(`Object metadata not found for ${objectApiName}`); - } - // Layout-driven optionalFields (fields shown on the detail layout), not list columns - const [optionalFields] = calculateFieldsToFetch(firstResult, layout, false); - const columns = optionalFieldsToColumns(optionalFields); - const record = await getRecordByIdGraphQL(objectApiName, recordId, columns); - if (!record) { - throw new Error(`Record not found: ${recordId}`); - } - return { layout, record, objectMetadata: firstResult }; -} - -export const objectDetailService = { - extractFieldsFromLayout, - getLayout, - getRecordDetail, -}; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectInfoGraphQLService.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectInfoGraphQLService.ts deleted file mode 100644 index d320f35..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectInfoGraphQLService.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Object metadata GraphQL service (uiapi.objectInfos). - * - * Single endpoint for object describe and picklist values. Used by objectInfoService - * to implement getObjectInfoBatch and getPicklistValues. Not used directly by UI. - * - * @module api/objectInfoGraphQLService - */ - -import { createDataSDK, gql } from "@salesforce/sdk-data"; -import type { - GetObjectInfosQuery, - GetObjectInfosQueryVariables, - GetPicklistValuesQuery, - GetPicklistValuesQueryVariables, - ObjectInfoInput, -} from "../types/schema"; - -/** - * Builds objectInfos query (metadata only). Uses apiNames only β€” do not pass objectInfoInputs. - */ -const OBJECT_INFOS_QUERY = gql` - query GetObjectInfos($apiNames: [String!]!) { - uiapi { - objectInfos(apiNames: $apiNames) { - ApiName - label - labelPlural - nameFields - defaultRecordTypeId - keyPrefix - layoutable - queryable - searchable - updateable - deletable - createable - custom - mruEnabled - feedEnabled - fields { - ApiName - label - dataType - relationshipName - reference - compound - compoundFieldName - compoundComponentName - controllingFields - controllerName - referenceToInfos { - ApiName - nameFields - } - } - recordTypeInfos { - recordTypeId - name - master - available - defaultRecordTypeMapping - } - themeInfo { - color - iconUrl - } - childRelationships { - relationshipName - fieldName - childObjectApiName - } - dependentFields { - controllingField - } - } - } - } -`; - -/** - * Builds objectInfos query with picklist values (API v65.0+). - * Schema requires objectInfos to be called with either apiNames or objectInfoInputs, not both. - * This query uses objectInfoInputs only. - * Optimized to only fetch fields used by extractPicklistValuesFromGraphQLObjectInfo. - */ -const PICKLIST_VALUES_QUERY = gql` - query GetPicklistValues($objectInfoInputs: [ObjectInfoInput!]!) { - uiapi { - objectInfos(objectInfoInputs: $objectInfoInputs) { - ApiName - fields { - ApiName - ... on PicklistField { - picklistValuesByRecordTypeIDs { - recordTypeID - defaultValue { - value - } - picklistValues { - label - value - validFor - } - } - } - } - } - } - } -`; - -export async function queryForObjectInfos(apiNames: string[]): Promise { - return runQuery(OBJECT_INFOS_QUERY, { - apiNames, - }); -} - -export async function queryForPicklistValues( - objectInfoInputs: ObjectInfoInput[], -): Promise { - return runQuery(PICKLIST_VALUES_QUERY, { - objectInfoInputs, - }); -} - -async function runQuery(query: string, variables: V): Promise { - const data = await createDataSDK(); - const response = await data.graphql?.(query, variables); - - if (response?.errors?.length) { - const errorMessages = response.errors.map((e) => e.message).join("; "); - throw new Error(`GraphQL Error: ${errorMessages}`); - } - - return response?.data ?? ({} as Q); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectInfoService.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectInfoService.ts deleted file mode 100644 index a438540..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/objectInfoService.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { uiApiClient } from "@salesforce/webapp-experimental/api"; -import type { Filter } from "../types/filters/filters"; -import { FilterArraySchema } from "../types/filters/filters"; -import type { PicklistValue } from "../types/filters/picklist"; -import type { ObjectInfoBatchResponse } from "../types/objectInfo/objectInfo"; -import { fetchAndValidate, safeEncodePath } from "../utils/apiUtils"; -import { queryForObjectInfos, queryForPicklistValues } from "./objectInfoGraphQLService"; -import { - graphQLObjectInfosToBatchResponse, - extractPicklistValuesFromGraphQLObjectInfo, -} from "../utils/graphQLObjectInfoAdapter"; - -/** - * Object info and search service. - * - * - getObjectInfoBatch / getPicklistValues: GraphQL (objectInfoGraphQLService). - * - getObjectListFilters: REST (search-info). - * Hooks use this service; components do not call it directly. - * - * @module api/objectInfoService - */ - -/** Cache key: sorted, comma-joined object API names. */ -function getObjectInfoBatchCacheKey(objectApiNames: string): string { - const names = objectApiNames - .split(",") - .map((s) => s.trim()) - .filter(Boolean); - return [...names].sort().join(","); -} - -const objectInfoBatchCache = new Map(); -const objectInfoBatchInFlight = new Map>(); - -export async function getObjectInfoBatch(objectApiNames: string): Promise { - const names = objectApiNames - .split(",") - .map((s) => s.trim()) - .filter(Boolean); - if (names.length === 0) { - return { results: [] }; - } - const key = getObjectInfoBatchCacheKey(objectApiNames); - const cached = objectInfoBatchCache.get(key); - if (cached) return Promise.resolve(cached); - const inFlight = objectInfoBatchInFlight.get(key); - if (inFlight) return inFlight; - const promise = (async () => { - try { - const response = await queryForObjectInfos(names); - const nodes = response?.uiapi?.objectInfos ?? []; - const result = graphQLObjectInfosToBatchResponse(nodes, names); - objectInfoBatchCache.set(key, result); - return result; - } finally { - objectInfoBatchInFlight.delete(key); - } - })(); - objectInfoBatchInFlight.set(key, promise); - return promise; -} - -export async function getObjectListFilters(objectApiName: string): Promise { - return fetchAndValidate( - () => uiApiClient.get(`/search-info/${safeEncodePath(objectApiName)}/filters`), - { - schema: FilterArraySchema, - errorContext: `filters for ${objectApiName}`, - extractData: (data: unknown) => { - if (!data) return []; - return Array.isArray(data) ? data : (data as { filters?: unknown }).filters || []; - }, - }, - ); -} - -export async function getPicklistValues( - objectApiName: string, - fieldName: string, - recordTypeId: string = "012000000000000AAA", -): Promise { - const response = await queryForPicklistValues([ - { apiName: objectApiName, fieldNames: [fieldName] }, - ]); - const nodes = response?.uiapi?.objectInfos ?? []; - const node = nodes[0]; - if (!node) return []; - return extractPicklistValuesFromGraphQLObjectInfo(node, fieldName, recordTypeId); -} - -export const objectInfoService = { - getObjectInfoBatch, - getObjectListFilters, - getPicklistValues, -}; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/recordListGraphQLService.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/recordListGraphQLService.ts deleted file mode 100644 index 8cf8084..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/api/recordListGraphQLService.ts +++ /dev/null @@ -1,364 +0,0 @@ -/** - * Record GraphQL Service - * - * Single service for querying Salesforce object records via GraphQL UI API (uiapi.query). - * Handles both list (paginated, filter, sort, search) and single-record-by-id using one query shape. - * - * @module api/recordListGraphQLService - */ - -import { createDataSDK } from "@salesforce/sdk-data"; -import type { Column } from "../types/search/searchResults"; -import type { FilterCriteria } from "../types/filters/filters"; - -const DEFAULT_PAGE_SIZE = 50; - -/** Tree of selection: leaf is "value", branch is nested fields. Keys starting with __on_ are inline fragments (e.g. __on_User). */ -interface SelectionTree { - [key: string]: "value" | SelectionTree; -} - -/** - * Polymorphic relationship fields and the concrete GraphQL types they can resolve to. - * Only relationship names listed here use inline fragments; others use direct selection - * (e.g. Parent -> Parent { Name { value } } because "Parent" is not a schema type). - * We use a single fragment per field to avoid schema validation errors (e.g. User and Group - * cannot both be spread in the same selection in some contexts). - */ -const POLYMORPHIC_RELATIONSHIP_TYPES: Record = { - Owner: ["User"], - CreatedBy: ["User"], - LastModifiedBy: ["User"], -}; - -/** - * Builds a selection tree from columns (fieldApiName). Simple fields (e.g. Name, OwnerId) become - * top-level leaves. Relationship fields that are in POLYMORPHIC_RELATIONSHIP_TYPES use a single - * inline fragment on the first concrete type (e.g. ... on User). All other relationship fields - * (e.g. Parent, Account) use direct selection (e.g. Parent { Name { value } }) because the - * relationship name is not necessarily a GraphQL type name (e.g. Parent resolves to Account). - */ -function buildSelectionTree(columns: Column[]): SelectionTree { - const allFieldNames = new Set(columns.map((c) => (c.fieldApiName ?? "").trim()).filter(Boolean)); - const tree: SelectionTree = { Id: "value" }; - for (const col of columns) { - const name = (col.fieldApiName ?? "").trim(); - if (!name) continue; - const parts = name.split("."); - if (parts.length === 1) { - const fieldName = parts[0]; - const hasCorrespondingId = allFieldNames.has(`${fieldName}Id`); - if (hasCorrespondingId) { - const knownTypes = POLYMORPHIC_RELATIONSHIP_TYPES[fieldName]; - if (knownTypes?.length) { - // Use a single inline fragment to avoid "User can never be Group" validation errors - const typeName = knownTypes[0]; - tree[fieldName] = { [`__on_${typeName}`]: { Name: "value" } }; - } else { - // Relationship name (e.g. Parent) is not a GraphQL type; use direct selection - tree[fieldName] = { Name: "value" }; - } - } else { - tree[fieldName] = "value"; - } - } else { - let current = tree; - for (let i = 0; i < parts.length; i++) { - const part = parts[i]; - const isLeaf = i === parts.length - 1; - if (isLeaf) { - current[part] = "value"; - } else { - const existing = current[part]; - if (existing === "value") continue; - if (!existing) { - current[part] = {}; - } - current = current[part] as SelectionTree; - } - } - } - } - return tree; -} - -/** - * Serializes a selection tree to GraphQL selection set string. - * Keys starting with __on_ are emitted as inline fragments (... on TypeName { ... }). - * Id is scalar (no subselection); other leaves use { value }. - */ -function serializeSelectionTree(tree: SelectionTree, indent: string): string { - const fragmentKeys = Object.keys(tree).filter((k) => k.startsWith("__on_")); - const normalKeys = Object.keys(tree).filter((k) => !k.startsWith("__on_")); - normalKeys.sort((a, b) => { - if (a === "Id") return -1; - if (b === "Id") return 1; - return a.localeCompare(b); - }); - fragmentKeys.sort(); - const lines: string[] = []; - const childIndent = `${indent} `; - for (const key of normalKeys) { - const val = tree[key]; - if (val === "value") { - if (key === "Id") { - lines.push(`${indent}Id`); - } else { - lines.push(`${indent}${key} @optional { value }`); - } - } else { - lines.push(`${indent}${key} @optional {`); - lines.push(serializeSelectionTree(val, childIndent)); - lines.push(`${indent}}`); - } - } - for (const key of fragmentKeys) { - const typeName = key.slice(5); - const val = tree[key]; - if (val && typeof val === "object") { - lines.push(`${indent}... on ${typeName} {`); - lines.push(serializeSelectionTree(val, childIndent)); - lines.push(`${indent}}`); - } - } - return lines.join("\n"); -} - -function buildNodeSelection(columns: Column[]): string { - const tree = buildSelectionTree(columns); - return serializeSelectionTree(tree, " "); -} - -/** - * Builds GraphQL where clause from filter criteria and optional search text. - * Search text is applied as Name like %query%. Multiple conditions are combined with and. - * - * @param criteria - Field filters (fieldPath, operator, values). - * @param searchQuery - Optional; adds Name like %searchQuery% when provided. - */ -export function buildWhereFromCriteria( - criteria: FilterCriteria[], - searchQuery?: string, -): Record | null { - const conditions: Record[] = []; - - if (searchQuery && searchQuery.trim()) { - const term = `%${searchQuery.trim()}%`; - conditions.push({ Name: { like: term } }); - } - - for (const c of criteria) { - if (!c.fieldPath || !c.operator || !c.values?.length) continue; - const op = c.operator; - const parts = c.fieldPath.split("."); - const fieldClause = op === "in" ? { in: c.values } : { [op]: c.values[0] }; - if (parts.length === 1) { - conditions.push({ [parts[0]]: fieldClause }); - } else { - let nested: Record = { [parts[parts.length - 1]]: fieldClause }; - for (let i = parts.length - 2; i >= 0; i--) { - nested = { [parts[i]]: nested }; - } - conditions.push(nested); - } - } - - if (conditions.length === 0) return null; - if (conditions.length === 1) return conditions[0] as Record; - return { and: conditions }; -} - -/** - * Parses sortBy string (e.g. "Name", "Name ASC", "AnnualRevenue DESC") into GraphQL orderBy shape. - * Default direction is ASC. - */ -export function buildOrderByFromSort( - sortBy: string, -): Record | null { - const trimmed = (sortBy ?? "").trim(); - if (!trimmed || trimmed.toLowerCase() === "relevance") return null; - const parts = trimmed.split(/\s+/); - const field = parts[0]; - const dir = parts[1]?.toUpperCase() === "DESC" ? "DESC" : "ASC"; - return { [field]: { order: dir } }; -} - -/** Variables for the GetRecords GraphQL operation. */ -export interface RecordListGraphQLVariables { - first?: number; - after?: string | null; - where?: Record | null; - orderBy?: Record | null; -} - -export interface RecordListGraphQLOptions { - objectApiName: string; - columns: Column[]; - /** When set, fetches a single record by Id (first=1, where Id eq); used for detail view. */ - recordId?: string | null; - first?: number; - after?: string | null; - filters?: FilterCriteria[]; - orderBy?: Record | null; - searchQuery?: string; -} - -/** - * Builds the GraphQL query string for uiapi.query.{objectApiName}. - * Used for both list (pagination, where, orderBy) and single record (where Id eq, first 1). - * - * @param objectApiName - API name of the object (e.g. Account, Contact). - * @param columns - Field selection (becomes node selection via buildNodeSelection). - * @param options - Optional where and orderBy; when recordId is used, where is set to Id eq. - */ -export function buildGetRecordsQuery( - objectApiName: string, - columns: Column[], - options?: { where?: Record | null; orderBy?: Record | null }, -): string { - const nodeSelection = buildNodeSelection(columns); - const hasWhere = options?.where != null && Object.keys(options.where).length > 0; - const hasOrderBy = options?.orderBy != null && Object.keys(options.orderBy).length > 0; - - const filterType = `${objectApiName}_Filter`; - const orderByType = `${objectApiName}_OrderBy`; - - const varDecls = [ - "$first: Int", - "$after: String", - ...(hasWhere ? [`$where: ${filterType}`] : []), - ...(hasOrderBy ? [`$orderBy: ${orderByType}`] : []), - ]; - const opArgs = [ - "first: $first", - "after: $after", - ...(hasWhere ? ["where: $where"] : []), - ...(hasOrderBy ? ["orderBy: $orderBy"] : []), - ]; - - return `query GetRecords(${varDecls.join(", ")}) { - uiapi { - query { - ${objectApiName}(${opArgs.join(", ")}) { - edges { - node { - ${nodeSelection} - } - } - pageInfo { - hasNextPage - hasPreviousPage - endCursor - startCursor - }, - totalCount, - pageResultCount - } - } - } -}`; -} - -export interface RecordListGraphQLResult { - uiapi?: { - query?: { - [key: string]: { - edges?: Array<{ node?: Record }>; - pageInfo?: { - hasNextPage?: boolean; - hasPreviousPage?: boolean; - endCursor?: string | null; - startCursor?: string | null; - }; - }; - }; - }; -} - -/** GraphQL node shape for a single record (Id + field selections with value/nested). */ -export type GraphQLRecordNode = Record; - -/** - * Fetches records for the given object via GraphQL (single query for both list and single record). - * - * - List: pass first, after, filters, orderBy, searchQuery. - * - Single record: pass recordId; first is set to 1 and where includes Id eq. - * - * @param options.objectApiName - API name of the object (e.g. Account, Contact). - * @param options.columns - Field selection (from filters-derived columns or layout-derived optionalFields). - * @param options.recordId - If set, fetches one record by Id (first=1, where Id eq). - * @param options.first - Page size (default 50; ignored when recordId is set). - * @param options.after - Cursor for next page. - * @param options.filters - Filter criteria (mapped to where). - * @param options.orderBy - GraphQL orderBy; use buildOrderByFromSort(sortBy) when needed. - * @param options.searchQuery - Text search (Name like %query% in where). - * @returns Connection result (edges, pageInfo); for recordId callers use edges[0].node. - */ -export async function getRecordsGraphQL( - options: RecordListGraphQLOptions, -): Promise { - const { - objectApiName, - columns, - recordId, - first = DEFAULT_PAGE_SIZE, - after = null, - filters = [], - orderBy = null, - searchQuery, - } = options; - - const listWhere = buildWhereFromCriteria(filters, searchQuery); - const where = - recordId != null && recordId !== "" - ? listWhere != null && Object.keys(listWhere).length > 0 - ? { and: [{ Id: { eq: recordId } }, listWhere] } - : { Id: { eq: recordId } } - : listWhere; - const effectiveFirst = recordId != null && recordId !== "" ? 1 : first; - const hasWhere = where != null && Object.keys(where).length > 0; - const hasOrderBy = orderBy != null && Object.keys(orderBy).length > 0; - - const query = buildGetRecordsQuery(objectApiName, columns, { where, orderBy }); - const variables: Record = { - first: effectiveFirst, - after: after ?? null, - ...(hasWhere && where ? { where } : {}), - ...(hasOrderBy && orderBy ? { orderBy } : {}), - }; - - const data = await createDataSDK(); - const response = await data.graphql?.(query, variables); - - if (response?.errors?.length) { - const errorMessages = response.errors.map((e) => e.message).join("; "); - throw new Error(`GraphQL Error: ${errorMessages}`); - } - - return response?.data ?? ({} as RecordListGraphQLResult); -} - -/** - * Fetches a single record by Id. Uses the same GraphQL query as list (getRecordsGraphQL with recordId + first 1). - * - * @param objectApiName - API name of the object. - * @param recordId - Record Id. - * @param columns - Field selection (e.g. layout-derived optionalFields as Column[]). - * @returns The record node or null if not found. - */ -export async function getRecordByIdGraphQL( - objectApiName: string, - recordId: string, - columns: Column[], -): Promise { - const result = await getRecordsGraphQL({ - objectApiName, - columns, - recordId, - first: 1, - }); - const edges = - result?.uiapi?.query?.[objectApiName]?.edges ?? - ([] as Array<{ node?: Record }>); - return (edges[0]?.node ?? null) as GraphQLRecordNode | null; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailFields.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailFields.tsx deleted file mode 100644 index abbc0bf..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailFields.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Alternative detail rendering: columns + record β†’ label/value list. - * - * Use when you have list columns + record (e.g. from filters-derived columns + searchResults) - * and do not need the Layout API. The primary detail view (DetailPage) uses DetailForm - * via UiApiDetailForm (layout + GraphQL record). - * - * @param record - Record data to display - * @param columns - Column definitions (e.g. derived from getObjectListFilters) - */ -import type { Column, SearchResultRecordData } from "../../types/search/searchResults"; -import { getNestedFieldValue } from "../../utils/fieldUtils"; - -interface DetailFieldsProps { - record: SearchResultRecordData; - columns: Column[]; -} - -function hasVisibleValue(value: string | number | boolean | null | undefined): boolean { - return value !== null && value !== undefined && value !== ""; -} - -export default function DetailFields({ record, columns }: DetailFieldsProps) { - const rows = columns.filter( - (col) => - col?.fieldApiName && hasVisibleValue(getNestedFieldValue(record.fields, col.fieldApiName)), - ); - - if (columns.length > 0 && rows.length === 0) { - return ( -
- No field values to display -
- ); - } - - return ( -
- {rows.map((column) => { - const fieldApiName = column.fieldApiName as string; - const displayValue = getNestedFieldValue(record.fields, fieldApiName); - return ( -
-
-
- {column.label || fieldApiName}: -
-
{displayValue}
-
-
- ); - })} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailForm.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailForm.tsx deleted file mode 100644 index c8fb3c6..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailForm.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import { useState, useCallback, useMemo, useId } from "react"; -import type { LayoutResponse } from "../../types/recordDetail/recordDetail"; -import type { GraphQLRecordNode } from "../../api/recordListGraphQLService"; -import { - getDisplayValueForLayoutItemFromNode, - getDisplayValueForDetailFieldFromNode, -} from "../../utils/graphQLNodeFieldUtils"; -import type { ObjectInfoMetadata } from "../../utils/formDataTransformUtils"; -import { - getTransformedSections, - type LayoutTransformContext, - type ObjectInfo, - type PicklistOption, - type TransformedLayoutItem, -} from "../../utils/layoutTransformUtils"; -import { FieldValueDisplay } from "./formatted/FieldValueDisplay"; -import { Section } from "./Section"; -import { SectionRow } from "./SectionRow"; - -export interface DetailFormProps { - layout: LayoutResponse; - record: GraphQLRecordNode; - metadata?: ObjectInfoMetadata | null; - objectInfo?: ObjectInfo | null; - lookupRecords?: Record | null; - showSectionHeaders?: boolean; - collapsibleSections?: boolean; -} - -function FieldCell({ - item, - record, - metadata, -}: { - item: TransformedLayoutItem; - record: GraphQLRecordNode; - metadata?: ObjectInfoMetadata | null; -}) { - const labelId = useId(); - const valueId = useId(); - if (!item.isField || item.apiName == null) return null; - const label = item.label ?? item.apiName; - const hasComponents = item.layoutComponentApiNames && item.layoutComponentApiNames.length > 0; - const layoutResult = hasComponents - ? getDisplayValueForLayoutItemFromNode( - record, - item.layoutComponentApiNames as string[], - metadata, - ) - : null; - const value = hasComponents - ? (layoutResult?.value ?? null) - : getDisplayValueForDetailFieldFromNode(record, item.apiName, metadata); - const dataType = - (hasComponents ? layoutResult?.dataType : undefined) ?? item.dataType ?? undefined; - return ( -
-
- {label} -
-
- -
-
- ); -} - -/** - * Read-only detail form: layout API + record (+ optional object info) drive sections, rows, and - * field values. Uses layoutComponents to club multi-component items (address, Created By, etc.). - */ -export function DetailForm({ - layout, - record, - metadata = null, - objectInfo = null, - lookupRecords = null, - showSectionHeaders = true, - collapsibleSections = true, -}: DetailFormProps) { - const [collapsedSections, setCollapsedSections] = useState>({}); - - const recordId = (record.Id as string) ?? ""; - - const layoutObjectInfo = objectInfo ?? metadata; - - const transformContext: LayoutTransformContext = useMemo( - () => ({ - recordId, - objectInfo: layoutObjectInfo, - lookupRecords, - getSectionCollapsedState: (sectionId: string) => Boolean(collapsedSections[sectionId]), - }), - [recordId, layoutObjectInfo, lookupRecords, collapsedSections], - ); - - const computedSections = useMemo( - () => getTransformedSections(layout.sections, transformContext), - [layout.sections, transformContext], - ); - - const handleSectionToggle = useCallback((sectionId: string, collapsed: boolean) => { - setCollapsedSections((prev) => ({ ...prev, [sectionId]: collapsed })); - }, []); - - return ( -
- {computedSections.map((section) => ( -
-
- {section.layoutRows.map((row) => ( - - {row.layoutItems.map((item) => { - const cellKey = `${section.key}-${row.key}-${item.apiName ?? item.key}`; - return item.isField ? ( - - ) : ( - -
- ))} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailHeader.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailHeader.tsx deleted file mode 100644 index 19e0f69..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailHeader.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Back button and title for the record detail page. - * - * @param title - Record title (e.g. record name) shown next to the back control. - * @param onBack - Called when the user activates the back control. - */ -import { Button } from "../../../../components/ui/button"; -import { ArrowLeft } from "lucide-react"; - -interface DetailHeaderProps { - title: string; - onBack: () => void; -} - -export default function DetailHeader({ title, onBack }: DetailHeaderProps) { - return ( -
- - {title ? ( -

- {title} -

- ) : null} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailLayoutSections.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailLayoutSections.tsx deleted file mode 100644 index d01ba6f..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/DetailLayoutSections.tsx +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Alternative detail rendering: layout sections β†’ rows β†’ items β†’ label/value grid. - * - * Use when you have raw Layout API response + record and do not need the full - * layoutTransformUtils + formDataTransformUtils pipeline. The primary detail view - * (DetailPage) uses DetailForm via UiApiDetailForm; use this component for other - * entry points that already have layout + record in hand. - */ -import type { LayoutResponse } from "../../types/recordDetail/recordDetail"; -import type { SearchResultRecordData } from "../../types/search/searchResults"; -import { getNestedFieldValue } from "../../utils/fieldUtils"; - -interface DetailLayoutSectionsProps { - layout: LayoutResponse; - record: SearchResultRecordData; -} - -interface FieldEntry { - key: string; - label: string; - value: string | number | boolean | null; -} - -function getSectionFieldEntries( - section: LayoutResponse["sections"][number], - record: SearchResultRecordData, -): FieldEntry[] { - const entries: FieldEntry[] = []; - section.layoutRows.forEach((row, rowIdx) => { - row.layoutItems.forEach((item, itemIdx) => { - item.layoutComponents.forEach((comp, compIdx) => { - if (comp.componentType !== "Field" || !comp.apiName) return; - const value = getNestedFieldValue(record.fields, comp.apiName); - const label = comp.label ?? item.label; - entries.push({ - key: `${section.id}-${rowIdx}-${itemIdx}-${comp.apiName ?? compIdx}`, - label: label || comp.apiName, - value: value ?? null, - }); - }); - }); - }); - return entries; -} - -export default function DetailLayoutSections({ layout, record }: DetailLayoutSectionsProps) { - return ( -
- {layout.sections.map((section) => { - const entries = getSectionFieldEntries(section, record); - if (entries.length === 0) return null; - - return ( -
- {section.useHeading && section.heading ? ( -

- {section.heading} -

- ) : null} -
- {entries.map(({ key, label, value }) => ( -
-
{label}
-
{value || "β€”"}
-
- ))} -
-
- ); - })} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/Section.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/Section.tsx deleted file mode 100644 index 61004b2..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/Section.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { useState, useCallback, useEffect, useRef } from "react"; -import { ChevronDown, ChevronRight } from "lucide-react"; -import type { ReactNode } from "react"; - -export interface SectionProps { - sectionId: string; - titleLabel: string; - showHeader: boolean; - collapsible: boolean; - /** When provided, section is controlled (parent owns state). When undefined, section is uncontrolled (internal state). */ - collapsed?: boolean; - onToggle?: (sectionId: string, collapsed: boolean) => void; - children: ReactNode; -} - -/** - * Section block with optional heading and collapsible content. Controlled when - * `collapsed` is passed; uncontrolled otherwise. Accessible: aria-expanded, aria-controls, keyboard (Enter/Space). - */ -export function Section({ - sectionId, - titleLabel, - showHeader, - collapsible, - collapsed: controlledCollapsed, - onToggle, - children, -}: SectionProps) { - const [internalCollapsed, setInternalCollapsed] = useState(false); - const isControlled = controlledCollapsed !== undefined; - const collapsed = isControlled ? controlledCollapsed : internalCollapsed; - - const warnedUncontrolledRef = useRef(false); - useEffect(() => { - if ( - process.env.NODE_ENV === "development" && - onToggle != null && - !isControlled && - !warnedUncontrolledRef.current - ) { - warnedUncontrolledRef.current = true; - console.warn( - "[Section] onToggle is passed but collapsed is undefined; section is uncontrolled. Pass collapsed to control from parent.", - ); - } - }, [onToggle, isControlled]); - - const contentId = `section-content-${sectionId}`; - const headerId = `section-header-${sectionId}`; - - const handleToggle = useCallback(() => { - const next = !collapsed; - if (!isControlled) setInternalCollapsed(next); - onToggle?.(sectionId, next); - }, [collapsed, isControlled, onToggle, sectionId]); - - const handleKeyDown = useCallback( - (e: React.KeyboardEvent) => { - if (!collapsible) return; - if (e.key === "Enter" || e.key === " ") { - e.preventDefault(); - handleToggle(); - } - }, - [collapsible, handleToggle], - ); - - return ( -
- {showHeader && titleLabel && ( -

- {collapsible ? ( - - ) : ( - {titleLabel} - )} -

- )} - -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/SectionRow.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/SectionRow.tsx deleted file mode 100644 index 85affb9..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/SectionRow.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import type { ReactNode } from "react"; - -export interface SectionRowProps { - children: ReactNode; -} - -/** - * One row of the detail form: definition list (dl) with two-column grid. Each child - * is a layout item (field cell or placeholder) from the layout API row. - */ -export function SectionRow({ children }: SectionRowProps) { - return ( -
- {children} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/UiApiDetailForm.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/UiApiDetailForm.tsx deleted file mode 100644 index b9d6336..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/UiApiDetailForm.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import { useEffect, useMemo } from "react"; -import type { LayoutResponse } from "../../types/recordDetail/recordDetail"; -import { useRecordDetailLayout } from "../../hooks/useRecordDetailLayout"; -import { toRecordDisplayNameMetadata } from "../../utils/fieldUtils"; -import { DetailForm } from "./DetailForm"; -import type { ObjectInfoResult } from "../../types/objectInfo/objectInfo"; -import type { ObjectInfoMetadata } from "../../utils/formDataTransformUtils"; -import type { ObjectInfo } from "../../utils/layoutTransformUtils"; -import type { GraphQLRecordNode } from "../../api/recordListGraphQLService"; -import { getGraphQLRecordDisplayName } from "../../utils/graphQLNodeFieldUtils"; - -export interface UiApiDetailFormProps { - objectApiName: string; - recordId: string; - recordTypeId?: string | null; - /** When provided, skips fetching and uses this layout (controlled mode). */ - layout?: LayoutResponse | null; - /** When provided with layout, skips fetching and uses this record (controlled mode). */ - record?: GraphQLRecordNode | null; - /** When provided, skips fetching and uses this object metadata (controlled mode). */ - objectMetadata?: ObjectInfoResult | null; - /** When true, shows a loading spinner until layout and record are ready. */ - loadsWithSpinner?: boolean; - /** Reserved for future edit mode; no-op in read-only. */ - hideFooter?: boolean; - /** Callback when layout and record are ready (e.g. for parent to show record title). */ - onRecordDataUpdate?: (payload: { recordName: string; record: unknown }) => void; -} - -/** - * Entry component for the record detail view. When layout/record are not provided, - * fetches them via useRecordDetailLayout. Shows optional loading spinner and renders - * a read-only DetailForm when ready. Mirrors LWC uiApiDetailForm (read-only). - * - * Passes objectInfo (mapped from object metadata) to DetailForm for layout transform. - * lookupRecords (picklist/lookup options) are not fetched in this flow; DetailForm - * accepts them when provided (e.g. from a future picklist API). Omit for read-only - * display without API-driven picklist labels. - */ -export function UiApiDetailForm({ - objectApiName, - recordId, - recordTypeId = null, - layout: layoutProp, - record: recordProp, - objectMetadata: objectMetadataProp, - loadsWithSpinner = false, - onRecordDataUpdate, -}: UiApiDetailFormProps) { - // Memoize so hook dependency doesn't change every render (avoids duplicate fetches) - const initialData = useMemo( - () => - layoutProp && recordProp && objectMetadataProp - ? { - layout: layoutProp, - record: recordProp, - objectMetadata: objectMetadataProp, - } - : null, - [layoutProp, recordProp, objectMetadataProp], - ); - - const fetched = useRecordDetailLayout({ - objectApiName, - recordId, - recordTypeId, - initialData, - }); - - const layout = layoutProp ?? fetched.layout; - const record = recordProp ?? fetched.record; - const metadata = objectMetadataProp ?? fetched.objectMetadata; - const loading = layoutProp == null || recordProp == null ? fetched.loading : false; - const error = layoutProp == null || recordProp == null ? fetched.error : null; - - const objectInfo: ObjectInfo | null = useMemo(() => { - if (!metadata?.fields) return null; - const apiName = metadata.ApiName; - return { - apiName, - fields: Object.fromEntries( - Object.entries(metadata.fields).map(([name, f]) => [ - name, - { - compoundFieldName: f.compoundFieldName ?? undefined, - dataType: f.dataType ?? "", - }, - ]), - ), - }; - }, [metadata]); - - const isReadyToRender = Boolean(layout && record && layout.sections?.length); - - const showSpinner = !isReadyToRender && loadsWithSpinner && loading; - - useEffect(() => { - if (!record || !onRecordDataUpdate || !isReadyToRender) return; - onRecordDataUpdate({ - recordName: getGraphQLRecordDisplayName(record, toRecordDisplayNameMetadata(metadata)), - record, - }); - }, [record, metadata, onRecordDataUpdate, isReadyToRender]); - - if (showSpinner) { - return ( -
- Loading record details -
-
- ); - } - - if (error || !layout || !record) { - return null; - } - - if (!isReadyToRender) { - return null; - } - - return ( - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FieldValueDisplay.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FieldValueDisplay.tsx deleted file mode 100644 index 4892a3e..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FieldValueDisplay.tsx +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Picks formatter by dataType (Address, Phone, Url, Email) or plain text. Empty values show "β€”" with a11y label. - */ -import { FormattedAddress } from "./FormattedAddress"; -import { FormattedEmail } from "./FormattedEmail"; -import { FormattedPhone } from "./FormattedPhone"; -import { FormattedText } from "./FormattedText"; -import { FormattedUrl } from "./FormattedUrl"; - -/** Salesforce UI API dataType values that have dedicated formatters. */ -const DATA_TYPES = { - Address: "Address", - Email: "Email", - Phone: "Phone", - Url: "Url", -} as const; - -/** Normalize dataType to canonical casing so "PHONE" / "phone" match Phone, etc. */ -function normalizeDataType(dataType: string | undefined): string | undefined { - if (dataType == null || dataType === "") return dataType; - const lower = dataType.toLowerCase(); - const canonical: Record = { - phone: DATA_TYPES.Phone, - email: DATA_TYPES.Email, - url: DATA_TYPES.Url, - address: DATA_TYPES.Address, - }; - return canonical[lower] ?? dataType; -} - -export interface FieldValueDisplayProps { - /** Resolved display value (string, number, boolean, or null). */ - value: string | number | boolean | null | undefined; - /** Field dataType from object info (e.g. Phone, Email, Url, Address). */ - dataType?: string; - className?: string; -} - -const DEFAULT_CLASS = "text-sm text-foreground"; -const LINK_CLASS = - "text-sm text-foreground text-primary underline underline-offset-2 hover:opacity-80"; - -export function FieldValueDisplay({ - value, - dataType, - className = DEFAULT_CLASS, -}: FieldValueDisplayProps) { - const str = value || null; - - if (str === null) { - return ( - - β€” - - ); - } - - const linkClassName = className === DEFAULT_CLASS ? LINK_CLASS : className; - const normalizedType = normalizeDataType(dataType); - - switch (normalizedType) { - case DATA_TYPES.Address: - return ; - case DATA_TYPES.Phone: - return ; - case DATA_TYPES.Url: - return ; - case DATA_TYPES.Email: - return ; - default: - return ; - } -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedAddress.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedAddress.tsx deleted file mode 100644 index 376724b..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedAddress.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/** Address as link to Google Maps search. External link: target _blank, rel noopener noreferrer. */ - -const GOOGLE_MAPS_SEARCH_BASE = "https://www.google.com/maps/search/?api=1&query="; - -export interface FormattedAddressProps { - /** Full address string (e.g. "10 Main Rd.\nNew York, NY 31349\nUSA"). */ - value: string; - className?: string; -} - -export function FormattedAddress({ value, className }: FormattedAddressProps) { - if (!value || !value.trim()) return null; - const url = GOOGLE_MAPS_SEARCH_BASE + encodeURIComponent(value.trim()); - return ( - - {value.split("\n").map((line, i) => ( - - {line} - - ))} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedEmail.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedEmail.tsx deleted file mode 100644 index 1e464e1..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedEmail.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/** Email as mailto: link. */ - -export interface FormattedEmailProps { - value: string; - className?: string; -} - -export function FormattedEmail({ value, className }: FormattedEmailProps) { - const str = (value || "").trim(); - if (!str) return null; - const href = `mailto:${encodeURIComponent(str)}`; - return ( - - {str} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedPhone.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedPhone.tsx deleted file mode 100644 index 8cf729e..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedPhone.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/** Phone value as tel: link for dialer/VoIP. */ - -export interface FormattedPhoneProps { - value: string; - className?: string; -} - -/** Normalizes value for tel: (digits and + only). */ -function telHref(value: string): string { - const cleaned = value.replace(/[^\d+]/g, ""); - return cleaned ? `tel:${cleaned}` : "#"; -} - -export function FormattedPhone({ value, className }: FormattedPhoneProps) { - if (!value) return null; - const trimmed = (value || "").trim(); - const href = telHref(trimmed); - if (href === "#") return {trimmed}; - return ( - - {trimmed} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedText.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedText.tsx deleted file mode 100644 index 3aa9a35..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedText.tsx +++ /dev/null @@ -1,11 +0,0 @@ -/** Plain-text field value when dataType has no dedicated formatter. */ - -export interface FormattedTextProps { - value: string | number | boolean | null | undefined; - className?: string; -} - -export function FormattedText({ value, className }: FormattedTextProps) { - if (!value) return null; - return {value as string}; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedUrl.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedUrl.tsx deleted file mode 100644 index 27b4388..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/detail/formatted/FormattedUrl.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/** URL as external link (new tab, noopener noreferrer). Falls back to plain text if not http(s). */ - -import { isAllowedLinkUrl } from "../../../utils/linkUtils"; - -export interface FormattedUrlProps { - value: string; - className?: string; - /** Optional display text; defaults to the URL. */ - displayText?: string; -} - -export function FormattedUrl({ value, className, displayText }: FormattedUrlProps) { - const str = (value || "").trim(); - if (!str) return null; - const href = str.startsWith("http://") || str.startsWith("https://") ? str : `https://${str}`; - if (!isAllowedLinkUrl(href)) return {str}; - const label = displayText ?? str; - return ( - - {label} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterField.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterField.tsx deleted file mode 100644 index 5b440a8..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterField.tsx +++ /dev/null @@ -1,54 +0,0 @@ -/** - * FilterField Component - * - * Wrapper component that renders the appropriate filter input type based on filter affordance. - * Routes to FilterInput for text fields or FilterSelect for picklist fields. - * - * @param filter - Filter definition containing field path, label, and affordance - * @param value - Current filter value - * @param picklistValues - Array of picklist options (for select fields) - * @param onChange - Callback when filter value changes - * - * @remarks - * - Automatically determines input type from filter.affordance - * - Returns null if filter is invalid - * - Defaults to text input if affordance is not 'select' - * - * @example - * ```tsx - * setFilterValue(value)} - * /> - * ``` - */ -import FilterInput from "./FilterInput"; -import FilterSelect from "./FilterSelect"; -import type { Filter } from "../../types/filters/filters"; -import type { PicklistValue } from "../../types/filters/picklist"; - -interface FilterFieldProps { - filter: Filter; - value: string; - picklistValues: PicklistValue[]; - onChange: (value: string) => void; -} - -export default function FilterField({ filter, value, picklistValues, onChange }: FilterFieldProps) { - // Guard against invalid filter objects - if (!filter || !filter.targetFieldPath) { - return null; - } - - const affordance = filter.affordance?.toLowerCase() || ""; - - if (affordance === "select") { - const options = picklistValues || []; - return ; - } - - // Default to text input - return ; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterInput.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterInput.tsx deleted file mode 100644 index 2e44ce6..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterInput.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/** - * FilterInput Component - * - * Renders a text input field for filter values. - * Used for filters that don't have a picklist (affordance !== 'select'). - * - * @param filter - Filter definition containing field path, label, and attributes - * @param value - Current filter input value - * @param onChange - Callback when input value changes - * - * @remarks - * - Displays filter label or field path as the label - * - Shows placeholder text from filter attributes or generates default - * - Displays help message if available - * - * @example - * ```tsx - * setFilterValue(value)} - * /> - * ``` - */ -import { Input } from "../../../../components/ui/input"; -import { Field, FieldLabel, FieldDescription } from "../../../../components/ui/field"; -import type { Filter } from "../../types/filters/filters"; - -interface FilterInputProps { - filter: Filter; - value: string; - onChange: (value: string) => void; -} - -export default function FilterInput({ filter, value, onChange }: FilterInputProps) { - return ( - - - {filter.label || filter.targetFieldPath} - - ) => onChange(e.target.value)} - placeholder={ - filter.attributes?.placeholder || - `Enter ${(filter.label || filter.targetFieldPath).toLowerCase()}` - } - aria-label={filter.label || filter.targetFieldPath} - /> - {filter.helpMessage && {filter.helpMessage}} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterSelect.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterSelect.tsx deleted file mode 100644 index eb544c6..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FilterSelect.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/** - * FilterSelect Component - * - * Renders a dropdown select field for filter values with picklist options. - * Used for filters with affordance === 'select'. - * - * @param filter - Filter definition containing field path, label, and attributes - * @param value - Currently selected filter value - * @param options - Array of picklist values to display as options - * @param onChange - Callback when selection changes - * - * @remarks - * - Filters out invalid options (null/undefined values) - * - Displays option label if available, otherwise uses value - * - Shows placeholder from filter attributes or default "Select..." - * - * @example - * ```tsx - * setSelectedValue(value)} - * /> - * ``` - */ -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "../../../../components/ui/select"; -import { Field, FieldLabel, FieldDescription } from "../../../../components/ui/field"; -import type { Filter } from "../../types/filters/filters"; -import type { PicklistValue } from "../../types/filters/picklist"; - -interface FilterSelectProps { - filter: Filter; - value: string; - options: PicklistValue[]; - onChange: (value: string) => void; -} - -export default function FilterSelect({ filter, value, options, onChange }: FilterSelectProps) { - return ( - - - {filter.label || filter.targetFieldPath} - - - {filter.helpMessage && {filter.helpMessage}} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FiltersPanel.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FiltersPanel.tsx deleted file mode 100644 index 370260c..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/filters/FiltersPanel.tsx +++ /dev/null @@ -1,380 +0,0 @@ -/** - * FiltersPanel Component - * - * Displays a panel of filter inputs for refining search results. - * Supports both text inputs and select dropdowns based on filter affordance. - * - * @param filters - Array of filter definitions to display - * @param picklistValues - Record of picklist values keyed by field path - * @param loading - Whether filters are currently loading - * @param onApplyFilters - Callback when filters are applied, receives filter values object - * - * @remarks - * - Automatically initializes filter values from defaultValues - * - Shows loading skeleton while filters are being fetched - * - Supports "Apply Filters" and "Reset" actions - * - Uses TanStack Form for form state management (similar to Login page) - * - Uses FiltersForm wrapper for consistent UX/UI (similar to AuthForm pattern) - * - * @example - * ```tsx - * applyFilters(values)} - * /> - * ``` - */ -import { useState, useMemo, useCallback, useEffect, useRef } from "react"; -import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "../../../../components/ui/card"; -import { Skeleton } from "../../../../components/ui/skeleton"; -import { FiltersForm } from "../forms/filters-form"; -import { Field, FieldLabel, FieldDescription } from "../../../../components/ui/field"; -import { useAppForm, validateRangeValues } from "../../hooks/form"; -import type { Filter, FilterCriteria } from "../../types/filters/filters"; -import type { PicklistValue } from "../../types/filters/picklist"; -import { parseFilterValue } from "../../utils/filterUtils"; -import { sanitizeFilterValue } from "../../utils/sanitizationUtils"; -import { getFormValueByPath } from "../../utils/formUtils"; - -interface FiltersPanelProps { - filters: Filter[]; - picklistValues: Record; - loading: boolean; - objectApiName: string; - onApplyFilters: (filterCriteria: FilterCriteria[]) => void; -} - -export default function FiltersPanel({ - filters, - picklistValues, - loading, - objectApiName, - onApplyFilters, -}: FiltersPanelProps) { - const [submitError, setSubmitError] = useState(null); - const [submitSuccess, setSubmitSuccess] = useState(null); - - const defaultValues = useMemo(() => { - if (!filters || !Array.isArray(filters)) { - return {}; - } - - const values: Record = {}; - filters.forEach((filter) => { - if (filter && filter.targetFieldPath) { - const affordance = filter.affordance?.toLowerCase() || ""; - - if (affordance === "range") { - const minFieldName = `${filter.targetFieldPath}_min`; - const maxFieldName = `${filter.targetFieldPath}_max`; - - if (filter.defaultValues && filter.defaultValues.length >= 2) { - values[minFieldName] = filter.defaultValues[0] || ""; - values[maxFieldName] = filter.defaultValues[1] || ""; - } else { - values[minFieldName] = ""; - values[maxFieldName] = ""; - } - } else { - if (filter.defaultValues && filter.defaultValues.length > 0) { - values[filter.targetFieldPath] = filter.defaultValues[0]; - } else { - values[filter.targetFieldPath] = ""; - } - } - } - }); - return values; - }, [filters]); - - const form = useAppForm({ - defaultValues, - onSubmit: async ({ value }) => { - setSubmitError(null); - setSubmitSuccess(null); - try { - const filterCriteria: FilterCriteria[] = []; - - for (const filter of filters) { - if (!filter || !filter.targetFieldPath) { - continue; - } - - const affordance = filter.affordance?.toLowerCase() || ""; - - if (affordance === "range") { - const minFieldName = `${filter.targetFieldPath}_min`; - const maxFieldName = `${filter.targetFieldPath}_max`; - const minValueRaw = value[minFieldName] || ""; - const maxValueRaw = value[maxFieldName] || ""; - - const minValue = sanitizeFilterValue(minValueRaw); - const maxValue = sanitizeFilterValue(maxValueRaw); - - if (minValue && maxValue) { - const rangeError = validateRangeValues(minValue, maxValue); - if (rangeError) { - setSubmitError(rangeError); - return; - } - } - - if (minValue) { - const parsedMin = parseFilterValue(minValue); - if (parsedMin !== "") { - filterCriteria.push({ - objectApiName, - fieldPath: filter.targetFieldPath, - operator: "gte", - values: [parsedMin], - }); - } - } - - if (maxValue) { - const parsedMax = parseFilterValue(maxValue); - if (parsedMax !== "") { - filterCriteria.push({ - objectApiName, - fieldPath: filter.targetFieldPath, - operator: "lte", - values: [parsedMax], - }); - } - } - } else { - const fieldValueRaw = - getFormValueByPath(value as Record, filter.targetFieldPath) || ""; - const fieldValue = sanitizeFilterValue(fieldValueRaw); - - if (fieldValue) { - if (affordance === "select") { - filterCriteria.push({ - objectApiName, - fieldPath: filter.targetFieldPath, - operator: "eq", - values: [fieldValue], - }); - } else { - const likeValue = `%${fieldValue}%`; - filterCriteria.push({ - objectApiName, - fieldPath: filter.targetFieldPath, - operator: "like", - values: [likeValue], - }); - } - } - } - } - - if (filterCriteria.length === 0) { - setSubmitSuccess("No filters applied. Showing all results."); - } else { - setSubmitSuccess("Filters applied successfully"); - } - - onApplyFilters(filterCriteria); - } catch (err) { - const errorMessage = err instanceof Error ? err.message : "Failed to apply filters"; - setSubmitError(errorMessage); - } - }, - onSubmitInvalid: () => {}, - }); - - const previousDefaultValuesRef = useRef>({}); - const previousLoadingRef = useRef(true); - - useEffect(() => { - const loadingJustCompleted = previousLoadingRef.current && !loading; - const defaultValuesChanged = - JSON.stringify(previousDefaultValuesRef.current) !== JSON.stringify(defaultValues); - - if (loadingJustCompleted && defaultValues && Object.keys(defaultValues).length > 0) { - form.reset(defaultValues); - previousDefaultValuesRef.current = defaultValues; - } else if (defaultValuesChanged && !loading && Object.keys(defaultValues).length > 0) { - form.reset(defaultValues); - previousDefaultValuesRef.current = defaultValues; - } - - previousLoadingRef.current = loading; - }, [loading, defaultValues, form]); - - const handleSuccessDismiss = useCallback(() => { - setSubmitSuccess(null); - }, []); - - const handleReset = useCallback(() => { - if (!filters || !Array.isArray(filters)) { - form.reset(); - onApplyFilters([]); - setSubmitError(null); - setSubmitSuccess(null); - return; - } - - const resetValues: Record = {}; - filters.forEach((filter) => { - if (filter && filter.targetFieldPath) { - const affordance = filter.affordance?.toLowerCase() || ""; - - if (affordance === "range") { - resetValues[`${filter.targetFieldPath}_min`] = ""; - resetValues[`${filter.targetFieldPath}_max`] = ""; - } else { - resetValues[filter.targetFieldPath] = ""; - } - } - }); - form.reset(resetValues); - onApplyFilters([]); - setSubmitError(null); - setSubmitSuccess(null); - }, [filters, onApplyFilters, form]); - - if (loading) { - return ( - - - Filters - - - Loading filters - {[1, 2, 3].map((i) => ( - - ))} - - - ); - } - - if (!filters || !Array.isArray(filters) || filters.length === 0) { - return ( - - - Filters - - -

No filters available

-
-
- ); - } - - return ( - - - {filters.map((filter) => { - if (!filter || !filter.targetFieldPath) { - return null; - } - - const fieldPicklistValues = picklistValues[filter.targetFieldPath] || []; - const affordance = filter.affordance?.toLowerCase() || ""; - - if (affordance === "range") { - const minFieldName = `${filter.targetFieldPath}_min`; - const maxFieldName = `${filter.targetFieldPath}_max`; - const inputType = "text"; - const placeholder = - filter.attributes?.placeholder === "null" - ? undefined - : filter.attributes?.placeholder; - - return ( - - {filter.label || filter.targetFieldPath} - {filter.helpMessage && {filter.helpMessage}} -
- - {(field) => ( - - )} - - - {(field) => ( - - )} - -
-
- ); - } - - if (affordance === "select") { - return ( - - {(field) => ( - - )} - - ); - } - - return ( - - {(field) => ( - - )} - - ); - })} -
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/forms/filters-form.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/forms/filters-form.tsx deleted file mode 100644 index 2f87bb6..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/forms/filters-form.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { FieldGroup } from "../../../../components/ui/field"; -import { StatusAlert } from "../../../../components/alerts/status-alert"; -import { CardLayout } from "../../../../components/layouts/card-layout"; -import { SubmitButton } from "./submit-button"; -import { Button } from "../../../../components/ui/button"; -import { useFormContext } from "../../hooks/form"; -import { useId, useEffect, useRef } from "react"; - -const SUCCESS_AUTO_DISMISS_DELAY = 3000; - -interface FiltersFormProps extends Omit, "onSubmit"> { - title: string; - description?: string; - error?: React.ReactNode; - success?: React.ReactNode; - submit: { - text: string; - loadingText?: string; - }; - reset?: { - text: string; - onReset: () => void; - }; - onSuccessDismiss?: () => void; -} - -/** - * Wrapper component that provides consistent layout and error/success alert positioning - * for all filter forms. - */ -export function FiltersForm({ - id: providedId, - title, - description, - error, - success, - children, - submit, - reset, - onSuccessDismiss, - ...props -}: FiltersFormProps) { - const form = useFormContext(); - const generatedId = useId(); - const id = providedId ?? generatedId; - - const isSubmittingSelector = (state: { isSubmitting: boolean }) => state.isSubmitting; - const timeoutRef = useRef | null>(null); - - useEffect(() => { - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - timeoutRef.current = null; - } - - if (success && onSuccessDismiss) { - timeoutRef.current = setTimeout(() => { - onSuccessDismiss(); - timeoutRef.current = null; - }, SUCCESS_AUTO_DISMISS_DELAY); - } - - return () => { - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - timeoutRef.current = null; - } - }; - }, [success, onSuccessDismiss]); - - return ( - -
- {error && {error}} - {success && {success}} - -
{ - e.preventDefault(); - e.stopPropagation(); - form.handleSubmit(); - }} - {...props} - > - {children} -
- - {reset && ( - - {(isSubmitting: boolean) => ( - - )} - - )} -
-
-
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/forms/submit-button.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/forms/submit-button.tsx deleted file mode 100644 index aae4906..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/forms/submit-button.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Button } from "../../../../components/ui/button"; -import { Spinner } from "../../../../components/ui/spinner"; -import { cn } from "../../../../lib/utils"; -import { useFormContext } from "../../hooks/form"; - -interface SubmitButtonProps extends Omit, "type" | "disabled"> { - /** Button text when not submitting */ - label: string; - /** Button text while submitting */ - loadingLabel?: string; - /** Form id to associate with (for buttons outside form element) */ - form?: string; -} - -const isSubmittingSelector = (state: { isSubmitting: boolean }) => state.isSubmitting; - -/** - * Submit button that subscribes to form submission state. - * Disables interaction during submission and provides visual feedback. - */ -export function SubmitButton({ - label, - loadingLabel = "Applying…", - className, - form: formId, - ...props -}: SubmitButtonProps) { - const form = useFormContext(); - return ( - - {(isSubmitting: boolean) => ( - - )} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/GlobalSearchInput.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/GlobalSearchInput.tsx deleted file mode 100644 index 894adeb..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/GlobalSearchInput.tsx +++ /dev/null @@ -1,114 +0,0 @@ -/** - * GlobalSearchInput Component - * - * Search input with two actions: Search (navigate to results for query) and - * Browse All (navigate to same results UI with all records for the object). - */ -import { useState, useCallback, useMemo, useId } from "react"; -import type { KeyboardEvent, ChangeEvent } from "react"; -import { useNavigate } from "react-router"; -import { Card, CardContent } from "../../../../components/ui/card"; -import { Input } from "../../../../components/ui/input"; -import { Button } from "../../../../components/ui/button"; -import { Search } from "lucide-react"; -import { OBJECT_API_NAMES } from "../../constants"; -import { useObjectInfoBatch } from "../../hooks/useObjectInfoBatch"; - -const BROWSE_SEGMENT = "browse__all"; - -const FALLBACK_LABEL_PLURAL = "records"; - -export function GlobalSearchInput() { - const [searchQuery, setSearchQuery] = useState(""); - const navigate = useNavigate(); - const inputId = useId(); - const searchButtonId = useId(); - const browseButtonId = useId(); - const inputDescriptionId = `${inputId}-description`; - const { objectInfos } = useObjectInfoBatch([...OBJECT_API_NAMES]); - const labelPlural = (objectInfos[0]?.labelPlural as string | undefined) ?? FALLBACK_LABEL_PLURAL; - - const handleInputChange = useCallback((e: ChangeEvent) => { - setSearchQuery(e.target.value); - }, []); - - const handleSearch = useCallback(() => { - const trimmed = searchQuery.trim(); - if (trimmed) { - navigate(`/global-search/${encodeURIComponent(trimmed)}`); - } - }, [searchQuery, navigate]); - - const handleBrowseAll = useCallback(() => { - navigate(`/global-search/${BROWSE_SEGMENT}`); - }, [navigate]); - - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.key === "Enter") { - e.preventDefault(); - handleSearch(); - } - }, - [handleSearch], - ); - - const isSearchDisabled = useMemo(() => !searchQuery.trim(), [searchQuery]); - - return ( -
- - -
-
-
- -
- - -
-
-
-
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/ResultCardFields.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/ResultCardFields.tsx deleted file mode 100644 index d27068e..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/ResultCardFields.tsx +++ /dev/null @@ -1,71 +0,0 @@ -/** - * ResultCardFields Component - * - * Displays secondary fields (up to 3) for a search result card. - * Excludes the primary field and handles nested field values. - * - * @param record - The search result record data - * @param columns - Array of column definitions - * @param excludeFieldApiName - Field API name to exclude (usually the primary field) - * - * @remarks - * - Displays up to 3 secondary fields - * - Handles nested field paths (e.g., "Owner.Alias") - * - Skips fields with null/undefined/empty values - * - Responsive layout (vertical on mobile, horizontal on desktop) - * - * @example - * ```tsx - * - * ``` - */ -import type { Column, SearchResultRecordData } from "../../types/search/searchResults"; -import { getNestedFieldValue } from "../../utils/fieldUtils"; - -interface ResultCardFieldsProps { - record: SearchResultRecordData; - columns: Column[]; - excludeFieldApiName?: string; -} - -export default function ResultCardFields({ - record, - columns, - excludeFieldApiName, -}: ResultCardFieldsProps) { - const secondaryFields = columns.filter( - (col) => col && col.fieldApiName && col.fieldApiName !== excludeFieldApiName, - ); - - return ( -
- {secondaryFields.map((column) => { - if (!column || !column.fieldApiName) { - return null; - } - - const displayValue = getNestedFieldValue(record.fields, column.fieldApiName); - - if (displayValue === null || displayValue === undefined || displayValue === "") { - return null; - } - - return ( -
-
- {column.label || column.fieldApiName}: -
-
{displayValue}
-
- ); - })} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchHeader.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchHeader.tsx deleted file mode 100644 index 90ee379..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchHeader.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/** - * SearchHeader Component - * - * Displays the header for search results or browse-all (same UI). - * labelPlural comes from object metadata (e.g. useObjectInfoBatch) so it is not hard-coded. - */ -interface SearchHeaderProps { - query?: string; - isBrowseAll?: boolean; - /** Plural label for the primary object (e.g. "Accounts"). From object metadata. */ - labelPlural?: string; -} - -export default function SearchHeader({ - query, - isBrowseAll, - labelPlural = "records", -}: SearchHeaderProps) { - return ( -
-

- {isBrowseAll ? `Browse All ${labelPlural}` : "Search Results"} -

- {!isBrowseAll && query && ( -

- Results for: "{query}" -

- )} -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchResultCard.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchResultCard.tsx deleted file mode 100644 index 4505fb5..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchResultCard.tsx +++ /dev/null @@ -1,138 +0,0 @@ -/** - * SearchResultCard Component - * - * Displays a single search result as a card with primary and secondary fields. - * Clicking the card navigates to the detail page for that record. - * - * @param record - The search result record data to display - * @param columns - Array of column definitions for field display - * @param objectApiName - API name of the object (path param in detail URL: /object/:objectApiName/:recordId) - * - * @remarks - * - Automatically identifies the primary field (usually "Name") - * - Displays up to 3 secondary fields - * - Supports keyboard navigation (Enter/Space to navigate) - * - Handles nested field values (e.g., "Owner.Alias") - * - * @example - * ```tsx - * - * ``` - */ -import React from "react"; -import { useNavigate } from "react-router"; -import { useMemo, useCallback } from "react"; -import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "../../../../components/ui/card"; -import type { Column, SearchResultRecordData } from "../../types/search/searchResults"; -import { getNestedFieldValue } from "../../utils/fieldUtils"; -import ResultCardFields from "./ResultCardFields"; -import { OBJECT_API_NAMES } from "../../constants"; - -interface SearchResultCardProps { - record: SearchResultRecordData; - columns: Column[]; - objectApiName?: string; -} - -export default function SearchResultCard({ - record, - columns, - objectApiName, -}: SearchResultCardProps) { - const navigate = useNavigate(); - - const validColumns = useMemo( - () => (columns && Array.isArray(columns) && columns.length > 0 ? columns : []), - [columns], - ); - const validRecord = - record?.id && record?.fields && typeof record.fields === "object" ? record : null; - - const detailPath = useMemo( - () => - validRecord - ? `/object/${objectApiName?.trim() || OBJECT_API_NAMES[0]}/${validRecord.id}` - : "", - [validRecord, objectApiName], - ); - - const handleClick = useCallback(() => { - if (validRecord?.id) navigate(detailPath); - }, [validRecord?.id, detailPath, navigate]); - - const handleKeyDown = useCallback( - (e: React.KeyboardEvent) => { - if (e.key === "Enter" || e.key === " ") { - e.preventDefault(); - handleClick(); - } - }, - [handleClick], - ); - - const primaryField = useMemo(() => { - return ( - validColumns.find( - (col) => - col && - col.fieldApiName && - (col.fieldApiName.toLowerCase() === "name" || - col.fieldApiName.toLowerCase().includes("name")), - ) || - validColumns[0] || - null - ); - }, [validColumns]); - - const primaryValue = useMemo(() => { - return primaryField && primaryField.fieldApiName && validRecord?.fields - ? getNestedFieldValue(validRecord.fields, primaryField.fieldApiName) || "Untitled" - : "Untitled"; - }, [primaryField, validRecord]); - - const secondaryColumns = useMemo(() => { - return validColumns.filter( - (col) => col && col.fieldApiName && col.fieldApiName !== primaryField?.fieldApiName, - ); - }, [validColumns, primaryField]); - - if (!validRecord) return null; - if (validColumns.length === 0) return null; - - return ( - - - - {primaryValue} - - - -
- Search result: {primaryValue} -
- -
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchResultsPanel.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchResultsPanel.tsx deleted file mode 100644 index 17e0e5a..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchResultsPanel.tsx +++ /dev/null @@ -1,197 +0,0 @@ -/** - * SearchResultsPanel Component - * - * Displays the search results panel with loading, error, and empty states. - * Renders a list of SearchResultCard components and pagination controls. - * - * @param columns - Array of column definitions for displaying result data - * @param results - Array of search result records to display - * @param columnsLoading - Whether column metadata is currently loading - * @param resultsLoading - Whether search results are currently loading - * @param columnsError - Error message if column fetch failed - * @param resultsError - Error message if results fetch failed - * @param currentPageToken - Current pagination token - * @param pageSize - Number of results per page - * @param onPageChange - Callback when pagination changes; second arg optional: "next" | "prev" | "first" (cursor-stack pagination) - * @param onPageSizeChange - Callback when page size changes - * - * @example - * ```tsx - * handlePageChange(token, direction)} - * onPageSizeChange={(size) => setPageSize(size)} - * /> - * ``` - */ -import { useMemo } from "react"; -import { Alert, AlertDescription, AlertTitle } from "../../../../components/ui/alert"; -import { Skeleton } from "../../../../components/ui/skeleton"; -import { AlertCircle } from "lucide-react"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "../../../../components/ui/select"; -import { Label } from "../../../../components/ui/label"; -import SearchResultCard from "./SearchResultCard"; -import SearchPagination from "./SearchPagination"; -import type { Column, SearchResultRecord } from "../../types/search/searchResults"; -import { getSafeKey } from "../../utils/recordUtils"; - -interface SearchResultsPanelProps { - /** API name of the object being searched (e.g. for detail page navigation). */ - objectApiName?: string; - columns: Column[]; - results: SearchResultRecord[]; - columnsLoading: boolean; - resultsLoading: boolean; - columnsError: string | null; - resultsError: string | null; - currentPageToken: string; - nextPageToken: string | null; - previousPageToken: string | null; - hasNextPage?: boolean; - hasPreviousPage?: boolean; - pageSize: number; - sortBy: string; - onPageChange: (newPageToken: string, direction?: "next" | "prev" | "first") => void; - onPageSizeChange: (newPageSize: number) => void; - onSortByChange: (newSortBy: string) => void; -} - -export default function SearchResultsPanel({ - objectApiName, - columns, - results, - columnsLoading, - resultsLoading, - columnsError, - resultsError, - currentPageToken, - nextPageToken, - previousPageToken, - hasNextPage = false, - hasPreviousPage = false, - pageSize, - sortBy, - onPageChange, - onPageSizeChange, - onSortByChange, -}: SearchResultsPanelProps) { - const sortableColumns = useMemo(() => columns.filter(({ sortable }) => sortable), [columns]); - - const validResults = useMemo( - () => results.filter((record) => record && record.record && record.record.id), - [results], - ); - if (columnsError || resultsError) { - return ( - - - ); - } - - if (resultsLoading || columnsLoading) { - return ( -
- Loading search results - {[1, 2, 3].map((i) => ( - - ))} -
- ); - } - - if (results.length === 0) { - return ( -
-

No results found

-

Try adjusting your search query or filters

-
- ); - } - - return ( - <> - {sortableColumns.length > 0 && ( -
- - -
- )} - -
- {validResults.map((record, index) => { - const recordId = record.record.id; - const safeKey = getSafeKey(recordId, index); - return ( -
- -
- ); - })} -
- - - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/shared/LoadingFallback.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/shared/LoadingFallback.tsx deleted file mode 100644 index 61572e7..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/shared/LoadingFallback.tsx +++ /dev/null @@ -1,61 +0,0 @@ -/** - * LoadingFallback Component - * - * Loading fallback component for Suspense boundaries. - * Displays a centered spinner while lazy-loaded components are being fetched. - * - * @remarks - * - Used with React Suspense for code splitting - * - Simple centered spinner design - * - Responsive and accessible - * - * @example - * ```tsx - * }> - * - * - * ``` - */ -import { cva, type VariantProps } from "class-variance-authority"; -import { Spinner } from "../../../../components/ui/spinner"; - -/** - * Spinner size variants based on content width. - */ -const spinnerVariants = cva("", { - variants: { - contentMaxWidth: { - sm: "size-6", - md: "size-8", - lg: "size-10", - }, - }, - defaultVariants: { - contentMaxWidth: "sm", - }, -}); - -interface LoadingFallbackProps extends VariantProps { - /** - * Maximum width of the content container. Also scales the spinner size. - * @default "sm" - */ - contentMaxWidth?: "sm" | "md" | "lg"; - /** - * Accessible label for screen readers. - * @default "Loading…" - */ - loadingText?: string; -} - -export default function LoadingFallback({ - contentMaxWidth = "sm", - loadingText = "Loading…", -}: LoadingFallbackProps) { - return ( -
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/constants.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/constants.ts deleted file mode 100644 index 82eefda..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/constants.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Application-wide Constants - * - * Defines constants used throughout the global search feature. - */ - -/** - * Object API names to search across in the global search feature. - * Currently supports single object search. - * - * @remarks - * - Array of Salesforce object API names - * - First element is used as the primary search object - * - Can be extended to support multiple objects in the future - * - * @example - * ```tsx - * const objectApiName = OBJECT_API_NAMES[0]; // 'Account' - * ``` - */ -export const OBJECT_API_NAMES = ["Account"] as const; - -/** Fallback title when record display name cannot be resolved (e.g. before load or no name field). */ -export const DEFAULT_DETAIL_PAGE_TITLE = "Untitled"; - -/** - * Default page size for search results pagination. - * This should match one of the values in PAGE_SIZE_OPTIONS from paginationUtils. - * - * @remarks - * - Default value is 20 (second option in PAGE_SIZE_OPTIONS) - * - Can be changed by user via pagination controls - * - * @example - * ```tsx - * const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); - * ``` - */ -export const DEFAULT_PAGE_SIZE = 20; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/filters/FilterInput.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/filters/FilterInput.tsx deleted file mode 100644 index 6487b58..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/filters/FilterInput.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/** - * FilterInput Component - * - * Renders a text input field for filter values. - * Used for filters that don't have a picklist (affordance !== 'select'). - * - * @param filter - Filter definition containing field path, label, and attributes - * @param value - Current filter input value - * @param onChange - Callback when input value changes - * - * @remarks - * - Displays filter label or field path as the label - * - Shows placeholder text from filter attributes or generates default - * - Displays help message if available - * - * @example - * ```tsx - * setFilterValue(value)} - * /> - * ``` - */ -import { Input } from "../../../components/ui/input"; -import { Field, FieldLabel, FieldDescription } from "../../../components/ui/field"; -import type { Filter } from "../types/filters/filters"; - -interface FilterInputProps { - filter: Filter; - value: string; - onChange: (value: string) => void; -} - -export default function FilterInput({ filter, value, onChange }: FilterInputProps) { - return ( - - - {filter.label || filter.targetFieldPath} - - ) => onChange(e.target.value)} - placeholder={ - filter.attributes?.placeholder || - `Enter ${(filter.label || filter.targetFieldPath).toLowerCase()}` - } - aria-label={filter.label || filter.targetFieldPath} - /> - {filter.helpMessage && {filter.helpMessage}} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/filters/FilterSelect.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/filters/FilterSelect.tsx deleted file mode 100644 index e7d2e26..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/filters/FilterSelect.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/** - * FilterSelect Component - * - * Renders a dropdown select field for filter values with picklist options. - * Used for filters with affordance === 'select'. - * - * @param filter - Filter definition containing field path, label, and attributes - * @param value - Currently selected filter value - * @param options - Array of picklist values to display as options - * @param onChange - Callback when selection changes - * - * @remarks - * - Filters out invalid options (null/undefined values) - * - Displays option label if available, otherwise uses value - * - Shows placeholder from filter attributes or default "Select..." - * - * @example - * ```tsx - * setSelectedValue(value)} - * /> - * ``` - */ -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "../../../components/ui/select"; -import { Field, FieldLabel, FieldDescription } from "../../../components/ui/field"; -import type { Filter } from "../types/filters/filters"; -import type { PicklistValue } from "../types/filters/picklist"; - -interface FilterSelectProps { - filter: Filter; - value: string; - options: PicklistValue[]; - onChange: (value: string) => void; -} - -export default function FilterSelect({ filter, value, options, onChange }: FilterSelectProps) { - return ( - - - {filter.label || filter.targetFieldPath} - - - {filter.helpMessage && {filter.helpMessage}} - - ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/form.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/form.tsx deleted file mode 100644 index 0b7f9dd..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/form.tsx +++ /dev/null @@ -1,209 +0,0 @@ -import React, { useId } from "react"; -import { createFormHookContexts, createFormHook } from "@tanstack/react-form"; -import { - Field, - FieldDescription, - FieldError, - FieldLabel, -} from "../../../components/ui/field"; -import { Input } from "../../../components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "../../../components/ui/select"; -import { cn } from "../../../lib/utils"; -import type { PicklistValue } from "../types/filters/picklist"; -import { getUniqueErrors } from "../utils/formUtils"; - -export type { FormError } from "../utils/formUtils"; -export { validateRangeValues } from "../utils/formUtils"; - -export const { fieldContext, formContext, useFieldContext, useFormContext } = - createFormHookContexts(); - -interface FilterTextFieldProps extends Omit< - React.ComponentProps, - "name" | "value" | "onBlur" | "onChange" | "aria-invalid" -> { - label: string; - description?: React.ReactNode; - placeholder?: string; -} - -function FilterTextField({ - label, - id: providedId, - description, - placeholder, - type = "text", - ...props -}: FilterTextFieldProps) { - const field = useFieldContext(); - const generatedId = useId(); - const id = providedId ?? generatedId; - const descriptionId = `${id}-description`; - const errorId = `${id}-error`; - const isInvalid = field.state.meta.isTouched && field.state.meta.errors.length > 0; - - const uniqueErrors = getUniqueErrors(field.state.meta.errors); - - return ( - - {label} - {description && {description}} - ) => field.handleChange(e.target.value)} - placeholder={placeholder} - aria-invalid={isInvalid} - aria-describedby={cn(description && descriptionId, isInvalid && errorId)} - {...props} - /> - {isInvalid && uniqueErrors.length > 0 && } - - ); -} - -interface FilterSelectFieldProps { - label: string; - id?: string; - description?: React.ReactNode; - placeholder?: string; - options: PicklistValue[]; -} - -function FilterSelectField({ - label, - id: providedId, - description, - placeholder = "Select...", - options, -}: FilterSelectFieldProps) { - const field = useFieldContext(); - const generatedId = useId(); - const id = providedId ?? generatedId; - const descriptionId = `${id}-description`; - const errorId = `${id}-error`; - const isInvalid = field.state.meta.isTouched && field.state.meta.errors.length > 0; - - const uniqueErrors = getUniqueErrors(field.state.meta.errors); - - return ( - - {label} - {description && {description}} - - {isInvalid && uniqueErrors.length > 0 && } - - ); -} - -interface FilterRangeFieldProps extends Omit< - React.ComponentProps, - "name" | "value" | "onBlur" | "onChange" | "aria-invalid" -> { - label?: string; - description?: React.ReactNode; - placeholder?: string; -} - -function FilterRangeFieldBase({ - label, - id: providedId, - description, - placeholder, - type = "text", - ...props -}: FilterRangeFieldProps) { - const field = useFieldContext(); - const generatedId = useId(); - const id = providedId ?? generatedId; - const descriptionId = `${id}-description`; - const errorId = `${id}-error`; - const isInvalid = field.state.meta.isTouched && field.state.meta.errors.length > 0; - - const uniqueErrors = getUniqueErrors(field.state.meta.errors); - - return ( -
- {label && {label}} - {description && {description}} - ) => field.handleChange(e.target.value)} - placeholder={placeholder} - aria-invalid={isInvalid} - aria-describedby={cn(description && descriptionId, isInvalid && errorId)} - {...props} - /> - {isInvalid && uniqueErrors.length > 0 && } -
- ); -} - -interface FilterRangeMinFieldProps extends Omit< - React.ComponentProps, - "name" | "value" | "onBlur" | "onChange" | "aria-invalid" -> { - label?: string; - description?: React.ReactNode; - placeholder?: string; -} - -interface FilterRangeMaxFieldProps extends Omit< - React.ComponentProps, - "name" | "value" | "onBlur" | "onChange" | "aria-invalid" -> { - label?: string; - description?: React.ReactNode; - placeholder?: string; -} - -function FilterRangeMinField({ placeholder = "Min", ...props }: FilterRangeMinFieldProps) { - return ; -} - -function FilterRangeMaxField({ placeholder = "Max", ...props }: FilterRangeMaxFieldProps) { - return ; -} - -export const { useAppForm } = createFormHook({ - fieldContext, - formContext, - fieldComponents: { - FilterTextField, - FilterSelectField, - FilterRangeMinField, - FilterRangeMaxField, - }, - formComponents: {}, -}); diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useObjectInfoBatch.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useObjectInfoBatch.ts deleted file mode 100644 index 990a2d6..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useObjectInfoBatch.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * useObjectInfoBatch - * - * Fetches object metadata (label, labelPlural, fields, etc.) for the given object API names. - * Uses the shared cache in objectInfoService so List, Home, and Detail views reuse one request. - */ - -import { useState, useEffect, useRef } from "react"; -import { objectInfoService } from "../api/objectInfoService"; -import type { ObjectInfoResult } from "../types/objectInfo/objectInfo"; - -export interface UseObjectInfoBatchResult { - /** Object metadata in the same order as the requested objectApiNames. */ - objectInfos: ObjectInfoResult[]; - loading: boolean; - error: string | null; -} - -/** - * Fetches batch object info for the given object API names. Results are cached; - * multiple callers (List, Home, Detail) share the same request. - * - * @param objectApiNames - Array of object API names (e.g. OBJECT_API_NAMES) - * @returns objectInfos (same order as input), loading, error - */ -export function useObjectInfoBatch(objectApiNames: string[]): UseObjectInfoBatchResult { - const [state, setState] = useState({ - objectInfos: [], - loading: objectApiNames.length > 0, - error: null, - }); - const isCancelled = useRef(false); - // Derive a stable primitive from the array so the effect dependency doesn't - // change on every render. A new array reference (even with identical contents) - // would otherwise trigger the effect on every render, causing an infinite loop. - const namesKey = objectApiNames.filter(Boolean).join(","); - - useEffect(() => { - isCancelled.current = false; - // Re-derive the array inside the effect from the stable key rather than - // closing over objectApiNames directly, which would require it in the dep - // array and reintroduce the infinite loop. - const names = namesKey ? namesKey.split(",") : []; - if (names.length === 0) { - queueMicrotask(() => setState({ objectInfos: [], loading: false, error: null })); - return; - } - queueMicrotask(() => setState((s) => ({ ...s, loading: true, error: null }))); - objectInfoService - .getObjectInfoBatch(namesKey) - .then((res) => { - if (isCancelled.current) return; - const objectInfos = names - .map((apiName) => res.results?.find((r) => r.result?.ApiName === apiName)?.result) - .filter((r) => r != null) as ObjectInfoResult[]; - setState({ objectInfos, loading: false, error: null }); - }) - .catch((err) => { - if (isCancelled.current) return; - setState({ - objectInfos: [], - loading: false, - error: err instanceof Error ? err.message : (err as string), - }); - }); - return () => { - isCancelled.current = true; - }; - }, [namesKey]); - - return state; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useObjectSearchData.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useObjectSearchData.ts deleted file mode 100644 index 833d16f..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useObjectSearchData.ts +++ /dev/null @@ -1,174 +0,0 @@ -/** - * Object Search Data Hooks - * - * - useObjectListMetadata: single source for list-view metadata (filters β†’ columns + picklists). Use in list pages to avoid duplicate state and API calls. - * - useObjectColumns / useObjectFilters: thin wrappers over useObjectListMetadata for backward compatibility. - * - getSharedFilters: module-level deduplication for getObjectListFilters across hook instances. - */ - -import { useState, useEffect } from "react"; -import { objectInfoService } from "../api/objectInfoService"; -import type { Column } from "../types/search/searchResults"; -import type { Filter } from "../types/filters/filters"; -import type { PicklistValue } from "../types/filters/picklist"; - -// --- Shared filters cache (deduplicates getObjectListFilters across useObjectColumns + useObjectFilters) --- -const sharedFiltersCache = new Map(); -const sharedFiltersInFlight = new Map>(); - -function getSharedFilters(objectApiName: string): Promise { - const cached = sharedFiltersCache.get(objectApiName); - if (cached) return Promise.resolve(cached); - const inFlight = sharedFiltersInFlight.get(objectApiName); - if (inFlight) return inFlight; - const promise = objectInfoService - .getObjectListFilters(objectApiName) - .then((filters) => { - sharedFiltersCache.set(objectApiName, filters); - sharedFiltersInFlight.delete(objectApiName); - return filters; - }) - .catch((err) => { - sharedFiltersInFlight.delete(objectApiName); - throw err; - }); - sharedFiltersInFlight.set(objectApiName, promise); - return promise; -} - -// --- Shared Types --- -export interface FiltersData { - filters: Filter[]; - picklistValues: Record; - loading: boolean; - error: string | null; -} - -/** - * Derives column definitions from filter definitions for list/result UI. - */ -function filtersToColumns(filters: Filter[]): Column[] { - return filters.map((f) => ({ - fieldApiName: f.targetFieldPath, - label: f.label, - searchable: true, - sortable: true, - })); -} - -export interface ObjectListMetadata { - columns: Column[]; - filters: Filter[]; - picklistValues: Record; - loading: boolean; - error: string | null; -} - -/** - * Single hook for list-view metadata: filters (shared API), derived columns, and picklist values. - * Use this in list/search pages to avoid duplicate useObjectColumns + useObjectFilters and duplicate state. - */ -export function useObjectListMetadata(objectApiName: string | null): ObjectListMetadata { - const [state, setState] = useState<{ - columns: Column[]; - filters: Filter[]; - picklistValues: Record; - loading: boolean; - error: string | null; - }>({ - columns: [], - filters: [], - picklistValues: {}, - loading: true, - error: null, - }); - - useEffect(() => { - if (!objectApiName) { - queueMicrotask(() => setState((s) => ({ ...s, loading: false, error: "Invalid object" }))); - return; - } - - let isCancelled = false; - - const run = async () => { - queueMicrotask(() => setState((s) => ({ ...s, loading: true, error: null }))); - try { - const filters = await getSharedFilters(objectApiName!); - if (isCancelled) return; - - const selectFilters = filters.filter((f) => f.affordance?.toLowerCase() === "select"); - const picklistPromises = selectFilters.map((f) => - objectInfoService - .getPicklistValues(objectApiName!, f.targetFieldPath) - .then((values) => ({ fieldPath: f.targetFieldPath, values })) - .catch(() => ({ fieldPath: f.targetFieldPath, values: [] as PicklistValue[] })), - ); - const picklistResults = await Promise.all(picklistPromises); - if (isCancelled) return; - - const picklistValues: Record = {}; - picklistResults.forEach(({ fieldPath, values }) => { - picklistValues[fieldPath] = values; - }); - - setState({ - columns: filtersToColumns(filters), - filters, - picklistValues, - loading: false, - error: null, - }); - } catch { - if (isCancelled) return; - setState((s) => ({ - ...s, - columns: [], - filters: [], - picklistValues: {}, - loading: false, - error: "Failed to load list metadata", - })); - } - }; - - run(); - return () => { - isCancelled = true; - }; - }, [objectApiName]); - - return state; -} - -/** - * Hook: useObjectColumns - * Thin wrapper over useObjectListMetadata for backward compatibility. - */ -export function useObjectColumns(objectApiName: string | null) { - const { columns, loading, error } = useObjectListMetadata(objectApiName); - return { - columns: objectApiName ? columns : [], - columnsLoading: loading, - columnsError: error, - }; -} - -/** - * Hook: useObjectFilters - * Thin wrapper over useObjectListMetadata for backward compatibility. - */ -export function useObjectFilters(objectApiName: string | null) { - const { filters, picklistValues, loading, error } = useObjectListMetadata(objectApiName); - const filtersData: Record = objectApiName - ? { - [objectApiName]: { - filters, - picklistValues, - loading, - error, - }, - } - : {}; - return { filtersData }; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useRecordDetailLayout.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useRecordDetailLayout.ts deleted file mode 100644 index 71abd3a..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useRecordDetailLayout.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { useState, useEffect, useRef } from "react"; -import { objectDetailService } from "../api/objectDetailService"; -import type { LayoutResponse } from "../types/recordDetail/recordDetail"; -import type { ObjectInfoResult } from "../types/objectInfo/objectInfo"; -import type { GraphQLRecordNode } from "../api/recordListGraphQLService"; - -export interface UseRecordDetailLayoutReturn { - layout: LayoutResponse | null; - record: GraphQLRecordNode | null; - objectMetadata: ObjectInfoResult | null; - loading: boolean; - error: string | null; -} - -export interface UseRecordDetailLayoutParams { - objectApiName: string | null; - recordId: string | null; - recordTypeId?: string | null; - initialData?: { - layout: LayoutResponse; - record: GraphQLRecordNode; - objectMetadata: ObjectInfoResult; - } | null; -} - -const MAX_CACHE_SIZE = 50; -const CACHE_TTL_MS = 5 * 60 * 1000; - -type CacheEntry = { - layout: LayoutResponse; - record: GraphQLRecordNode; - objectMetadata: ObjectInfoResult; - cachedAt: number; -}; - -export function useRecordDetailLayout({ - objectApiName, - recordId, - recordTypeId = null, - initialData = null, -}: UseRecordDetailLayoutParams): UseRecordDetailLayoutReturn { - const [layout, setLayout] = useState(initialData?.layout ?? null); - const [record, setRecord] = useState(initialData?.record ?? null); - const [objectMetadata, setObjectMetadata] = useState( - initialData?.objectMetadata ?? null, - ); - const [loading, setLoading] = useState(!initialData); - const [error, setError] = useState(null); - - const cacheKey = - objectApiName && recordId ? `${objectApiName}:${recordId}:${recordTypeId ?? "default"}` : null; - const cacheRef = useRef>(new Map()); - - useEffect(() => { - if (!objectApiName || !recordId) { - setError("Invalid object or record ID"); - setLoading(false); - return; - } - - if ( - initialData?.layout != null && - initialData?.record != null && - initialData?.objectMetadata != null - ) { - return; - } - - const cached = cacheRef.current.get(cacheKey!); - const now = Date.now(); - if (cached && now - cached.cachedAt < CACHE_TTL_MS) { - setLayout(cached.layout); - setRecord(cached.record); - setObjectMetadata(cached.objectMetadata); - setLoading(false); - setError(null); - return; - } - - let isCancelled = false; - - const fetchDetail = async () => { - setLoading(true); - setError(null); - - try { - const { - layout: layoutData, - record: recordData, - objectMetadata: objectMetadataData, - } = await objectDetailService.getRecordDetail( - objectApiName, - recordId, - recordTypeId ?? undefined, - ); - - if (isCancelled) return; - - const cache = cacheRef.current; - if (cache.size >= MAX_CACHE_SIZE) { - const firstKey = cache.keys().next().value; - if (firstKey != null) cache.delete(firstKey); - } - cache.set(cacheKey!, { - layout: layoutData, - record: recordData, - objectMetadata: objectMetadataData, - cachedAt: Date.now(), - }); - setLayout(layoutData); - setRecord(recordData); - setObjectMetadata(objectMetadataData); - } catch { - if (isCancelled) return; - setError("Failed to load record details"); - } finally { - if (!isCancelled) { - setLoading(false); - } - } - }; - - fetchDetail(); - - return () => { - isCancelled = true; - }; - }, [objectApiName, recordId, recordTypeId, cacheKey, initialData]); - - return { - layout, - record, - objectMetadata, - loading, - error, - }; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useRecordListGraphQL.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useRecordListGraphQL.ts deleted file mode 100644 index 39ebf85..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/hooks/useRecordListGraphQL.ts +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Record list hook: GraphQL records with filter, sort, pagination, search. - * Use for list/search views; detail view uses useRecordDetailLayout instead. - * - * @module hooks/useRecordListGraphQL - */ - -import { useState, useEffect, useCallback } from "react"; -import { useObjectColumns } from "./useObjectSearchData"; -import { - getRecordsGraphQL, - buildOrderByFromSort, - type RecordListGraphQLResult, -} from "../api/recordListGraphQLService"; -import type { Column } from "../types/search/searchResults"; -import type { FilterCriteria } from "../types/filters/filters"; - -const EMPTY_FILTERS: FilterCriteria[] = []; - -export interface UseRecordListGraphQLOptions { - objectApiName: string; - first?: number; - after?: string | null; - filters?: FilterCriteria[]; - sortBy?: string; - searchQuery?: string; - /** When provided, skips useObjectColumns (use from parent e.g. useObjectListMetadata). */ - columns?: Column[]; - columnsLoading?: boolean; - columnsError?: string | null; -} - -export interface UseRecordListGraphQLReturn { - data: RecordListGraphQLResult | null; - edges: Array<{ node?: Record }>; - pageInfo: { - hasNextPage?: boolean; - hasPreviousPage?: boolean; - endCursor?: string | null; - startCursor?: string | null; - } | null; - loading: boolean; - error: string | null; - columnsLoading: boolean; - columnsError: string | null; - refetch: () => void; -} - -/** - * Fetches records via GraphQL for the given object with filter, sort, pagination, and search. - */ -export function useRecordListGraphQL( - options: UseRecordListGraphQLOptions, -): UseRecordListGraphQLReturn { - const { - objectApiName, - first = 50, - after = null, - filters = EMPTY_FILTERS, - sortBy = "", - searchQuery = "", - columns: columnsProp, - columnsLoading: columnsLoadingProp, - columnsError: columnsErrorProp, - } = options; - - const fromParent = columnsProp !== undefined; - const fromHook = useObjectColumns(fromParent ? null : objectApiName); - - const columns = fromParent ? columnsProp : fromHook.columns; - const columnsLoading = fromParent ? (columnsLoadingProp ?? false) : fromHook.columnsLoading; - const columnsError = fromParent ? (columnsErrorProp ?? null) : fromHook.columnsError; - - const [data, setData] = useState(null); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - - const fetchRecords = useCallback(() => { - if (columnsLoading || columnsError || columns.length === 0) return; - - setLoading(true); - setError(null); - const orderBy = buildOrderByFromSort(sortBy); - - getRecordsGraphQL({ - objectApiName, - columns, - first, - after, - filters, - orderBy, - searchQuery: searchQuery.trim() || undefined, - }) - .then((result) => { - setData(result); - }) - .catch((err) => { - setError(err instanceof Error ? err.message : "Failed to load records"); - }) - .finally(() => { - setLoading(false); - }); - }, [ - objectApiName, - columns, - columnsLoading, - columnsError, - first, - after, - filters, - sortBy, - searchQuery, - ]); - - useEffect(() => { - if (!objectApiName || columnsLoading || columnsError) return; - if (columns.length === 0 && !columnsLoading) return; - queueMicrotask(() => fetchRecords()); - }, [objectApiName, columns, columnsLoading, columnsError, fetchRecords]); - - const objectData = data?.uiapi?.query?.[objectApiName]; - const edges = objectData?.edges ?? []; - const pageInfo = objectData?.pageInfo ?? null; - - return { - data, - edges, - pageInfo, - loading: columnsLoading || loading, - error: columnsError || error, - columnsLoading, - columnsError, - refetch: fetchRecords, - }; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/pages/DetailPage.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/pages/DetailPage.tsx deleted file mode 100644 index 2ae6f6f..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/pages/DetailPage.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import { useMemo } from "react"; -import { useParams, useNavigate } from "react-router"; -import { Card, CardContent, CardHeader, CardTitle } from "../../../components/ui/card"; -import { Skeleton } from "../../../components/ui/skeleton"; -import { Alert, AlertDescription, AlertTitle } from "../../../components/ui/alert"; -import { AlertCircle } from "lucide-react"; -import DetailHeader from "../components/detail/DetailHeader"; -import { UiApiDetailForm } from "../components/detail/UiApiDetailForm"; -import { OBJECT_API_NAMES, DEFAULT_DETAIL_PAGE_TITLE } from "../constants"; -import { toRecordDisplayNameMetadata } from "../utils/fieldUtils"; -import { useRecordDetailLayout } from "../hooks/useRecordDetailLayout"; -import { getGraphQLRecordDisplayName } from "../utils/graphQLNodeFieldUtils"; - -export default function DetailPage() { - const { objectApiName: objectApiNameParam, recordId } = useParams<{ - objectApiName: string; - recordId: string; - }>(); - const navigate = useNavigate(); - const objectApiName = objectApiNameParam ?? OBJECT_API_NAMES[0]; - - const { layout, record, objectMetadata, loading, error } = useRecordDetailLayout({ - objectApiName, - recordId: recordId ?? null, - }); - - const recordTitle = useMemo( - () => - record - ? getGraphQLRecordDisplayName(record, toRecordDisplayNameMetadata(objectMetadata)) - : DEFAULT_DETAIL_PAGE_TITLE, - [record, objectMetadata], - ); - - const handleBack = () => navigate(-1); - - if (loading) { - return ( -
- Loading record details -
- ); - } - - if (error) { - return ( -
- - - -
- ); - } - - if (!layout || !record) { - return ( -
- - - -
- ); - } - - return ( -
- - - - {recordTitle} - - - - - -
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/pages/GlobalSearch.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/pages/GlobalSearch.tsx deleted file mode 100644 index 3031ce7..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/pages/GlobalSearch.tsx +++ /dev/null @@ -1,235 +0,0 @@ -/** - * GlobalSearch Page Component - * - * Main page component for displaying global search results. - * Uses GraphQL API (useRecordListGraphQL) for list data; results are adapted to the - * same record shape as before so SearchResultCard and filters/sort/pagination work unchanged. - * - * @remarks - * - Supports single object search (no tabs) - * - Displays filters panel on the left and results on the right - * - Pagination uses a cursor stack: we only query forward (first + after) and store endCursor per page; - * Previous re-queries using the stored cursor for the previous page so both Next and Previous work. - */ -import { useMemo, useState, useCallback, useEffect, useRef } from "react"; -import { useParams } from "react-router"; -import { OBJECT_API_NAMES, DEFAULT_PAGE_SIZE } from "../constants"; -import { useObjectListMetadata } from "../hooks/useObjectSearchData"; -import { useObjectInfoBatch } from "../hooks/useObjectInfoBatch"; -import { useRecordListGraphQL } from "../hooks/useRecordListGraphQL"; -import FiltersPanel from "../components/filters/FiltersPanel"; -import SearchHeader from "../components/search/SearchHeader"; -import SearchResultsPanel from "../components/search/SearchResultsPanel"; -import { Card, CardContent, CardHeader, CardTitle } from "../../../components/ui/card"; -import { Skeleton } from "../../../components/ui/skeleton"; -import type { FilterCriteria } from "../types/filters/filters"; -import type { SearchResultRecord } from "../types/search/searchResults"; -import { graphQLNodeToSearchResultRecordData } from "../utils/graphQLRecordAdapter"; - -const EMPTY_HIGHLIGHT = { fields: {}, snippet: null }; -const EMPTY_SEARCH_INFO = { isPromoted: false, isSpellCorrected: false }; - -export default function GlobalSearch() { - const { query } = useParams<{ query: string }>(); - - const objectApiName = OBJECT_API_NAMES[0]; - - const [searchPageSize, setSearchPageSize] = useState(DEFAULT_PAGE_SIZE); - const [afterCursor, setAfterCursor] = useState(null); - const [pageIndex, setPageIndex] = useState(0); - /** Cursor stack: cursorStack[i] is the `after` value that returns page i. cursorStack[0] = null (first page). */ - const [cursorStack, setCursorStack] = useState<(string | null)[]>([null]); - const [appliedFilters, setAppliedFilters] = useState([]); - const [sortBy, setSortBy] = useState("Name"); - - const decodedQuery = useMemo(() => { - if (!query) return ""; - try { - return decodeURIComponent(query); - } catch { - return query; - } - }, [query]); - - const isBrowseAll = decodedQuery === "browse__all"; - const searchQuery = isBrowseAll ? "" : decodedQuery.trim(); - - // Reset pagination when the URL search query changes so we don't use an old cursor with a new result set - useEffect(() => { - queueMicrotask(() => { - setAfterCursor(null); - setPageIndex(0); - setCursorStack([null]); - }); - }, [query]); - - const listMeta = useObjectListMetadata(objectApiName); - const { objectInfos } = useObjectInfoBatch([...OBJECT_API_NAMES]); - const labelPlural = (objectInfos[0]?.labelPlural as string | undefined) ?? "records"; - const { - edges, - pageInfo, - loading: resultsLoading, - error: resultsError, - } = useRecordListGraphQL({ - objectApiName, - first: searchPageSize, - after: afterCursor, - filters: appliedFilters, - sortBy: sortBy === "relevance" ? "Name" : sortBy, - searchQuery: searchQuery || undefined, - columns: listMeta.columns, - columnsLoading: listMeta.loading, - columnsError: listMeta.error, - }); - - // Store endCursor for the next page so we can re-query when user clicks Next; also enables Previous via stack. - // Only update when not loading so a stale response cannot write a cursor into the wrong stack index (e.g. after rapid Next clicks). - useEffect(() => { - if (resultsLoading) return; - const cursor = pageInfo?.endCursor ?? null; - if (cursor == null) return; - queueMicrotask(() => { - setCursorStack((prev) => { - const next = [...prev]; - next[pageIndex + 1] = cursor; - return next; - }); - }); - }, [resultsLoading, pageInfo?.endCursor, pageIndex]); - - const results: SearchResultRecord[] = useMemo( - () => - (edges ?? []).map((edge) => ({ - record: graphQLNodeToSearchResultRecordData( - edge?.node as Record, - objectApiName, - ), - highlightInfo: EMPTY_HIGHLIGHT, - searchInfo: EMPTY_SEARCH_INFO, - })), - [edges, objectApiName], - ); - - const nextPageToken = pageInfo?.endCursor ?? null; - /** Entry cursor for the previous page; used when user clicks Previous to re-query with after=cursorStack[pageIndex-1]. */ - const previousPageToken = pageIndex > 0 ? (cursorStack[pageIndex - 1] ?? null) : null; - const hasNextPage = pageInfo?.hasNextPage === true; - const hasPreviousPage = pageIndex > 0; - const currentPageToken = pageIndex.toString(); - - const cursorStackRef = useRef(cursorStack); - const pageIndexRef = useRef(pageIndex); - useEffect(() => { - cursorStackRef.current = cursorStack; - pageIndexRef.current = pageIndex; - }, [cursorStack, pageIndex]); - - const canRenderFilters = - !listMeta.loading && listMeta.filters !== undefined && listMeta.picklistValues !== undefined; - - const handleApplyFilters = useCallback((filterCriteria: FilterCriteria[]) => { - setAppliedFilters(filterCriteria); - setAfterCursor(null); - setPageIndex(0); - setCursorStack([null]); - }, []); - - const handlePageChange = useCallback( - (newPageToken: string, direction?: "next" | "prev" | "first") => { - if (direction === "first" || newPageToken === "0") { - setAfterCursor(null); - setPageIndex(0); - } else if (direction === "prev") { - const idx = pageIndexRef.current; - const stack = cursorStackRef.current; - const prevCursor = idx > 0 ? (stack[idx - 1] ?? null) : null; - setAfterCursor(prevCursor); - setPageIndex((prev) => Math.max(0, prev - 1)); - } else { - setAfterCursor(newPageToken); - setPageIndex((prev) => prev + 1); - } - window.scrollTo({ top: 0, behavior: "smooth" }); - }, - [], - ); - - const handlePageSizeChange = useCallback((newPageSize: number) => { - setSearchPageSize(newPageSize); - setAfterCursor(null); - setPageIndex(0); - setCursorStack([null]); - window.scrollTo({ top: 0, behavior: "smooth" }); - }, []); - - const handleSortByChange = useCallback((newSortBy: string) => { - setSortBy(newSortBy); - setAfterCursor(null); - setPageIndex(0); - setCursorStack([null]); - window.scrollTo({ top: 0, behavior: "smooth" }); - }, []); - - return ( -
- - -
- - -
- -
-
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/filters/filters.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/filters/filters.ts deleted file mode 100644 index 76176f4..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/filters/filters.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { z } from "zod"; - -/** - * Type definitions for filter structures - * All types are derived from Zod schemas using z.infer for type safety - */ - -/** - * Allowed filter operators for Salesforce search queries - */ -export const FILTER_OPERATORS = [ - "eq", // Equals - "ne", // Not equals - "like", // Pattern matching (contains) - "in", // In list (multiple values) - "gt", // Greater than - "gte", // Greater than or equal - "lt", // Less than - "lte", // Less than or equal -] as const; - -/** - * Filter operator type - */ -export type FilterOperator = (typeof FILTER_OPERATORS)[number]; - -/** - * Salesforce field path validation regex - * Validates field paths like: - * - Simple fields: "Name", "FieldName__c" - * - Relationship fields: "Account__r.Name", "Owner__r.FieldName__c" - * - Nested relationships: "Account__r.Owner__r.Name" - * - * Pattern explanation: - * - ^[A-Za-z][A-Za-z0-9_]* - Starts with letter, followed by letters/numbers/underscores - * - (__[cr])? - Optional relationship suffix (__r or __c) - * - (\.[A-Za-z][A-Za-z0-9_]*(__[cr])?)* - Optional relationship traversal (dot notation) - */ -const SALESFORCE_FIELD_PATH_REGEX = - /^[A-Za-z][A-Za-z0-9_]*(__[cr])?(\.[A-Za-z][A-Za-z0-9_]*(__[cr])?)*$/; - -/** - * Validates Salesforce field path format - * @param fieldPath - The field path to validate - * @returns true if valid, false otherwise - */ -function isValidSalesforceFieldPath(fieldPath: string): boolean { - if (!fieldPath || fieldPath.trim().length === 0) { - return false; - } - return SALESFORCE_FIELD_PATH_REGEX.test(fieldPath); -} - -// Zod Schema for Filter Attributes -const FilterAttributesSchema = z.object({ - affordance: z.string().optional(), - placeholder: z.string().optional(), -}); - -/** - * Filter attributes containing input-specific properties - */ -export type FilterAttributes = z.infer; - -// Zod Schema for Filter -const FilterSchema = z.object({ - affordance: z.string(), - attributes: FilterAttributesSchema.optional(), - defaultValues: z.array(z.string()).optional(), - helpMessage: z.string().nullable().optional(), - label: z.string(), - targetFieldPath: z.string().refine((value) => isValidSalesforceFieldPath(value), { - message: - "Invalid Salesforce field path format. Field paths must start with a letter and can contain letters, numbers, underscores, and relationship notation (__r or __c). Use dot notation for relationships (e.g., 'Account__r.Name').", - }), - type: z.string(), -}); - -/** - * Single filter definition from getObjectListFilters API - */ -export type Filter = z.infer; - -// Export schema for validation -export const FilterArraySchema = z.array(FilterSchema); - -// Zod Schema for Filter Criteria with operator and field path validation -const FilterCriteriaSchema = z.object({ - objectApiName: z.string().min(1, "Object API name is required"), - fieldPath: z - .string() - .min(1, "Field path is required") - .refine((value) => isValidSalesforceFieldPath(value), { - message: - "Invalid Salesforce field path format. Field paths must start with a letter and can contain letters, numbers, underscores, and relationship notation (__r or __c). Use dot notation for relationships (e.g., 'Account__r.Name').", - }), - operator: z.enum(FILTER_OPERATORS, { - message: `Operator must be one of: ${FILTER_OPERATORS.join(", ")}`, - }), - values: z.array(z.union([z.string(), z.number()])).min(1, "At least one value is required"), -}); - -/** - * Filter criteria structure for filtering search results - */ -export type FilterCriteria = z.infer; - -// Export schema for validation -export const FilterCriteriaArraySchema = z.array(FilterCriteriaSchema); - -// Zod Schema for Filters Response (used for type inference via z.infer) -export const FiltersResponseSchema = z.record(z.string(), z.unknown()).and( - z.object({ - filters: FilterArraySchema.optional(), - }), -); - -/** - * Filters response structure - */ -export type FiltersResponse = z.infer; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/filters/picklist.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/filters/picklist.ts deleted file mode 100644 index 61e5a3b..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/filters/picklist.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { PicklistValue as GraphQLPicklistValue } from "../objectInfo/objectInfo"; - -export type PicklistValue = GraphQLPicklistValue & { - value: NonNullable; - label: NonNullable; -}; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/objectInfo/objectInfo.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/objectInfo/objectInfo.ts deleted file mode 100644 index 250c32c..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/objectInfo/objectInfo.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { GetObjectInfosQuery, GetPicklistValuesQuery } from "../schema"; - -// Generic utility types for extracting array item types -type ArrayItem = T extends (infer Item)[] ? Item : never; -type NonNullableArrayItem = NonNullable>>; - -// ObjectInfos extraction -export type GetObjectInfosQueryObjectInfos = NonNullable< - GetObjectInfosQuery["uiapi"]["objectInfos"] ->; -export type GetObjectInfosQueryObjectInfo = NonNullableArrayItem; -export type GetObjectInfosQueryField = NonNullableArrayItem< - GetObjectInfosQueryObjectInfo["fields"] ->; - -// ObjectInfoResult types -export type ObjectInfoResult = Omit & { - fields: Record; -}; -export type ObjectInfoBatchResponse = { - results: { result: ObjectInfoResult; statusCode: number }[]; -}; - -// Picklist values extraction -export type GetPicklistValuesQueryObjectInfos = GetPicklistValuesQuery["uiapi"]["objectInfos"]; -export type GetPicklistValuesQueryObjectInfo = - NonNullableArrayItem; -export type GetPicklistValuesQueryField = NonNullableArrayItem< - GetPicklistValuesQueryObjectInfo["fields"] ->; - -// Extract picklist-specific field type (the one with picklistValuesByRecordTypeIDs) -type GetPicklistValuesQueryPicklistField = Extract< - GetPicklistValuesQueryField, - { picklistValuesByRecordTypeIDs?: unknown } ->; - -// Extract types from picklistValuesByRecordTypeIDs -type PicklistValuesByRecordTypeIDs = - GetPicklistValuesQueryPicklistField["picklistValuesByRecordTypeIDs"]; -type PicklistValuesByRecordTypeID = NonNullable< - NonNullable extends (infer Item)[] ? Item : null ->; - -// Extract individual picklist value type -type PicklistValues = NonNullable["picklistValues"]; -export type PicklistValue = NonNullable< - NonNullable extends (infer Item)[] ? Item : null ->; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/recordDetail/recordDetail.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/recordDetail/recordDetail.ts deleted file mode 100644 index ff7e646..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/recordDetail/recordDetail.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { z } from "zod"; - -/** - * Type definitions and Zod schemas for Record Detail APIs: - * - Layout API (layout/{objectApiName}?layoutType=Full&mode=View&recordTypeId=...) - * - Record API (records/{recordId}?optionalFields=...) - */ - -const LayoutComponentSchema = z.object({ - apiName: z.string().nullable(), - behavior: z.string().optional(), - componentType: z.enum(["Field", "CustomLink", "EmptySpace"]), - customLinkUrl: z.string().optional(), - label: z.string().optional(), -}); - -export type LayoutComponent = z.infer; - -const LayoutItemSchema = z.object({ - editableForNew: z.boolean(), - editableForUpdate: z.boolean(), - label: z.string(), - layoutComponents: z.array(LayoutComponentSchema), - lookupIdApiName: z.string().nullable(), - required: z.boolean(), - sortable: z.boolean(), - uiBehavior: z.string().nullable(), -}); - -export type LayoutItem = z.infer; - -const LayoutRowSchema = z.object({ - layoutItems: z.array(LayoutItemSchema), -}); - -const LayoutSectionSchema = z.object({ - collapsible: z.boolean(), - columns: z.number(), - heading: z.string(), - id: z.string(), - layoutRows: z.array(LayoutRowSchema), - rows: z.number(), - tabOrder: z.string(), - useHeading: z.boolean(), -}); - -export type LayoutSection = z.infer; - -export const LayoutResponseSchema = z.object({ - eTag: z.string(), - id: z.string(), - layoutType: z.string(), - mode: z.string(), - objectApiName: z.string(), - recordTypeId: z.string(), - saveOptions: z.array(z.unknown()).optional(), - sections: z.array(LayoutSectionSchema), -}); - -export type LayoutResponse = z.infer; -export type LayoutRow = z.infer; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/schema.d.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/schema.d.ts deleted file mode 100644 index 962189f..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/types/schema.d.ts +++ /dev/null @@ -1,200 +0,0 @@ -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -export type MakeEmpty = { - [_ in K]?: never; -}; -export type Incremental = - | T - | { [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: { input: string; output: string }; - String: { input: string; output: string }; - Boolean: { input: boolean; output: boolean }; - Int: { input: number; output: number }; - Float: { input: number; output: number }; - Base64: { input: string; output: string }; - /** An arbitrary precision signed decimal */ - BigDecimal: { input: number | string; output: number }; - /** An arbitrary precision signed integer */ - BigInteger: { input: number; output: number }; - /** An 8-bit signed integer */ - Byte: { input: number; output: number }; - /** A UTF-16 code unit; a character on Unicode's BMP */ - Char: { input: number; output: number }; - Currency: { input: number | string; output: number }; - Date: { input: string; output: string }; - DateTime: { input: string; output: string }; - Double: { input: number | string; output: number }; - Email: { input: string; output: string }; - EncryptedString: { input: string; output: string }; - /** Can be set to an ID or a Reference to the result of another mutation operation. */ - IdOrRef: { input: string; output: string }; - JSON: { input: string; output: string }; - Latitude: { input: number | string; output: number }; - /** A 64-bit signed integer */ - Long: { input: number; output: number }; - LongTextArea: { input: string; output: string }; - Longitude: { input: number | string; output: number }; - MultiPicklist: { input: string; output: string }; - Percent: { input: number | string; output: number }; - PhoneNumber: { input: string; output: string }; - Picklist: { input: string; output: string }; - RichTextArea: { input: string; output: string }; - /** A 16-bit signed integer */ - Short: { input: number; output: number }; - TextArea: { input: string; output: string }; - Time: { input: string; output: string }; - Url: { input: string; output: string }; -}; - -export enum DataType { - Address = "ADDRESS", - Anytype = "ANYTYPE", - Base64 = "BASE64", - Boolean = "BOOLEAN", - Combobox = "COMBOBOX", - Complexvalue = "COMPLEXVALUE", - Currency = "CURRENCY", - Date = "DATE", - Datetime = "DATETIME", - Double = "DOUBLE", - Email = "EMAIL", - Encryptedstring = "ENCRYPTEDSTRING", - Int = "INT", - Json = "JSON", - Junctionidlist = "JUNCTIONIDLIST", - Location = "LOCATION", - Long = "LONG", - Multipicklist = "MULTIPICKLIST", - Percent = "PERCENT", - Phone = "PHONE", - Picklist = "PICKLIST", - Reference = "REFERENCE", - String = "STRING", - Textarea = "TEXTAREA", - Time = "TIME", - Url = "URL", -} - -export enum FieldExtraTypeInfo { - ExternalLookup = "EXTERNAL_LOOKUP", - ImageUrl = "IMAGE_URL", - IndirectLookup = "INDIRECT_LOOKUP", - Personname = "PERSONNAME", - Plaintextarea = "PLAINTEXTAREA", - Richtextarea = "RICHTEXTAREA", - SwitchablePersonname = "SWITCHABLE_PERSONNAME", -} - -/** Input for ObjectInfo and PickValues */ -export type ObjectInfoInput = { - apiName: Scalars["String"]["input"]; - fieldNames?: InputMaybe>; - recordTypeIDs?: InputMaybe>; -}; - -export enum ResultOrder { - Asc = "ASC", - Desc = "DESC", -} - -export type GetObjectInfosQueryVariables = Exact<{ - apiNames: Array | Scalars["String"]["input"]; -}>; - -export type GetObjectInfosQuery = { - uiapi: { - objectInfos?: Array<{ - ApiName: string; - label?: string | null; - labelPlural?: string | null; - nameFields: Array; - defaultRecordTypeId?: string | null; - keyPrefix?: string | null; - layoutable: boolean; - queryable: boolean; - searchable: boolean; - updateable: boolean; - deletable: boolean; - createable: boolean; - custom: boolean; - mruEnabled: boolean; - feedEnabled: boolean; - fields: Array< - | { - ApiName: string; - label?: string | null; - dataType?: DataType | null; - relationshipName?: string | null; - reference: boolean; - compound: boolean; - compoundFieldName?: string | null; - compoundComponentName?: string | null; - controllingFields: Array; - controllerName?: string | null; - referenceToInfos: Array<{ ApiName: string; nameFields: Array } | null>; - } - | { - ApiName: string; - label?: string | null; - dataType?: DataType | null; - relationshipName?: string | null; - reference: boolean; - compound: boolean; - compoundFieldName?: string | null; - compoundComponentName?: string | null; - controllingFields: Array; - controllerName?: string | null; - referenceToInfos: Array<{ ApiName: string; nameFields: Array } | null>; - } - | null - >; - recordTypeInfos: Array<{ - recordTypeId?: string | null; - name?: string | null; - master: boolean; - available: boolean; - defaultRecordTypeMapping: boolean; - } | null>; - themeInfo?: { color?: string | null; iconUrl?: string | null } | null; - childRelationships: Array<{ - relationshipName?: string | null; - fieldName?: string | null; - childObjectApiName: string; - } | null>; - dependentFields: Array<{ controllingField: string } | null>; - } | null> | null; - }; -}; - -export type GetPicklistValuesQueryVariables = Exact<{ - objectInfoInputs: Array | ObjectInfoInput; -}>; - -export type GetPicklistValuesQuery = { - uiapi: { - objectInfos?: Array<{ - ApiName: string; - fields: Array< - | { - ApiName: string; - picklistValuesByRecordTypeIDs?: Array<{ - recordTypeID: string; - defaultValue?: { value?: string | null } | null; - picklistValues?: Array<{ - label?: string | null; - value?: string | null; - validFor?: Array | null; - }> | null; - } | null> | null; - } - | { ApiName: string } - | null - >; - } | null> | null; - }; -}; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/apiUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/apiUtils.ts deleted file mode 100644 index 1c41e30..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/apiUtils.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * API Utilities - * - * Generic utility functions for API requests, validation, and URL handling. - */ - -import type { ZodSchema } from "zod"; - -export interface FetchAndValidateOptions { - schema: ZodSchema; - errorContext: string; - extractData?: (data: unknown) => unknown; -} - -export async function fetchAndValidate( - fetchFn: () => Promise, - options: FetchAndValidateOptions, -): Promise { - const { schema, errorContext, extractData } = options; - - try { - const response = await fetchFn(); - - if (!response.ok) { - throw new Error(`Failed to fetch ${errorContext}: ${response.status} ${response.statusText}`); - } - - const data = await response.json(); - const dataToValidate = extractData ? extractData(data) : data; - const validationResult = schema.safeParse(dataToValidate); - - if (!validationResult.success) { - throw new Error(`Invalid ${errorContext} response format: ${validationResult.error.message}`); - } - - return validationResult.data; - } catch (error) { - if (error instanceof Error && error.name === "ZodError") { - throw new Error(`Invalid ${errorContext} response format: ${error.message}`); - } - - if ( - error instanceof Error && - (error.message.includes("Failed to fetch") || error.message.includes("Invalid")) - ) { - throw error; - } - - throw new Error( - `Error fetching ${errorContext}: ${ - error instanceof Error ? error.message : (error?.toString() ?? "Unknown error") - }`, - ); - } -} - -export function safeEncodePath(segment: string): string { - return encodeURIComponent(segment); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/cacheUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/cacheUtils.ts deleted file mode 100644 index 31d6688..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/cacheUtils.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Cache Utilities - * - * Utility functions for creating deterministic cache keys and managing cache operations. - */ - -import type { FilterCriteria } from "../types/filters/filters"; - -/** - * Creates a deterministic cache key from filter criteria array. - * Sorts filters and their values to ensure consistent keys regardless of input order. - * - * @param filters - Array of filter criteria (FilterCriteria[]) - * @returns Deterministic string key for caching - * - * @remarks - * - Sorts filters by objectApiName, then fieldPath, then operator - * - Sorts values within each filter to ensure consistency - * - Handles null/undefined values safely - * - Prevents cache key collisions from different object ordering - * - * Why is sorting required? - * If a user filters by "Name" then "Date", the array is [Name, Date]. - * If they filter by "Date" then "Name", the array is [Date, Name]. - * - Without sorting, these would generate different cache keys ("Name-Date" vs "Date-Name"), - * causing the app to re-fetch data it actually already has. Sorting ensures that - * the order of user clicks doesn't invalidate the cache. - * - - * @example - * ```tsx - * const cacheKey = createFiltersKey(filters); - * ``` - */ -export function createFiltersKey(filters: FilterCriteria[]): string { - if (!Array.isArray(filters) || filters.length === 0) { - return "[]"; - } - - const normalized = filters - .map((filter) => { - if (!filter || typeof filter !== "object") { - return null; - } - - const f = filter as FilterCriteria; - - const sortedValues = - Array.isArray(f.values) && f.values.length > 0 - ? [...f.values].sort((a, b) => { - const aStr = a.toString(); - const bStr = b.toString(); - return aStr.localeCompare(bStr); - }) - : []; - - return { - objectApiName: f.objectApiName ?? "", - fieldPath: f.fieldPath ?? "", - operator: f.operator ?? "", - values: sortedValues, - }; - }) - .filter((f): f is NonNullable => f !== null) - .sort((a, b) => { - const objectCompare = a.objectApiName.localeCompare(b.objectApiName); - if (objectCompare !== 0) return objectCompare; - - const fieldCompare = a.fieldPath.localeCompare(b.fieldPath); - if (fieldCompare !== 0) return fieldCompare; - - return a.operator.localeCompare(b.operator); - }); - - return JSON.stringify(normalized); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/debounce.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/debounce.ts deleted file mode 100644 index def0b68..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/debounce.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Debounce Utility - * - * Provides debouncing functionality for functions with React-safe cleanup methods. - */ - -/** - * Interface for the debounced function, exposing utility methods. - */ -export interface DebouncedFunc any> { - /** - * Call the original function, but delayed. - */ - (...args: Parameters): void; - /** - * Cancel any pending execution. - */ - cancel: () => void; - /** - * Immediately execute the pending function (if any) and clear the timer. - * Useful for saving data before unmounting. - */ - flush: () => void; -} - -/** - * Creates a debounced function that delays invoking func until after wait milliseconds - * have elapsed since the last time the debounced function was invoked. - * - * @param func - The function to debounce - * @param wait - The number of milliseconds to delay - * @returns A debounced function with .cancel() and .flush() methods - * - * @remarks - * - Includes .cancel() method for cleanup in React useEffects - * - Includes .flush() method to immediately execute pending calls - * - Preserves function context (this binding) - * - Type-safe with TypeScript generics - * - * @example - * ```tsx - * const debouncedSearch = debounce((query: string) => { - * performSearch(query); - * }, 300); - * - * // In useEffect cleanup - * return () => debouncedSearch.cancel(); - * ``` - */ -export function debounce any>( - func: T, - wait: number, -): DebouncedFunc { - // 1. Type Safety: Use a generic return type compatible with Browser and Node - let timeoutId: ReturnType | null = null; - let lastContext: ThisParameterType | null = null; - let lastArgs: Parameters | null = null; - function debounced(this: ThisParameterType, ...args: Parameters) { - // 2. Context Safety: Capture 'this' to support class methods - // eslint-disable-next-line @typescript-eslint/no-this-alias -- required for debouncing class methods - lastContext = this; - lastArgs = args; - if (timeoutId) { - clearTimeout(timeoutId); - } - timeoutId = setTimeout(() => { - func.apply(lastContext, lastArgs as Parameters); - timeoutId = null; - lastArgs = null; - lastContext = null; - }, wait); - } - // 3. React Safety: Add a cancel method to clear pending timers - debounced.cancel = () => { - if (timeoutId) { - clearTimeout(timeoutId); - timeoutId = null; - } - lastArgs = null; - lastContext = null; - }; - - debounced.flush = () => { - if (timeoutId && lastArgs) { - func.apply(lastContext, lastArgs); - debounced.cancel(); - } - }; - return debounced; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/fieldUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/fieldUtils.ts deleted file mode 100644 index b2611cb..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/fieldUtils.ts +++ /dev/null @@ -1,354 +0,0 @@ -/** - * Field value extraction and formatting for Salesforce UI API record shapes. - * Handles primitives, nested paths (e.g. Owner.Alias), reference/relationship display, - * address and modstamp compound formatting, and layout-item value clubbing. - */ - -import type { FieldValue, ComplexFieldValue } from "../types/search/searchResults"; - -/** Fallback field names for reference/relationship display when object info nameFields are not available. */ -const DISPLAY_FIELD_CANDIDATES = [ - "Name", - "CaseNumber", - "Subject", - "Title", - "DeveloperName", - "ContractNumber", -] as const; - -function isDefined(val: unknown): val is string | number | boolean { - return val !== null && val !== undefined; -} - -function isComplexValue(val: unknown): val is ComplexFieldValue { - return typeof val === "object" && val !== null && "fields" in val; -} - -function extractComplexValue(complex: ComplexFieldValue): string | null { - const fields = complex.fields; - if (!fields) return null; - - for (const fieldName of DISPLAY_FIELD_CANDIDATES) { - const field = fields[fieldName]; - if (field) { - if (isDefined(field.displayValue)) { - return field.displayValue; - } - if (isDefined(field.value)) { - return field.value.toString(); - } - } - } - - return null; -} - -function extractFieldPrimitive(field: FieldValue): string | number | boolean | null { - if (isDefined(field.displayValue)) { - return field.displayValue; - } - - if (isComplexValue(field.value)) { - const extracted = extractComplexValue(field.value); - return extracted !== null ? extracted : null; - } - - if (isDefined(field.value)) { - return field.value; - } - - return null; -} - -export type FieldValueWithRelationship = FieldValue & { - relationshipField?: FieldValue | null; - constituents?: Record; -}; - -/** Id + Date pairs for Created By / Last Modified By (UI API modstamp convention). */ -const MODSTAMP_FIELDS = [ - { idFieldName: "CreatedById", dateFieldName: "CreatedDate" }, - { idFieldName: "LastModifiedById", dateFieldName: "LastModifiedDate" }, -] as const; - -function isModstampConstituents(constituents: Record): boolean { - return MODSTAMP_FIELDS.some( - ({ idFieldName, dateFieldName }) => - idFieldName in constituents && dateFieldName in constituents, - ); -} - -/** - * Formats an ISO 8601 date-time string to the user's locale and timezone. - * Uses the browser's default locale and local timezone. - */ -export function formatDateTimeForDisplay(isoOrDateString: string): string { - if (!isoOrDateString || typeof isoOrDateString !== "string") return isoOrDateString; - const trimmed = isoOrDateString.trim(); - if (!trimmed) return isoOrDateString; - const date = new Date(trimmed); - if (Number.isNaN(date.getTime())) return isoOrDateString; - try { - return new Intl.DateTimeFormat(undefined, { - dateStyle: "medium", - timeStyle: "short", - }).format(date); - } catch { - return isoOrDateString; - } -} - -function formatModstampDisplay(constituents: Record): string { - for (const { idFieldName, dateFieldName } of MODSTAMP_FIELDS) { - const idField = constituents[idFieldName]; - const dateField = constituents[dateFieldName]; - if (!idField || !dateField) continue; - const idWithRel = idField as FieldValueWithRelationship; - const name = - idWithRel.relationshipField != null - ? getPrimitiveString(idWithRel.relationshipField) - : getPrimitiveString(idField); - const dateRaw = getPrimitiveString(dateField); - const date = dateRaw ? formatDateTimeForDisplay(dateRaw) : ""; - const parts = [name, date].filter(Boolean); - if (parts.length) return parts.join(" "); - } - return ""; -} - -const ADDRESS_STREET_SUFFIXES = ["Street"]; -const ADDRESS_CITY_SUFFIXES = ["City"]; -const ADDRESS_STATE_SUFFIXES = ["State", "StateCode"]; -const ADDRESS_POSTAL_SUFFIXES = ["PostalCode"]; -const ADDRESS_COUNTRY_SUFFIXES = ["Country", "CountryCode"]; - -function getPrimitiveString(fv: FieldValue | undefined): string { - if (!fv) return ""; - const p = extractFieldPrimitive(fv); - return ((p as string) || "").trim(); -} - -function fieldNameEndsWithOneOf(name: string, suffixes: string[]): boolean { - return suffixes.some( - (s) => - name === s || name.endsWith(s) || (name.endsWith("__c") && name.slice(0, -3).endsWith(s)), - ); -} - -function findAddressPartKey(keys: string[], suffixes: string[]): string | undefined { - return keys.find((k) => fieldNameEndsWithOneOf(k, suffixes)); -} - -export interface AddressParts { - street: string; - city: string; - state: string; - postalCode: string; - country: string; -} - -export function getAddressPartsFromConstituents( - constituents: Record, -): AddressParts { - const keys = Object.keys(constituents); - const streetKey = findAddressPartKey(keys, ADDRESS_STREET_SUFFIXES); - const cityKey = findAddressPartKey(keys, ADDRESS_CITY_SUFFIXES); - const stateKey = findAddressPartKey(keys, ADDRESS_STATE_SUFFIXES); - const postalKey = findAddressPartKey(keys, ADDRESS_POSTAL_SUFFIXES); - const countryKey = findAddressPartKey(keys, ADDRESS_COUNTRY_SUFFIXES); - return { - street: streetKey ? getPrimitiveString(constituents[streetKey]) : "", - city: cityKey ? getPrimitiveString(constituents[cityKey]) : "", - state: stateKey ? getPrimitiveString(constituents[stateKey]) : "", - postalCode: postalKey ? getPrimitiveString(constituents[postalKey]) : "", - country: countryKey ? getPrimitiveString(constituents[countryKey]) : "", - }; -} - -export function isAddressConstituents(constituents: Record): boolean { - const keys = Object.keys(constituents); - const hasStreet = !!findAddressPartKey(keys, ADDRESS_STREET_SUFFIXES); - const hasCity = !!findAddressPartKey(keys, ADDRESS_CITY_SUFFIXES); - const hasState = !!findAddressPartKey(keys, ADDRESS_STATE_SUFFIXES); - const hasCountry = !!findAddressPartKey(keys, ADDRESS_COUNTRY_SUFFIXES); - return hasStreet && (hasCity || hasState || hasCountry); -} - -export function formatAddressDisplay(parts: AddressParts): string { - const { street, city, state, postalCode, country } = parts; - const statePostal = [state, postalCode].filter(Boolean).join(" "); - const line2 = city ? (statePostal ? `${city}, ${statePostal}` : city) : statePostal; - const lines = [street, line2, country].filter(Boolean); - return lines.join("\n").trim(); -} - -export function formatAddressFromConstituents(constituents: Record): string { - const parts = getAddressPartsFromConstituents(constituents); - return formatAddressDisplay(parts); -} - -function isModstampApiNames(apiNames: string[]): boolean { - return MODSTAMP_FIELDS.some( - ({ idFieldName, dateFieldName }) => - apiNames.includes(idFieldName) && apiNames.includes(dateFieldName), - ); -} - -function isAddressApiNames(apiNames: string[]): boolean { - const hasStreet = apiNames.some((n) => fieldNameEndsWithOneOf(n, ADDRESS_STREET_SUFFIXES)); - const hasCity = apiNames.some((n) => fieldNameEndsWithOneOf(n, ADDRESS_CITY_SUFFIXES)); - const hasState = apiNames.some((n) => fieldNameEndsWithOneOf(n, ADDRESS_STATE_SUFFIXES)); - const hasCountry = apiNames.some((n) => fieldNameEndsWithOneOf(n, ADDRESS_COUNTRY_SUFFIXES)); - return hasStreet && (hasCity || hasState || hasCountry); -} - -export interface LayoutItemDisplayResult { - value: string | number | boolean | null; - dataType?: string; -} - -export function getDisplayValueForLayoutItem( - fields: Record | undefined, - componentApiNames: string[], -): LayoutItemDisplayResult { - if (!fields || componentApiNames.length === 0) { - return { value: null }; - } - if (componentApiNames.length === 1) { - const value = getDisplayValueForDetailField( - fields[componentApiNames[0]] as FieldValueWithRelationship | undefined, - ); - return { value }; - } - const constituents: Record = {}; - for (const apiName of componentApiNames) { - if (fields[apiName] != null) constituents[apiName] = fields[apiName]; - } - if (isModstampApiNames(componentApiNames)) { - const value = formatModstampDisplay(constituents); - return { value: value || null }; - } - if (isAddressApiNames(componentApiNames)) { - const parts = getAddressPartsFromConstituents(constituents); - const value = formatAddressDisplay(parts); - return { value: value || null, dataType: "Address" }; - } - const values = componentApiNames - .map((apiName) => - getDisplayValueForDetailField(fields[apiName] as FieldValueWithRelationship | undefined), - ) - .filter((v) => v !== null && v !== undefined && v !== ""); - return { value: values.length > 0 ? values.join(", ") : null }; -} - -export function getDisplayValueForDetailField( - field: FieldValueWithRelationship | undefined, -): string | number | boolean | null { - if (!field) return null; - const withExt = field as FieldValueWithRelationship; - if (withExt.relationshipField != null) { - const fromRel = extractFieldPrimitive(withExt.relationshipField); - if (fromRel !== null && fromRel !== undefined && fromRel !== "") { - return fromRel; - } - } - if (withExt.constituents != null) { - if (isModstampConstituents(withExt.constituents)) { - const formatted = formatModstampDisplay(withExt.constituents); - if (formatted) return formatted; - } else if (isAddressConstituents(withExt.constituents)) { - const formatted = formatAddressFromConstituents(withExt.constituents); - if (formatted) return formatted; - } - } - return extractFieldPrimitive(field); -} - -export function getNestedFieldValue( - fields: Record | undefined, - fieldPath: string, -): string | number | boolean | null { - if (!fields || !fieldPath) { - return null; - } - - const pathParts = fieldPath.split("."); - if (pathParts.length === 1) { - const field = fields[fieldPath]; - if (!field) return null; - - return extractFieldPrimitive(field); - } - - let currentFields: Record | undefined = fields; - for (let i = 0; i < pathParts.length - 1; i++) { - const part = pathParts[i]; - if (!currentFields || !currentFields[part]) { - return null; - } - - const field: FieldValue = currentFields[part]; - if (isComplexValue(field.value)) { - currentFields = field.value.fields; - } else { - return null; - } - } - - const finalFieldName = pathParts[pathParts.length - 1]; - if (!currentFields || !currentFields[finalFieldName]) { - return null; - } - - const finalField = currentFields[finalFieldName]; - return extractFieldPrimitive(finalField); -} - -/** Minimal metadata for record display name (nameFields from object info API). */ -export type RecordDisplayNameMetadata = { nameFields?: string[] } | null; - -/** - * Resolves a display name for a record: tries metadata.nameFields first, then - * DISPLAY_FIELD_CANDIDATES (Name, Subject, etc.), then record.id. - */ -export function getRecordDisplayName( - record: { id: string; fields: Record }, - metadata?: RecordDisplayNameMetadata, -): string { - const candidates = [...(metadata?.nameFields ?? []), ...DISPLAY_FIELD_CANDIDATES]; - for (const fieldPath of candidates) { - const v = getNestedFieldValue(record.fields, fieldPath); - return v as string; - } - return record.id; -} - -/** Adapts object info (e.g. ObjectInfoResult) to the shape expected by getRecordDisplayName. */ -export function toRecordDisplayNameMetadata(obj: unknown): RecordDisplayNameMetadata { - if (obj != null && typeof obj === "object" && "nameFields" in obj) { - const nameFields = (obj as { nameFields?: string[] }).nameFields; - if (Array.isArray(nameFields)) return { nameFields }; - } - return null; -} - -export function extractFieldValue( - fieldValue: FieldValue | undefined, - useDisplayValue: boolean = false, -): string { - if (!fieldValue) { - return "β€”"; - } - - if (useDisplayValue && isDefined(fieldValue.displayValue)) { - return fieldValue.displayValue; - } - - const extracted = extractFieldPrimitive(fieldValue); - - if (extracted !== null) { - return extracted as string; - } - - return "β€”"; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/fieldValueExtractor.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/fieldValueExtractor.ts deleted file mode 100644 index 4859d0e..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/fieldValueExtractor.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { FieldValue, ComplexFieldValue } from "../types/search/searchResults"; - -const DISPLAY_FIELD_CANDIDATES = [ - "Name", - "CaseNumber", - "Subject", - "Title", - "DeveloperName", - "ContractNumber", -]; -/** - * Extracts the display value from a field value, handling nested structures - * For complex fields like Owner, extracts nested values from fields.Name.value - */ -export function extractFieldValue( - fieldValue: FieldValue | undefined, - useDisplayValue: boolean = false, -): string { - if (!fieldValue) { - return "β€”"; - } - - // If displayValue exists and is not null, use it (highest priority) - if (useDisplayValue && isDefined(fieldValue.displayValue)) { - return fieldValue.displayValue; - } - - // If value is a complex object (like Owner), extract nested value - if (isComplexValue(fieldValue.value)) { - return extractComplexValue(fieldValue.value as ComplexFieldValue) ?? "β€”"; - } - - // Otherwise use the value directly (for simple fields) - if (isDefined(fieldValue.value)) { - return fieldValue.value as string; - } - - return "β€”"; -} - -/** - * Helper to safely extract name from related object - */ -function extractComplexValue(complex: ComplexFieldValue): string | null { - const fields = complex.fields; - if (!fields) return null; - // Scale: Check the candidate list until we find a field that exists and has a value - for (const fieldName of DISPLAY_FIELD_CANDIDATES) { - const field = fields[fieldName]; - if (field) { - // Priority: DisplayValue -> Value - if (isDefined(field.displayValue)) return field.displayValue; - if (isDefined(field.value)) return field.value as string; - } - } - - return null; -} -/** - * Type Guard checks - */ -function isDefined(val: unknown): val is string | number | boolean { - return val !== null && val !== undefined; -} -function isComplexValue(val: unknown): val is ComplexFieldValue { - return typeof val === "object" && val !== null; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/filterUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/filterUtils.ts deleted file mode 100644 index 8fcfd21..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/filterUtils.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Filter Utilities - * - * Utility functions for filter value parsing and transformation. - * These utilities handle the conversion of form values to filter criteria. - */ - -/** - * Parses a string value to either a number or string - * Attempts to parse as integer, falls back to trimmed string if not a valid number - * - * @param val - The value to parse (string) - * @returns Parsed number if valid, otherwise trimmed string, or empty string if input is empty - * - * @remarks - * - Returns empty string for empty/whitespace input - * - Attempts integer parsing first - * - Falls back to trimmed string if parsing fails - * - Used for filter values that can be either numeric or text - * - * @example - * ```tsx - * const parsed = parseFilterValue("123"); // 123 (number) - * const parsed = parseFilterValue("abc"); // "abc" (string) - * const parsed = parseFilterValue(" "); // "" (empty string) - * ``` - */ -export function parseFilterValue(val: string): string | number { - if (!val.trim()) return ""; - const numVal = parseInt(val.trim(), 10); - return isNaN(numVal) ? val.trim() : numVal; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/formDataTransformUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/formDataTransformUtils.ts deleted file mode 100644 index 038d428..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/formDataTransformUtils.ts +++ /dev/null @@ -1,260 +0,0 @@ -/** - * Transforms UI API record + object info into detail form shape: Reference fields get - * relationshipField, compound fields get constituents, metadata gets editable flag. - * Aligns with LWC detailForm _calculateFormData and uiApiDataTransformHelper. - */ - -import type { FieldValue } from "../types/search/searchResults"; - -/** Field metadata from object info API (subset used by form transform). */ -export interface ObjectInfoFieldMetadata { - compound?: boolean; - compoundFieldName?: string; - compoundComponentName?: string; - dataType?: string; - relationshipName?: string; - updateable?: boolean; - calculated?: boolean; - polymorphicForeignKey?: boolean; - apiName?: string; - label?: string; - [name: string]: unknown; -} - -/** Minimal UI API object info (metadata) for form data transform. */ -export interface ObjectInfoMetadata { - apiName?: string; - fields?: Record; - [name: string]: unknown; -} - -/** Transformed field value: base FieldValue + relationshipField (Reference) and constituents (compound). */ -export interface TransformedFieldValue extends FieldValue { - relationshipField?: FieldValue; - constituents?: Record; -} - -export type TransformedDataFields = Record; - -/** Form values keyed by record context id (e.g. record.id). */ -export type FormValues = Record; - -/** Form metadata keyed by metadata context (e.g. object apiName). */ -export type FormMetadata = Record; - -/** Contexts: recordId -> objectApiName. */ -export type FormContexts = Record; - -/** Result of calculateFormData (single record). */ -export interface FormData { - formValues: FormValues; - formMetadata: FormMetadata; - formContexts: FormContexts; -} - -/** Fields never editable per UI API (platform convention). */ -const NON_EDITABLE_FIELDS = ["OwnerId", "RecordTypeId"]; - -/** Created By / Last Modified By: synthetic compound from Id + Date (modstampMetadataTransform). */ -const SYSTEM_FIELDS = [ - { - fieldName: "CreatedBy", - idFieldName: "CreatedById", - dateFieldName: "CreatedDate", - apiName: "CreatedBy", - compound: true, - dataType: "String", - label: "Created By", - }, - { - fieldName: "LastModifiedBy", - idFieldName: "LastModifiedById", - dateFieldName: "LastModifiedDate", - apiName: "LastModifiedBy", - compound: true, - dataType: "String", - label: "Last Modified By", - }, -]; - -function modstampMetadataTransform(metadata: ObjectInfoMetadata): ObjectInfoMetadata { - const fields = { ...metadata.fields }; - if (!fields) return metadata; - - SYSTEM_FIELDS.forEach((systemField) => { - const field = systemField.fieldName; - const idField = systemField.idFieldName; - const dateField = systemField.dateFieldName; - if (idField in fields && dateField in fields && metadata.fields) { - fields[field] = { ...metadata.fields[idField], ...systemField }; - fields[idField] = { - ...(metadata.fields[idField] ?? {}), - compoundComponentName: "Id", - compoundFieldName: field, - }; - fields[dateField] = { - ...(metadata.fields[dateField] ?? {}), - compoundComponentName: "Date", - compoundFieldName: field, - }; - } - }); - return { ...metadata, fields }; -} - -export function metaDataTransform(metadata: ObjectInfoMetadata): ObjectInfoMetadata { - const newMetadata = modstampMetadataTransform(metadata); - const fields: Record = {}; - const metaFields = newMetadata.fields ?? {}; - Object.keys(metaFields).forEach((fieldName) => { - const fieldRep = metaFields[fieldName]; - const isCalculated = Boolean(fieldRep.calculated); - const isUpdateable = Boolean(fieldRep.updateable); - const isPolymorphicLookup = Boolean(fieldRep.polymorphicForeignKey); - fields[fieldName] = { - ...fieldRep, - editable: - !isCalculated && - isUpdateable && - !isPolymorphicLookup && - !NON_EDITABLE_FIELDS.includes(fieldName), - } as ObjectInfoFieldMetadata; - }); - return { ...newMetadata, fields }; -} - -export function getConstituentMap( - dataFields: Record, - fieldMetadata: Record, -): Record> { - const constituentMap: Record< - string, - Record - > = {}; - Object.keys(fieldMetadata).forEach((fieldApiName) => { - const { compoundFieldName } = fieldMetadata[fieldApiName]; - if (compoundFieldName && dataFields[fieldApiName]) { - const constituentFields = - constituentMap[compoundFieldName] ?? - ({} as Record); - const raw = dataFields[fieldApiName] as TransformedFieldValue; - constituentFields[fieldApiName] = { - ...raw, - metadata: fieldMetadata[fieldApiName], - }; - constituentMap[compoundFieldName] = constituentFields; - - const compoundMeta = fieldMetadata[compoundFieldName]; - if ( - compoundMeta?.dataType === "Address" && - (fieldApiName.endsWith("StateCode") || fieldApiName.endsWith("CountryCode")) - ) { - const nonPicklistName = fieldApiName.replace("Code", ""); - if (fieldMetadata[nonPicklistName] && dataFields[nonPicklistName]) { - constituentFields[nonPicklistName] = { - ...(dataFields[nonPicklistName] as TransformedFieldValue), - metadata: fieldMetadata[nonPicklistName], - }; - } - } - } - }); - if (constituentMap.Name) { - const constituentApiNames = Object.keys(constituentMap.Name); - if (constituentApiNames.length === 1 && constituentApiNames[0] === "Name") { - delete constituentMap.Name; - } - } - return constituentMap; -} - -export function objectInfoFieldsTransform( - dataFields: Record, - metadata: ObjectInfoMetadata, -): TransformedDataFields { - const fieldMetadata = metadata.fields ?? {}; - const transformedDataFields: TransformedDataFields = { ...dataFields }; - - Object.keys(fieldMetadata).forEach((field) => { - const meta = fieldMetadata[field]; - if (meta.dataType === "Reference" && meta.relationshipName != null) { - const existing = dataFields[field]; - const relField = dataFields[meta.relationshipName]; - transformedDataFields[field] = { - ...(existing ?? {}), - relationshipField: { - ...(relField ?? {}), - value: null, - }, - }; - } - }); - - Object.keys(fieldMetadata).forEach((field) => { - const meta = fieldMetadata[field]; - const { compound, dataType } = meta; - const existing = dataFields[field]; - if (dataType === "Reference") return; - if (compound) { - transformedDataFields[field] = { ...(existing ?? {}) }; - } else if (existing) { - transformedDataFields[field] = existing as TransformedFieldValue; - } - }); - - const constituentMap = getConstituentMap(transformedDataFields, fieldMetadata); - Object.keys(constituentMap).forEach((field) => { - if (transformedDataFields[field]) { - transformedDataFields[field] = { - ...transformedDataFields[field], - constituents: constituentMap[field], - }; - } - }); - return transformedDataFields; -} - -export function multiRecordMetadataTransform( - metadata: Record, -): FormMetadata { - const result: FormMetadata = {}; - Object.keys(metadata).forEach((metadataContext) => { - result[metadataContext] = metaDataTransform(metadata[metadataContext]); - }); - return result; -} - -export function multiRecordValuesTransform( - values: Record>, - metadata: FormMetadata, - contexts: FormContexts, -): FormValues { - const result: FormValues = {}; - Object.keys(values).forEach((recordContext) => { - const metadataContext = contexts[recordContext]; - if (metadataContext && metadata[metadataContext]) { - result[recordContext] = objectInfoFieldsTransform( - values[recordContext], - metadata[metadataContext], - ); - } - }); - return result; -} - -export function calculateFormData( - record: { id: string; apiName: string; fields: Record }, - metadata: ObjectInfoMetadata | null | undefined, -): FormData { - const formValues: FormValues = {}; - const formMetadata: FormMetadata = {}; - const formContexts: FormContexts = { [record.id]: record.apiName }; - - if (!metadata?.fields) { - return { formValues, formMetadata, formContexts }; - } - - formMetadata[record.apiName] = metaDataTransform(metadata); - formValues[record.id] = objectInfoFieldsTransform(record.fields, formMetadata[record.apiName]); - return { formValues, formMetadata, formContexts }; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/formUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/formUtils.ts deleted file mode 100644 index cc587a9..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/formUtils.ts +++ /dev/null @@ -1,142 +0,0 @@ -/** - * Form Utilities - * - * Utility functions for form validation and error handling. - * These utilities are framework-agnostic and can be used with any form library. - */ - -/** - * Form error structure from TanStack Form - * Errors can be objects with a message property or strings - */ -export interface FormError { - message: string; - [key: string]: unknown; -} - -/** - * Type guard to check if an error has a message property - * @param error - The error to check - * @returns true if the error has a message property - */ -export function isFormError(error: unknown): error is FormError { - return ( - typeof error === "object" && - error !== null && - "message" in error && - typeof (error as FormError).message === "string" - ); -} - -/** - * Extracts unique errors by message, filtering out duplicates - * Handles both Error objects and string errors - * Converts FormError objects to Error instances for compatibility with UI components - * - * @param errors - Array of error objects or strings from form libraries - * @returns Array of unique Error objects (compatible with FieldError component) - * - * @example - * ```tsx - * const uniqueErrors = getUniqueErrors(formErrors); - * ``` - */ -export function getUniqueErrors(errors: unknown[]): Error[] { - const errorMap = new Map(); - - for (const error of errors) { - if (isFormError(error)) { - // Use message as key to deduplicate - if (!errorMap.has(error.message)) { - // Convert FormError to Error for compatibility - const errorObj = new Error(error.message); - // Preserve additional properties if needed - Object.assign(errorObj, error); - errorMap.set(error.message, errorObj); - } - } else if (typeof error === "string") { - // Handle string errors - if (!errorMap.has(error)) { - errorMap.set(error, new Error(error)); - } - } else if (error instanceof Error) { - // Handle Error objects directly - if (!errorMap.has(error.message)) { - errorMap.set(error.message, error); - } - } - } - - return Array.from(errorMap.values()); -} - -/** - * Validates that min value is less than or equal to max value for range filters - * This utility can be used in form validation logic - * - * @param minValue - Minimum value (string or number) - * @param maxValue - Maximum value (string or number) - * @returns Error message if validation fails, null if valid - * - * @remarks - * - If both values are empty, validation passes - * - Only validates if both values can be parsed as numbers - * - Returns null if values cannot be parsed (lets other validators handle it) - * - * @example - * ```tsx - * // In form validation - * const minError = validateRangeValues(minFieldValue, maxFieldValue); - * if (minError) { - * setFieldError('minField', minError); - * } - * ``` - */ -export function validateRangeValues( - minValue: string | number | null | undefined, - maxValue: string | number | null | undefined, -): string | null { - // If both are empty, validation passes - if (!minValue && !maxValue) { - return null; - } - - // Parse values to numbers if possible - const parseValue = (val: string | number | null | undefined): number | null => { - if (!val) { - return null; - } - if (typeof val === "number") { - return val; - } - const parsed = parseInt(val, 10); - return isNaN(parsed) ? null : parsed; - }; - - const minNum = parseValue(minValue); - const maxNum = parseValue(maxValue); - - // If one is not a number, skip numeric validation (let other validators handle it) - if (minNum === null || maxNum === null) { - return null; - } - - // Validate min <= max - if (minNum > maxNum) { - return "Minimum value must be less than or equal to maximum value"; - } - - return null; -} - -export function getFormValueByPath(record: Record, fieldPath: string): string { - if (!fieldPath) return ""; - const parts = fieldPath.split("."); - let current: Record = record; - for (const part of parts) { - if (current == null || typeof current !== "object") return ""; - current = (current as Record)[part] as unknown as Record; - } - if (current === undefined || current === null) return ""; - return "" + current; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLNodeFieldUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLNodeFieldUtils.ts deleted file mode 100644 index cb3a148..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLNodeFieldUtils.ts +++ /dev/null @@ -1,186 +0,0 @@ -/** - * GraphQL record node β†’ display values for detail view. - * - * getGraphQLNodeValue: primitive by field path. getDisplayValueForDetailFieldFromNode: single field, - * uses metadata to show relationship name instead of Id. getDisplayValueForLayoutItemFromNode: - * single or compound (address, modstamp). getGraphQLRecordDisplayName: record title from nameFields. - * - * @module utils/graphQLNodeFieldUtils - */ - -import type { FieldValue } from "../types/search/searchResults"; -import type { GraphQLRecordNode } from "../api/recordListGraphQLService"; -import type { ObjectInfoMetadata } from "./formDataTransformUtils"; -import { getDisplayValueForLayoutItem, type LayoutItemDisplayResult } from "./fieldUtils"; - -/** Metadata from getObjectInfoBatch (object metadata) used to resolve reference fields by relationshipName. */ -export type ObjectMetadataForDisplay = ObjectInfoMetadata | null | undefined; - -/** - * Gets a primitive value from a GraphQL node by field path. - * - "Id" -> node.Id (scalar) - * - "Name" -> node.Name?.value - * - "Owner.Alias" -> node.Owner?.Alias?.value - */ -export function getGraphQLNodeValue( - node: GraphQLRecordNode | null | undefined, - fieldPath: string, -): string | number | boolean | null { - if (!node || !fieldPath) return null; - const parts = fieldPath.split("."); - let current: unknown = node; - for (let i = 0; i < parts.length; i++) { - if (current == null || typeof current !== "object") return null; - current = (current as Record)[parts[i]]; - } - if (current == null) return null; - if (typeof current === "object" && current !== null && "value" in current) { - const v = (current as { value: unknown }).value; - if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") { - return v; - } - if (v === null) return null; - return v as string; - } - if (typeof current === "string" || typeof current === "number" || typeof current === "boolean") { - return current as string | number | boolean; - } - // Relationship/lookup objects: try DisplayValue (scalar or object), Name.value, then Id - if (typeof current === "object" && current !== null) { - const obj = current as Record; - const displayVal = obj.DisplayValue ?? obj.displayValue; - if (displayVal != null) { - if ( - typeof displayVal === "string" || - typeof displayVal === "number" || - typeof displayVal === "boolean" - ) { - return displayVal; - } - if (typeof displayVal === "object" && "value" in displayVal) { - const v = (displayVal as { value: unknown }).value; - if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") return v; - if (v === null) return null; - return v as string; - } - } - const nameObj = obj.Name ?? obj.name; - if (nameObj != null && typeof nameObj === "object" && "value" in nameObj) { - const v = (nameObj as { value: unknown }).value; - if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") return v; - if (v === null) return null; - return v as string; - } - const idVal = obj.Id ?? obj.id; - if ( - idVal != null && - (typeof idVal === "string" || typeof idVal === "number" || typeof idVal === "boolean") - ) { - return idVal; - } - } - return null; -} - -/** Builds a minimal Record from node for the given api names (for reuse with fieldUtils formatters). */ -function nodeToConstituentFields( - node: GraphQLRecordNode, - componentApiNames: string[], - metadata?: ObjectMetadataForDisplay, -): Record { - const fields: Record = {}; - for (const apiName of componentApiNames) { - const v = getDisplayValueForDetailFieldFromNode(node, apiName, metadata); - const displayValue = v as string | null; - fields[apiName] = { displayValue, value: v }; - } - return fields; -} - -/** - * Resolves display value for a layout item from a GraphQL node (single or multiple components). - * Reuses address/modstamp formatting from fieldUtils by building minimal constituent fields from the node. - * Pass metadata from getObjectInfoBatch so reference fields show the relationship's name instead of Id. - */ -export function getDisplayValueForLayoutItemFromNode( - node: GraphQLRecordNode | null | undefined, - componentApiNames: string[], - metadata?: ObjectMetadataForDisplay, -): LayoutItemDisplayResult { - if (!node || componentApiNames.length === 0) { - return { value: null }; - } - if (componentApiNames.length === 1) { - const apiName = componentApiNames[0]; - const value = getDisplayValueForDetailFieldFromNode(node, apiName, metadata); - const dataType = metadata?.fields?.[apiName]?.dataType; - return { value, dataType }; - } - const constituents = nodeToConstituentFields(node, componentApiNames, metadata); - const result = getDisplayValueForLayoutItem(constituents, componentApiNames); - return { value: result.value, dataType: result.dataType }; -} - -/** - * Resolves display value for a single detail field from a GraphQL node. - * When metadata from getObjectInfoBatch is provided and the field is a Reference (dataType === "Reference") - * with a relationshipName, shows the related record's display value (e.g. Owner.Name) instead of the Id. - */ -/** Treat dataType as Reference regardless of casing (e.g. REFERENCE from GraphQL). */ -function isReferenceDataType(dataType: string | undefined): boolean { - return dataType != null && dataType.toLowerCase() === "reference"; -} - -export function getDisplayValueForDetailFieldFromNode( - node: GraphQLRecordNode | null | undefined, - apiName: string, - metadata?: ObjectMetadataForDisplay, -): string | number | boolean | null { - if (!node || !apiName) return null; - const fieldMeta = metadata?.fields?.[apiName]; - if ( - fieldMeta && - isReferenceDataType(fieldMeta.dataType) && - fieldMeta.relationshipName != null && - fieldMeta.relationshipName !== "" - ) { - const displayValue = getGraphQLNodeValue(node, fieldMeta.relationshipName); - if (displayValue !== null && displayValue !== undefined && displayValue !== "") { - return displayValue; - } - } - return getGraphQLNodeValue(node, apiName); -} - -/** Fallback field names for record display name when nameFields are not available. */ -const DISPLAY_FIELD_CANDIDATES = [ - "Name", - "CaseNumber", - "Subject", - "Title", - "DeveloperName", - "ContractNumber", -] as const; - -/** Minimal metadata for record display name. */ -export type GraphQLRecordDisplayNameMetadata = { nameFields?: string[] } | null; - -/** - * Resolves a display name for a record from a GraphQL node. - * Tries metadata.nameFields first, then DISPLAY_FIELD_CANDIDATES, then node.Id. - */ -export function getGraphQLRecordDisplayName( - node: GraphQLRecordNode | null | undefined, - metadata?: GraphQLRecordDisplayNameMetadata, -): string { - if (!node) return ""; - const id = (node.Id as string) ?? ""; - const candidates = [...(metadata?.nameFields ?? []), ...DISPLAY_FIELD_CANDIDATES]; - for (const fieldPath of candidates) { - const v = getGraphQLNodeValue(node, fieldPath); - if (v !== null && v !== undefined && v !== "") { - return v as string; - } - } - return id; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLObjectInfoAdapter.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLObjectInfoAdapter.ts deleted file mode 100644 index 1cba6b0..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLObjectInfoAdapter.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * GraphQL objectInfos β†’ REST-compatible object info and picklist. - * - * graphQLObjectInfoToObjectInfoResult / graphQLObjectInfosToBatchResponse: used by objectInfoService - * after getObjectInfosGraphQL. extractPicklistValuesFromGraphQLObjectInfo: used for getPicklistValues. - * Normalizes casing and adds synthetic compound fields (e.g. BillingAddress) for layout/dataType. - * - * @module utils/graphQLObjectInfoAdapter - */ - -import type { - ObjectInfoBatchResponse, - GetObjectInfosQueryObjectInfos, - GetPicklistValuesQueryObjectInfo, - GetPicklistValuesQueryField, - GetObjectInfosQueryObjectInfo, - ObjectInfoResult, - PicklistValue as GraphQLPicklistValue, -} from "../types/objectInfo/objectInfo"; -import type { PicklistValue } from "../types/filters/picklist"; - -export function graphQLObjectInfoToObjectInfoResult( - objectInfo: GetObjectInfosQueryObjectInfo, -): ObjectInfoResult { - const { fields, ...rest } = objectInfo; - const fieldsRecord = Object.fromEntries((fields ?? []).map((field) => [field?.ApiName, field])); - return { - ...rest, - fields: fieldsRecord, - }; -} - -/** Convert GraphQL objectInfos array to ObjectInfoBatchResponse (REST shape). */ -export function graphQLObjectInfosToBatchResponse( - objectInfos: GetObjectInfosQueryObjectInfos, - _requestedApiNames: string[], -): ObjectInfoBatchResponse { - const results = objectInfos.map((objectInfo) => ({ - result: graphQLObjectInfoToObjectInfoResult(objectInfo!), - statusCode: 200, - })); - return { results }; -} - -/** - * Extract picklist values for a field from a GraphQL ObjectInfo node (raw response). - * Uses picklistValuesByRecordTypeIDs; prefers the given recordTypeId or first available. - */ -export function extractPicklistValuesFromGraphQLObjectInfo( - objectInfo: NonNullable, - fieldName: string, - recordTypeId?: string, -): PicklistValue[] { - const fields = objectInfo.fields; - if (fields == null) return []; - const fieldMap: Record = Object.fromEntries( - fields.map((field) => { - return [field?.ApiName, field]; - }), - ); - const field = fieldMap[fieldName]; - if (!field) return []; - const picklistData = - "picklistValuesByRecordTypeIDs" in field ? field.picklistValuesByRecordTypeIDs : undefined; - if (!picklistData) return []; - const rtId = recordTypeId ?? "012000000000000AAA"; - const byRecordType = picklistData.find((p) => p!.recordTypeID === rtId) ?? picklistData[0]; - return mapPicklistValues(byRecordType?.picklistValues ?? []); -} - -function mapPicklistValues(values: GraphQLPicklistValue[]): PicklistValue[] { - return values.map((item) => ({ - ...item, - value: item.value ?? "", - label: item.label ?? "", - })); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLRecordAdapter.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLRecordAdapter.ts deleted file mode 100644 index 1122960..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/graphQLRecordAdapter.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Adapts GraphQL UI API node shape to SearchResultRecordData so existing list UI - * (SearchResultCard, ResultCardFields, getNestedFieldValue) works unchanged. - * - * GraphQL node: { Id, Name: { value }, Owner: { Alias: { value } }, ... } - * SearchResultRecordData: { id, fields: Record, apiName, ... } - * FieldValue: { displayValue, value } - */ - -import type { FieldValue, SearchResultRecordData } from "../types/search/searchResults"; - -function isValueLeaf(obj: unknown): obj is { value: string | number | boolean | null } { - return ( - typeof obj === "object" && - obj !== null && - "value" in obj && - (Object.keys(obj).length === 1 || (Object.keys(obj).length === 2 && "displayValue" in obj)) - ); -} - -function graphQLValueToFieldValue(val: unknown): FieldValue { - if (val === null || val === undefined) { - return { displayValue: null, value: null }; - } - if (isValueLeaf(val)) { - const v = val.value; - const display = - typeof v === "string" || typeof v === "number" || typeof v === "boolean" ? v : null; - return { displayValue: display as string | null, value: v }; - } - if (typeof val === "object" && val !== null && !Array.isArray(val)) { - const nested = graphQLNodeToFields(val as Record); - const firstFv = nested && Object.values(nested)[0]; - const display = - firstFv && typeof (firstFv as FieldValue).value !== "object" - ? ((firstFv as FieldValue).value as string | null) - : null; - return { displayValue: display, value: { fields: nested ?? {} } }; - } - return { displayValue: null, value: val }; -} - -function graphQLNodeToFields(node: Record): Record { - const fields: Record = {}; - for (const [key, val] of Object.entries(node)) { - if (key === "Id" || val === undefined) continue; - fields[key] = graphQLValueToFieldValue(val); - } - return fields; -} - -/** - * Converts a GraphQL connection node (from getRecordsGraphQL) to SearchResultRecordData - * so it can be passed to SearchResultCard and other components that expect the keyword-search record shape. - */ -export function graphQLNodeToSearchResultRecordData( - node: Record | undefined, - objectApiName: string, -): SearchResultRecordData { - if (!node || typeof node !== "object") { - return { - id: "", - apiName: objectApiName, - childRelationships: {}, - eTag: "", - fields: {}, - lastModifiedById: null, - lastModifiedDate: null, - recordTypeId: null, - recordTypeInfo: null, - systemModstamp: null, - weakEtag: 0, - }; - } - const id = (node.Id as string) ?? ""; - const fields = graphQLNodeToFields(node); - return { - id, - apiName: objectApiName, - childRelationships: {}, - eTag: "", - fields, - lastModifiedById: null, - lastModifiedDate: null, - recordTypeId: null, - recordTypeInfo: null, - systemModstamp: null, - weakEtag: 0, - }; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/layoutTransformUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/layoutTransformUtils.ts deleted file mode 100644 index 32566e3..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/layoutTransformUtils.ts +++ /dev/null @@ -1,236 +0,0 @@ -/** - * Transforms Layout API sections into a structure for the detail form: section β†’ rows β†’ items. - * Uses layout response (sections, layoutRows, layoutItems, layoutComponents) and optional - * object info for compound field names and dataType. Section merge when useHeading === false. - */ - -import type { LayoutSection, LayoutRow, LayoutItem } from "../types/recordDetail/recordDetail"; - -const HIDE_EMPTY_SECTIONS = true; -const EMPTY_OPTIONS: PicklistOption[] = []; - -export interface ObjectInfoField { - compoundFieldName?: string; - dataType?: string; -} - -export interface ObjectInfo { - apiName?: string; - fields?: Record; -} - -/** Picklist/lookup options for a field (e.g. [{ label, value }]). */ -export type PicklistOption = { - label: string | null; - value: string | number | boolean; - validFor?: unknown[]; -}; - -export interface LayoutTransformContext { - recordId: string; - objectInfo?: ObjectInfo | null; - lookupRecords?: Record | null; - getSectionCollapsedState: (sectionId: string) => boolean; - calculatePicklistValues?: (itemApiName: string, item: LayoutItem) => PicklistOption[] | null; - formOverrides?: { fieldVariant?: string } | null; -} - -export interface TransformedLayoutItem { - key: string; - isField: boolean; - label?: string; - required?: boolean; - readOnly?: boolean; - apiName?: string; - contextName?: string; - options?: PicklistOption[]; - variant?: string; - dataType?: string; - layoutComponentApiNames?: string[]; -} - -/** Single row in a section. */ -export interface TransformedLayoutRow { - key: string; - layoutItems: TransformedLayoutItem[]; -} - -/** Section ready for Section/SectionRow rendering. */ -export interface TransformedSection { - id: string; - key: string; - heading: string; - useHeading: boolean; - collapsible: boolean; - collapsed: boolean; - layoutRows: TransformedLayoutRow[]; -} - -export function createSectionKey(index: number): string { - return "section-" + index; -} - -export function getTransformedSections( - sections: LayoutSection[], - transformContext: LayoutTransformContext, -): TransformedSection[] { - const calculatedSections: TransformedSection[] = []; - let previousSection: TransformedSection | null = null; - - sections.forEach((section, index) => { - if (previousSection !== null && section.useHeading === false) { - const sectionKey = createSectionKey(index); - const appendedRows = section.layoutRows - .map((row, i) => rowTransform(row, i, sectionKey, transformContext)) - .filter((r): r is TransformedLayoutRow => r !== null); - previousSection.layoutRows.push(...appendedRows); - return; - } - - const newSection = sectionTransform(section, index, transformContext); - if (newSection) { - calculatedSections.push(newSection); - previousSection = newSection; - } - }); - - return calculatedSections; -} - -export function sectionTransform( - section: LayoutSection, - index: number, - transformContext: LayoutTransformContext, -): TransformedSection | null { - const { getSectionCollapsedState } = transformContext; - const sectionKey = createSectionKey(index); - const layoutRows = section.layoutRows - .map((row, i) => rowTransform(row, i, sectionKey, transformContext)) - .filter((r): r is TransformedLayoutRow => r !== null); - - if (layoutRows.length === 0 && HIDE_EMPTY_SECTIONS) { - return null; - } - - return { - key: sectionKey, - collapsible: section.collapsible, - collapsed: getSectionCollapsedState(section.id), - useHeading: section.useHeading, - heading: section.heading, - id: section.id, - layoutRows, - }; -} - -export function rowTransform( - row: LayoutRow, - index: number, - sectionKey: string, - transformContext: LayoutTransformContext, -): TransformedLayoutRow | null { - const layoutItems = row.layoutItems.map((item, i) => transformItem(item, i, transformContext)); - - const allItemsHaveNoComponents = layoutItems.every((item) => !item.apiName || !item.isField); - if (allItemsHaveNoComponents) { - return null; - } - return { - key: sectionKey + "-" + index, - layoutItems, - }; -} - -export function transformItem( - item: LayoutItem, - index: number, - transformContext: LayoutTransformContext, -): TransformedLayoutItem { - const { recordId, objectInfo, lookupRecords, calculatePicklistValues, formOverrides } = - transformContext; - - let itemApiName: string | undefined; - let itemComponentType: string | undefined; - - if (item.layoutComponents.length >= 1) { - const itemComponent = item.layoutComponents[0]; - itemComponentType = itemComponent.componentType; - const componentApiName = itemComponent.apiName; - const topLevelCompoundName = - item.layoutComponents.length > 1 && - componentApiName && - objectInfo?.fields?.[componentApiName]?.compoundFieldName; - if (topLevelCompoundName) { - itemApiName = topLevelCompoundName; - } else { - itemApiName = componentApiName ?? undefined; - } - } - - const lookupOptions = - itemApiName != null && lookupRecords?.[itemApiName] != null ? lookupRecords[itemApiName] : null; - - const isFieldType = itemComponentType === "Field"; - - const options: PicklistOption[] = - lookupOptions ?? - (itemApiName ? (calculatePicklistValues?.(itemApiName, item) ?? null) : null) ?? - EMPTY_OPTIONS; - - const fieldMeta = itemApiName ? objectInfo?.fields?.[itemApiName] : undefined; - const layoutComponentApiNames = item.layoutComponents - .filter((c) => c.componentType === "Field" && c.apiName != null) - .map((c) => c.apiName as string); - - let newItem: TransformedLayoutItem = { - key: "item-" + index, - apiName: itemApiName, - contextName: recordId, - label: item.label, - required: item.required, - variant: formOverrides?.fieldVariant ?? "label-stacked", - readOnly: !item.editableForUpdate, - isField: isFieldType, - options, - dataType: fieldMeta?.dataType, - layoutComponentApiNames: - layoutComponentApiNames.length > 0 ? layoutComponentApiNames : undefined, - }; - - if (objectInfo?.apiName?.endsWith("__kav")) { - newItem = { ...newItem, readOnly: true }; - } - - if (newItem.required === true && newItem.readOnly === true) { - newItem = { ...newItem, required: false }; - } - - return newItem; -} - -export function layoutReducer( - sections: TransformedSection[], - reducer: ( - acc: T, - ctx: { - section: TransformedSection; - layoutRow: TransformedLayoutRow; - layoutItem: TransformedLayoutItem; - }, - ) => T, - initialValue: T, -): T { - let accumulator = initialValue; - sections.forEach((section) => - section.layoutRows.forEach((layoutRow) => - layoutRow.layoutItems.forEach((layoutItem) => { - accumulator = reducer(accumulator, { - section, - layoutRow, - layoutItem, - }); - }), - ), - ); - return accumulator; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/linkUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/linkUtils.ts deleted file mode 100644 index a27b9fc..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/linkUtils.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Shared allowlist for link protocols (e.g. for FormattedUrl, and future mailto/tel if rendered as links). - * Centralizes protocol checks so new link types can be added in one place. - */ -export const ALLOWED_LINK_PROTOCOLS = ["http:", "https:"] as const; - -export function isAllowedLinkUrl(value: string): boolean { - try { - const u = new URL(value); - return (ALLOWED_LINK_PROTOCOLS as readonly string[]).includes(u.protocol); - } catch { - return false; - } -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/paginationUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/paginationUtils.ts deleted file mode 100644 index 0141def..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/paginationUtils.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Pagination Utilities - * - * Utility functions for pagination-related operations including page size validation. - */ - -/** - * Default page size options for pagination - */ -export const PAGE_SIZE_OPTIONS = [ - { value: "10", label: "10" }, - { value: "20", label: "20" }, - { value: "50", label: "50" }, -] as const; - -/** - * Valid page size values extracted from PAGE_SIZE_OPTIONS - */ -export const VALID_PAGE_SIZES = PAGE_SIZE_OPTIONS.map((opt) => parseInt(opt.value, 10)); - -/** - * Validates that a page size is one of the allowed options - * @param size - The page size to validate - * @returns true if valid, false otherwise - * - * @example - * ```tsx - * if (isValidPageSize(userInput)) { - * setPageSize(userInput); - * } - * ``` - */ -export function isValidPageSize(size: number): boolean { - return VALID_PAGE_SIZES.includes(size); -} - -/** - * Gets a valid page size, defaulting to the first option if invalid - * @param size - The page size to validate - * @returns A valid page size - * - * @example - * ```tsx - * const safePageSize = getValidPageSize(userInput); // Returns valid size or default - * ``` - */ -export function getValidPageSize(size: number): number { - return isValidPageSize(size) ? size : VALID_PAGE_SIZES[0]; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/recordUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/recordUtils.ts deleted file mode 100644 index bc3ce48..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/recordUtils.ts +++ /dev/null @@ -1,159 +0,0 @@ -/** - * Record utilities: layout-derived fields for GraphQL fetch, safe keys, ID validation. - * - * calculateFieldsToFetch: from layout + object metadata β†’ field names and relation map; - * used by objectDetailService and list to build columns. findIdFieldForRelationship ensures - * Id + relationship name are both requested for reference display. - * - * @module utils/recordUtils - */ - -import type { ObjectInfoResult } from "../types/objectInfo/objectInfo"; -import type { - LayoutResponse, - LayoutRow, - LayoutSection, - LayoutItem, - LayoutComponent, -} from "../types/recordDetail/recordDetail"; - -/** - * Find the Id field (reference foreign key) whose relationshipName matches the given name, - * so we can request both Id and relationship in the record query for display. - */ -function findIdFieldForRelationship( - metadata: ObjectInfoResult, - relationshipName: string, -): string | null { - if (!metadata.fields || !relationshipName) return null; - for (const [apiName, field] of Object.entries(metadata.fields)) { - const isReference = field.dataType != null && field.dataType.toLowerCase() === "reference"; - if (field.relationshipName === relationshipName && (isReference || apiName.endsWith("Id"))) { - return apiName; - } - } - return null; -} - -const getFetchableFieldsFromLayoutItem = function ( - metadata: ObjectInfoResult, - layoutItem: LayoutItem, - relationFieldMap: Record, -) { - const fields: Record = {}; - layoutItem.layoutComponents.forEach((comp: LayoutComponent) => { - // check if this is a field to add - if (!comp.apiName || comp.componentType !== "Field") { - return; - } - - // add field: fieldType - const fieldMetadata = metadata.fields[comp.apiName]; - fields[comp.apiName] = fieldMetadata?.dataType ?? ""; - - // add relatedField if one exists (Id field -> add relationship name so we request Owner.Name) - if (comp.apiName in metadata.fields) { - const relationshipName = fieldMetadata?.relationshipName; - if (relationshipName) { - fields[relationshipName] = fieldMetadata.dataType ?? ""; - - relationFieldMap[comp.apiName] = relationshipName; - } - } else { - // layout component is relationship name (e.g. Owner); ensure we also request the Id - // so buildSelectionTree sees both OwnerId and Owner and requests Owner { Name { value } } - const idField = findIdFieldForRelationship(metadata, comp.apiName); - if (idField) { - const idMeta = metadata.fields[idField]; - fields[idField] = idMeta?.dataType ?? ""; - relationFieldMap[idField] = comp.apiName; - } - } - }); - return fields; -}; - -const getFetchableFieldsFromLayoutRow = function ( - metadata: ObjectInfoResult, - layoutRow: LayoutRow, - relationFieldMap: Record, -) { - let fieldsFromRow: Record = {}; - layoutRow.layoutItems.forEach((item: LayoutItem) => { - Object.assign( - fieldsFromRow, - getFetchableFieldsFromLayoutItem(metadata, item, relationFieldMap), - ); - }); - return fieldsFromRow; -}; - -const getFetchableFieldsFromSection = function ( - metadata: ObjectInfoResult, - section: LayoutSection, - relationFieldMap: Record, -) { - let fieldsFromSection: Record = {}; - section.layoutRows.forEach((row: LayoutRow) => { - Object.assign( - fieldsFromSection, - getFetchableFieldsFromLayoutRow(metadata, row, relationFieldMap), - ); - }); - return fieldsFromSection; -}; - -const getFetchableFieldsFromLayout = function ( - metadata: ObjectInfoResult, - layout: LayoutResponse, - relationFieldMap: Record, -) { - let fieldsFromLayout: Record = {}; - layout.sections.forEach((section) => { - Object.assign( - fieldsFromLayout, - getFetchableFieldsFromSection(metadata, section, relationFieldMap), - ); - }); - return fieldsFromLayout; -}; - -/** - * Returns field API names to request for records from layout + object metadata. - * Includes both Id and relationship name for reference fields so GraphQL can fetch display value. - * - * @param metadata - Object info (fields with dataType, relationshipName). - * @param layout - Layout response (sections, layoutItems, layoutComponents). - * @param shouldPrefixedWithEntityName - If true, prefix names with object (e.g. Account.Name). - * @returns [fieldNames, fieldTypes, relationFieldMap] for buildSelectionTree / optionalFields. - */ -export const calculateFieldsToFetch = function ( - metadata: ObjectInfoResult, - layout: LayoutResponse, - shouldPrefixedWithEntityName: boolean, -): [string[], string[], Record] { - const relationFieldMap: Record = {}; - // populating fields to query for layout - const fields = getFetchableFieldsFromLayout(metadata, layout, relationFieldMap); - let fieldsToFetch = Object.keys(fields); - if (shouldPrefixedWithEntityName) { - fieldsToFetch = fieldsToFetch.map((field) => `${metadata.ApiName}.${field}`); - } - // populate field types for o11y logging - const fieldTypes = Object.values(fields).filter((fieldType) => fieldType !== ""); - return [fieldsToFetch, fieldTypes, relationFieldMap]; -}; -/** Type guard: true if id is a non-empty string matching 15- or 18-char Salesforce ID format. */ -export function isValidSalesforceId(id: string | null | undefined): id is string { - if (!id || typeof id !== "string") return false; - return /^[a-zA-Z0-9]{15}$|^[a-zA-Z0-9]{18}$/.test(id); -} - -/** Safe React key from record id or fallback to prefix-index. */ -export function getSafeKey( - recordId: string | null | undefined, - index: number, - prefix: string = "result", -): string { - return isValidSalesforceId(recordId) ? recordId : `${prefix}-${index}`; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/sanitizationUtils.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/sanitizationUtils.ts deleted file mode 100644 index b1eaa64..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/utils/sanitizationUtils.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Sanitization Utilities - * - * Utility functions for sanitizing user input to prevent injection attacks. - * These utilities provide basic sanitization for filter values. - */ - -/** - * Sanitizes a string value by removing potentially dangerous characters - * and trimming whitespace. - * - * This is a basic sanitization - for production, consider using a library like DOMPurify for more - * comprehensive sanitization. - * Also, note this is NOT an end-to-end security control. - * Client-side sanitization can be bypassed by any attacker using `curl` or Postman. - * To prevent injection attacks (SOSL Injection, XSS): - * 1. The BACKEND (Salesforce API) handles SOSL injection if parameters are passed correctly. - * 2. React handles XSS automatically when rendering variables in JSX (e.g.,
{value}
). - * Do not rely on this function for end-to-end security enforcement. - * - * @param value - The string value to sanitize - * @returns Sanitized string value - * - * @remarks - * - Removes control characters (except newlines, tabs, carriage returns) - * - Trims leading/trailing whitespace - * - Limits length to prevent DoS attacks (default: 1000 characters) - * - Preserves alphanumeric, spaces, and common punctuation - * - * @example - * ```tsx - * const sanitized = sanitizeFilterValue(userInput); - * ``` - */ -export function sanitizeFilterValue(value: string, maxLength: number = 1000): string { - if (typeof value !== "string") { - return ""; - } - - let sanitized = value.trim(); - - if (sanitized.length > maxLength) { - sanitized = sanitized.substring(0, maxLength); - } - - // eslint-disable-next-line no-control-regex -- intentionally matching control chars for sanitization - sanitized = sanitized.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, ""); - - return sanitized; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/hooks/usePropertyListingPriceRange.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/hooks/usePropertyListingPriceRange.ts deleted file mode 100644 index be78a0a..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/hooks/usePropertyListingPriceRange.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Fetches the available min/max listing price for the current search (no price/bedroom filters). - * Use to render the filter bar only after knowing the available price range. - */ -import { useState, useEffect, useRef } from "react"; -import { queryPropertyListingPriceRange } from "@/api/propertyListingGraphQL"; - -/** Cap for slider max when dataset has outliers; UI never sees a higher max. */ -const SLIDER_PRICE_CAP = 50_000; - -export interface PropertyListingPriceRange { - priceMin: number; - priceMax: number; - /** True when raw max was > cap and we capped for the slider (show "50,000+"). */ - maxCapped?: boolean; -} - -/** Fallback when the price-range API call fails. */ -const DEFAULT_PRICE_RANGE: PropertyListingPriceRange = { priceMin: 0, priceMax: 100_000 }; - -function capPriceRange(range: { priceMin: number; priceMax: number }): PropertyListingPriceRange { - if (range.priceMax <= SLIDER_PRICE_CAP) - return { priceMin: range.priceMin, priceMax: range.priceMax }; - return { - priceMin: range.priceMin, - priceMax: SLIDER_PRICE_CAP, - maxCapped: true, - }; -} - -export function usePropertyListingPriceRange(searchQuery: string): { - priceRange: PropertyListingPriceRange | null; - loading: boolean; - error: string | null; -} { - const [priceRange, setPriceRange] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const cancelledRef = useRef(false); - - useEffect(() => { - cancelledRef.current = false; - setLoading(true); - setError(null); - queryPropertyListingPriceRange(searchQuery) - .then((range) => { - if (!cancelledRef.current) setPriceRange(range ? capPriceRange(range) : null); - }) - .catch((err) => { - if (!cancelledRef.current) { - setError(err instanceof Error ? err.message : "Failed to load price range"); - setPriceRange(capPriceRange(DEFAULT_PRICE_RANGE)); - } - }) - .finally(() => { - if (!cancelledRef.current) setLoading(false); - }); - return () => { - cancelledRef.current = true; - }; - }, [searchQuery]); - - return { priceRange, loading, error }; -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/index.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/index.ts deleted file mode 100644 index adb2ca0..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Public API for the Global Search feature package. - * - * Design goals: - * - Export **API services, hooks, types, schemas, and utilities** that customers can import from node_modules. - * - Do **not** export UI components or feature constants (customers build their own UI). - * - * Source implementation lives under `src/features/global-search/**`. - */ - -// --------------------------------------------------------------------------- -// API layer -// --------------------------------------------------------------------------- - -export { objectInfoService } from "./features/global-search/api/objectInfoService"; -export { - objectDetailService, - extractFieldsFromLayout, -} from "./features/global-search/api/objectDetailService"; -export type { RecordDetailResult } from "./features/global-search/api/objectDetailService"; - -export { - getRecordsGraphQL, - getRecordByIdGraphQL, - buildGetRecordsQuery, - buildWhereFromCriteria, - buildOrderByFromSort, -} from "./features/global-search/api/recordListGraphQLService"; -export type { - RecordListGraphQLResult, - RecordListGraphQLVariables, - RecordListGraphQLOptions, - GraphQLRecordNode, -} from "./features/global-search/api/recordListGraphQLService"; - -// --------------------------------------------------------------------------- -// Hooks -// --------------------------------------------------------------------------- - -export { useObjectInfoBatch } from "./features/global-search/hooks/useObjectInfoBatch"; -export { - useObjectListMetadata, - useObjectColumns, - useObjectFilters, -} from "./features/global-search/hooks/useObjectSearchData"; -export { useRecordListGraphQL } from "./features/global-search/hooks/useRecordListGraphQL"; -export { useRecordDetailLayout } from "./features/global-search/hooks/useRecordDetailLayout"; - -export type { ObjectListMetadata } from "./features/global-search/hooks/useObjectSearchData"; - -export type { - UseRecordListGraphQLOptions, - UseRecordListGraphQLReturn, -} from "./features/global-search/hooks/useRecordListGraphQL"; - -export type { - UseRecordDetailLayoutParams, - UseRecordDetailLayoutReturn, -} from "./features/global-search/hooks/useRecordDetailLayout"; - -// --------------------------------------------------------------------------- -// Types + Zod schemas (runtime validation) -// --------------------------------------------------------------------------- - -export { - ColumnArraySchema, - SearchResultRecordArraySchema, - KeywordSearchResultSchema, - SearchResultsResponseSchema, -} from "./features/global-search/types/search/searchResults"; -export type { - Column, - SearchResultRecord, - KeywordSearchResult, - SearchResultsResponse, -} from "./features/global-search/types/search/searchResults"; - -export { - FilterArraySchema, - FilterCriteriaArraySchema, - FILTER_OPERATORS, -} from "./features/global-search/types/filters/filters"; -export type { - Filter, - FilterCriteria, - FilterOperator, - FiltersResponse, -} from "./features/global-search/types/filters/filters"; - -export type { PicklistValue } from "./features/global-search/types/filters/picklist"; - -export type { - ObjectInfoBatchResponse, - ObjectInfoResult, -} from "./features/global-search/types/objectInfo/objectInfo"; - -export { LayoutResponseSchema } from "./features/global-search/types/recordDetail/recordDetail"; -export type { LayoutResponse } from "./features/global-search/types/recordDetail/recordDetail"; - -// --------------------------------------------------------------------------- -// Utilities -// --------------------------------------------------------------------------- - -export { fetchAndValidate, safeEncodePath } from "./features/global-search/utils/apiUtils"; -export { debounce } from "./features/global-search/utils/debounce"; -export { createFiltersKey } from "./features/global-search/utils/cacheUtils"; -export { - calculateFieldsToFetch, - getSafeKey, - isValidSalesforceId, -} from "./features/global-search/utils/recordUtils"; -export { parseFilterValue } from "./features/global-search/utils/filterUtils"; -export { sanitizeFilterValue } from "./features/global-search/utils/sanitizationUtils"; -export { - getGraphQLNodeValue, - getDisplayValueForDetailFieldFromNode, - getDisplayValueForLayoutItemFromNode, - getGraphQLRecordDisplayName, -} from "./features/global-search/utils/graphQLNodeFieldUtils"; -export { graphQLNodeToSearchResultRecordData } from "./features/global-search/utils/graphQLRecordAdapter"; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/About.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/About.tsx deleted file mode 100644 index c88fa69..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/About.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export default function About() { - return ( -
-

About ZENLEASE

-

Placeholder content for the About page.

-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/HelpCenter.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/HelpCenter.tsx deleted file mode 100644 index 44b3ce7..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/HelpCenter.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; - -export default function HelpCenter() { - return ( -
-

Help Center

- - - Frequently Asked Questions - - -

- Placeholder content for help and FAQs. -

-
-
- - - Contact Support - - -

- Reach out to the property management team for assistance. -

-
-
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/PropertyListings.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/PropertyListings.tsx deleted file mode 100644 index 5fffa03..0000000 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/pages/PropertyListings.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { Link } from "react-router"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Card, CardContent } from "@/components/ui/card"; - -const listings = [ - { - id: "1", - name: "Verdana Apartments", - address: "301 Bryant St, San Francisco, CA 94107", - price: "$4,600+", - beds: "2 Beds", - phone: "(650) 440-1111", - }, - { - id: "2", - name: "South Beach Lofts", - address: "250 Brannan St, San Francisco, CA 94107", - price: "$5,379+", - beds: "2 Beds", - phone: "(650) 555-0123", - }, -]; - -export default function PropertyListings() { - return ( -
-
-
-
- - - - -
-

- 2 Bedroom Apartments for Rent in San Francisco CA -

-

1,181 Rentals Available

-
- {listings.map((p) => ( - - - - - Virtual Tours - - -
-

- - {p.name} - -

-

{p.address}

-

- {p.price} {p.beds} -

-

- In Unit Washer & Dryer, Pets Allowed, Fitness Center -

-

{p.phone}

- -
-
-
- ))} -
-
-
- ); -} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.forceignore b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.forceignore similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.forceignore rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.forceignore diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.graphqlrc.yml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.graphqlrc.yml similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.graphqlrc.yml rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.graphqlrc.yml diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.prettierignore b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.prettierignore similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.prettierignore rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.prettierignore diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.prettierrc b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.prettierrc similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/.prettierrc rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/.prettierrc diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/CHANGELOG.md b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/CHANGELOG.md similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/CHANGELOG.md rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/CHANGELOG.md diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/README.md b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/README.md similarity index 63% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/README.md rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/README.md index 8670101..a528138 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/README.md +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/README.md @@ -1,6 +1,6 @@ -# App React Sample B2X +# Property Rental App -A sample B2X (Business-to-Consumer) React web app with an app shell for Salesforce Experience Cloud. Includes property listings, maintenance requests, and a dashboard. Built with React, Vite, TypeScript, and Tailwind/shadcn. +A property rental sample React web app with an app shell for Salesforce Experience Cloud. Includes property listings, maintenance requests, and a dashboard. Built with React, Vite, TypeScript, and Tailwind/shadcn. For project-level details (metadata, deploy, sample data), see the [project README](../../../../../../README.md). diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/codegen.yml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/codegen.yml similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/codegen.yml rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/codegen.yml diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/components.json b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/components.json similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/components.json rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/components.json diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/e2e/app.spec.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/e2e/app.spec.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/e2e/app.spec.ts rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/e2e/app.spec.ts diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/eslint.config.js b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/eslint.config.js similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/eslint.config.js rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/eslint.config.js diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/index.html b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/index.html new file mode 100644 index 0000000..70beefd --- /dev/null +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/index.html @@ -0,0 +1,18 @@ + + + + + + + + + ZENLEASE + + +
+ + + diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/package.json b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/package.json similarity index 89% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/package.json rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/package.json index b8ebde3..082dee4 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/package.json +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/package.json @@ -15,12 +15,12 @@ "graphql:schema": "node scripts/get-graphql-schema.mjs" }, "dependencies": { - "@salesforce/sdk-data": "^1.112.7", - "@salesforce/webapp-experimental": "^1.112.7", + "@salesforce/sdk-data": "^1.116.6", + "@salesforce/webapp-experimental": "^1.116.6", "@tailwindcss/vite": "^4.1.17", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "date-fns": "^4.1.0", + "date-fns": "^3.0.0", "lucide-react": "^0.562.0", "radix-ui": "^1.4.3", "react": "^19.2.0", @@ -36,7 +36,8 @@ "zod": "^4.3.5", "@types/leaflet": "^1.9.8", "leaflet": "^1.9.4", - "react-leaflet": "^5.0.0" + "react-leaflet": "^5.0.0", + "recharts": "^2.15.0" }, "devDependencies": { "@eslint/js": "^9.39.1", @@ -46,7 +47,7 @@ "@graphql-eslint/eslint-plugin": "^4.1.0", "@graphql-tools/utils": "^11.0.0", "@playwright/test": "^1.49.0", - "@salesforce/vite-plugin-webapp-experimental": "^1.112.7", + "@salesforce/vite-plugin-webapp-experimental": "^1.116.6", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/playwright.config.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/playwright.config.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/playwright.config.ts rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/playwright.config.ts diff --git a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/appreactsampleb2e.webapplication-meta.xml b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/propertyrentalapp.webapplication-meta.xml similarity index 82% rename from samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/appreactsampleb2e.webapplication-meta.xml rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/propertyrentalapp.webapplication-meta.xml index f872254..511924f 100644 --- a/samples/webapp-template-app-react-sample-b2e-experimental/force-app/main/default/webapplications/appreactsampleb2e/appreactsampleb2e.webapplication-meta.xml +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/propertyrentalapp.webapplication-meta.xml @@ -1,6 +1,6 @@ - appreactsampleb2e + propertyrentalapp A Salesforce web application. true 1 diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/scripts/get-graphql-schema.mjs b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/scripts/get-graphql-schema.mjs similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/scripts/get-graphql-schema.mjs rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/scripts/get-graphql-schema.mjs diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/scripts/rewrite-e2e-assets.mjs b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/scripts/rewrite-e2e-assets.mjs similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/scripts/rewrite-e2e-assets.mjs rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/scripts/rewrite-e2e-assets.mjs diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/applicationApi.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/applications/applicationApi.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/applicationApi.ts rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/applications/applicationApi.ts diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/graphql-operations-types.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/graphql-operations-types.ts new file mode 100644 index 0000000..43c1823 --- /dev/null +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/graphql-operations-types.ts @@ -0,0 +1,11905 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { + [_ in K]?: never; +}; +export type Incremental = + | T + | { [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string }; + String: { input: string; output: string }; + Boolean: { input: boolean; output: boolean }; + Int: { input: number; output: number }; + Float: { input: number; output: number }; + Base64: { input: string; output: string }; + Currency: { input: number | string; output: number }; + Date: { input: string; output: string }; + DateTime: { input: string; output: string }; + Double: { input: number | string; output: number }; + Email: { input: string; output: string }; + /** Can be set to an ID or a Reference to the result of another mutation operation. */ + IdOrRef: { input: string; output: string }; + Latitude: { input: number | string; output: number }; + /** A 64-bit signed integer */ + Long: { input: number; output: number }; + LongTextArea: { input: string; output: string }; + Longitude: { input: number | string; output: number }; + MultiPicklist: { input: string; output: string }; + Percent: { input: number | string; output: number }; + PhoneNumber: { input: string; output: string }; + Picklist: { input: string; output: string }; + RichTextArea: { input: string; output: string }; + TextArea: { input: string; output: string }; + Time: { input: string; output: string }; + Url: { input: string; output: string }; +}; + +export type AccountHistory_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AccountPartner_Filter = { + AccountFrom?: InputMaybe; + AccountFromId?: InputMaybe; + AccountTo?: InputMaybe; + AccountToId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + ReversePartnerId?: InputMaybe; + Role?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Account_Filter = { + AccountSource?: InputMaybe; + AnnualRevenue?: InputMaybe; + BillingCity?: InputMaybe; + BillingCountry?: InputMaybe; + BillingGeocodeAccuracy?: InputMaybe; + BillingLatitude?: InputMaybe; + BillingLongitude?: InputMaybe; + BillingPostalCode?: InputMaybe; + BillingState?: InputMaybe; + BillingStreet?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Fax?: InputMaybe; + Id?: InputMaybe; + Industry?: InputMaybe; + IsDeleted?: InputMaybe; + Jigsaw?: InputMaybe; + JigsawCompanyId?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + Name?: InputMaybe; + NumberOfEmployees?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + Phone?: InputMaybe; + PhotoUrl?: InputMaybe; + ShippingCity?: InputMaybe; + ShippingCountry?: InputMaybe; + ShippingGeocodeAccuracy?: InputMaybe; + ShippingLatitude?: InputMaybe; + ShippingLongitude?: InputMaybe; + ShippingPostalCode?: InputMaybe; + ShippingState?: InputMaybe; + ShippingStreet?: InputMaybe; + SicDesc?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + Website?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Account_OrderBy = { + AccountSource?: InputMaybe; + AnnualRevenue?: InputMaybe; + BillingCity?: InputMaybe; + BillingCountry?: InputMaybe; + BillingGeocodeAccuracy?: InputMaybe; + BillingLatitude?: InputMaybe; + BillingLongitude?: InputMaybe; + BillingPostalCode?: InputMaybe; + BillingState?: InputMaybe; + BillingStreet?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Fax?: InputMaybe; + Id?: InputMaybe; + Industry?: InputMaybe; + IsDeleted?: InputMaybe; + Jigsaw?: InputMaybe; + JigsawCompanyId?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + Name?: InputMaybe; + NumberOfEmployees?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + Phone?: InputMaybe; + PhotoUrl?: InputMaybe; + ShippingCity?: InputMaybe; + ShippingCountry?: InputMaybe; + ShippingGeocodeAccuracy?: InputMaybe; + ShippingLatitude?: InputMaybe; + ShippingLongitude?: InputMaybe; + ShippingPostalCode?: InputMaybe; + ShippingState?: InputMaybe; + ShippingStreet?: InputMaybe; + SicDesc?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + Website?: InputMaybe; +}; + +export type Agent__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Agent__C_Filter = { + Agent_Type__c?: InputMaybe; + Availability__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Emergency_Alt__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Language__c?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + License_Expiry__c?: InputMaybe; + License_Number__c?: InputMaybe; + Name?: InputMaybe; + Office_Location__c?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + Territory__c?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Agent__C_OrderBy = { + Agent_Type__c?: InputMaybe; + Availability__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Emergency_Alt__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Language__c?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + License_Expiry__c?: InputMaybe; + License_Number__c?: InputMaybe; + Name?: InputMaybe; + Office_Location__c?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + Territory__c?: InputMaybe; +}; + +export type Agent__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Agent__C_Owner_OrderBys = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type AggregateOrderByStringClause = { + function?: InputMaybe; + nulls?: InputMaybe; + order?: InputMaybe; +}; + +export const AggregateOrderByStringFunction = { + Count: "COUNT", + CountDistinct: "COUNT_DISTINCT", + Max: "MAX", + Min: "MIN", +} as const; +export type AggregateOrderByStringFunction = + (typeof AggregateOrderByStringFunction)[keyof typeof AggregateOrderByStringFunction]; + +export type AnalyticsUserAttrFuncTkn_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefinitionName?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + TargetObject?: InputMaybe; + TargetObjectField?: InputMaybe; + TokenKey?: InputMaybe; + ViewerTgtObjRelDesc?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AnalyticsUserAttrFuncTkn_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type AppAnalyticsQueryRequest_Filter = { + AvailableSince?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DownloadExpirationTime?: InputMaybe; + DownloadSize?: InputMaybe; + DownloadUrl?: InputMaybe; + EndTime?: InputMaybe; + ErrorMessage?: InputMaybe; + FileCompression?: InputMaybe; + FileType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + OrganizationIds?: InputMaybe; + PackageIds?: InputMaybe; + QuerySubmittedTime?: InputMaybe; + RequestState?: InputMaybe; + StartTime?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AppMenuItem_Filter = { + ApplicationId?: InputMaybe; + CanvasAccessMethod?: InputMaybe; + CanvasEnabled?: InputMaybe; + CanvasOptions?: InputMaybe; + CanvasReferenceId?: InputMaybe; + CanvasSelectedLocations?: InputMaybe; + CanvasUrl?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + FormFactors?: InputMaybe; + IconUrl?: InputMaybe; + Id?: InputMaybe; + InfoUrl?: InputMaybe; + IsAccessible?: InputMaybe; + IsDeleted?: InputMaybe; + IsRegisteredDeviceOnly?: InputMaybe; + IsUsingAdminAuthorization?: InputMaybe; + IsVisible?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LogoUrl?: InputMaybe; + MobileAppBinaryId?: InputMaybe; + MobileAppInstallUrl?: InputMaybe; + MobileAppInstalledDate?: InputMaybe; + MobileAppInstalledVersion?: InputMaybe; + MobileAppVer?: InputMaybe; + MobileDeviceType?: InputMaybe; + MobileMinOsVer?: InputMaybe; + MobilePlatform?: InputMaybe; + MobileStartUrl?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + SortOrder?: InputMaybe; + StartUrl?: InputMaybe; + SystemModstamp?: InputMaybe; + TabSetType?: InputMaybe; + Type?: InputMaybe; + UiType?: InputMaybe; + UserSortOrder?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Application__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Application__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Employment__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + References__c?: InputMaybe; + Start_Date__c?: InputMaybe; + Status__c?: InputMaybe; + SystemModstamp?: InputMaybe; + User__c?: InputMaybe; + User__r?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Application__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ApprovalSubmissionDetailHistory_Filter = { + ApprovalSubmissionDetail?: InputMaybe; + ApprovalSubmissionDetailId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ApprovalSubmissionDetail_Filter = { + ActionChannelName?: InputMaybe; + ActionContext?: InputMaybe; + ActionName?: InputMaybe; + ActionPerformedBy?: InputMaybe; + ActionPerformedById?: InputMaybe; + ActionPerformerRole?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionId?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + ApprovalWorkItemId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ApprovalSubmissionHistory_Filter = { + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ApprovalSubmission_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DoesSendApprovalEmail?: InputMaybe; + FlowOrchestrationInstance?: InputMaybe; + FlowOrchestrationInstanceId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + RelatedRecord?: InputMaybe; + RelatedRecordId?: InputMaybe; + RelatedRecordObjectName?: InputMaybe; + Status?: InputMaybe; + SubmittedBy?: InputMaybe; + SubmittedById?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ApprovalSubmission_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ApprovalSubmission_RelatedRecord_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + AnalyticsUserAttrFuncTkn?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AssociatedLocation?: InputMaybe; + AuthorizationForm?: InputMaybe; + AuthorizationFormConsent?: InputMaybe; + AuthorizationFormDataUse?: InputMaybe; + AuthorizationFormText?: InputMaybe; + BusinessBrand?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CaseComment?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContactPointAddress?: InputMaybe; + ContactPointConsent?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointPhone?: InputMaybe; + ContactPointTypeConsent?: InputMaybe; + ContactRequest?: InputMaybe; + ContentDocument?: InputMaybe; + ContentVersion?: InputMaybe; + Contract?: InputMaybe; + Customer?: InputMaybe; + DataUseLegalBasis?: InputMaybe; + DataUsePurpose?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + DuplicateRecordItem?: InputMaybe; + DuplicateRecordSet?: InputMaybe; + EmailMessage?: InputMaybe; + EngagementChannelType?: InputMaybe; + FlowOrchestrationInstance?: InputMaybe; + FlowOrchestrationVersion?: InputMaybe; + Image?: InputMaybe; + Individual?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + LocationTrustMeasure?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + ManagedContentVariant?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityRelatedDeleteLog?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + OrgMetricScanSummary?: InputMaybe; + Organization?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + QuickText?: InputMaybe; + ReportHierarchyObjectField?: InputMaybe; + SecurityHealthCheckAlertRecipient?: InputMaybe; + SecurityHealthCheckResult?: InputMaybe; + Seller?: InputMaybe; + SocialPersona?: InputMaybe; + SocialPost?: InputMaybe; + StreamingChannel?: InputMaybe; + TableauHostMapping?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + UnstructuredStorageSpace?: InputMaybe; + User?: InputMaybe; + UserLocalWebServerIdentity?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type ApprovalWorkItemHistory_Filter = { + ApprovalWorkItem?: InputMaybe; + ApprovalWorkItemId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ApprovalWorkItem_AssignedTo_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ApprovalWorkItem_Filter = { + ApprovalConditionName?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionId?: InputMaybe; + AssignedTo?: InputMaybe; + AssignedToId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FlowOrchestrationWorkItem?: InputMaybe; + FlowOrchestrationWorkItemId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + ParentWorkItem?: InputMaybe; + ParentWorkItemId?: InputMaybe; + RelatedRecord?: InputMaybe; + RelatedRecordId?: InputMaybe; + RelatedRecordObjectName?: InputMaybe; + ReviewedBy?: InputMaybe; + ReviewedById?: InputMaybe; + ReviewedDate?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ApprovalWorkItem_RelatedRecord_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + AnalyticsUserAttrFuncTkn?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AssociatedLocation?: InputMaybe; + AuthorizationForm?: InputMaybe; + AuthorizationFormConsent?: InputMaybe; + AuthorizationFormDataUse?: InputMaybe; + AuthorizationFormText?: InputMaybe; + BusinessBrand?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CaseComment?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContactPointAddress?: InputMaybe; + ContactPointConsent?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointPhone?: InputMaybe; + ContactPointTypeConsent?: InputMaybe; + ContactRequest?: InputMaybe; + ContentDocument?: InputMaybe; + ContentVersion?: InputMaybe; + Contract?: InputMaybe; + Customer?: InputMaybe; + DataUseLegalBasis?: InputMaybe; + DataUsePurpose?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + DuplicateRecordItem?: InputMaybe; + DuplicateRecordSet?: InputMaybe; + EmailMessage?: InputMaybe; + EngagementChannelType?: InputMaybe; + FlowOrchestrationInstance?: InputMaybe; + FlowOrchestrationVersion?: InputMaybe; + Image?: InputMaybe; + Individual?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + LocationTrustMeasure?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + ManagedContentVariant?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityRelatedDeleteLog?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + OrgMetricScanSummary?: InputMaybe; + Organization?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + QuickText?: InputMaybe; + ReportHierarchyObjectField?: InputMaybe; + SecurityHealthCheckAlertRecipient?: InputMaybe; + SecurityHealthCheckResult?: InputMaybe; + Seller?: InputMaybe; + SocialPersona?: InputMaybe; + SocialPost?: InputMaybe; + StreamingChannel?: InputMaybe; + TableauHostMapping?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + UnstructuredStorageSpace?: InputMaybe; + User?: InputMaybe; + UserLocalWebServerIdentity?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type AssetHistory_Filter = { + Asset?: InputMaybe; + AssetId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AssetRelationshipHistory_Filter = { + AssetRelationship?: InputMaybe; + AssetRelationshipId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AssetRelationship_Filter = { + Asset?: InputMaybe; + AssetId?: InputMaybe; + AssetRelationshipNumber?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FromDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + RelatedAsset?: InputMaybe; + RelatedAssetId?: InputMaybe; + RelationshipType?: InputMaybe; + SystemModstamp?: InputMaybe; + ToDate?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Asset_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + AssetLevel?: InputMaybe; + AssetProvidedBy?: InputMaybe; + AssetProvidedById?: InputMaybe; + AssetServicedBy?: InputMaybe; + AssetServicedById?: InputMaybe; + City?: InputMaybe; + Contact?: InputMaybe; + ContactId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + Id?: InputMaybe; + InstallDate?: InputMaybe; + IsCompetitorProduct?: InputMaybe; + IsDeleted?: InputMaybe; + IsInternal?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + Longitude?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + PostalCode?: InputMaybe; + Price?: InputMaybe; + Product2?: InputMaybe; + Product2Id?: InputMaybe; + ProductCode?: InputMaybe; + PurchaseDate?: InputMaybe; + Quantity?: InputMaybe; + RootAsset?: InputMaybe; + RootAssetId?: InputMaybe; + SerialNumber?: InputMaybe; + State?: InputMaybe; + Status?: InputMaybe; + StockKeepingUnit?: InputMaybe; + Street?: InputMaybe; + SystemModstamp?: InputMaybe; + UsageEndDate?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AssociatedLocationHistory_Filter = { + AssociatedLocation?: InputMaybe; + AssociatedLocationId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AssociatedLocation_Filter = { + ActiveFrom?: InputMaybe; + ActiveTo?: InputMaybe; + AssociatedLocationNumber?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Location?: InputMaybe; + LocationId?: InputMaybe; + ParentRecord?: InputMaybe; + ParentRecordId?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Attachment_Filter = { + BodyLength?: InputMaybe; + ContentType?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrivate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Attachment_Owner_Filters = { + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Attachment_Parent_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + EmailMessage?: InputMaybe; + EmailTemplate?: InputMaybe; + EngagementChannelType?: InputMaybe; + Event?: InputMaybe; + Image?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + Payment__c?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + SocialPost?: InputMaybe; + Task?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type AuthorizationFormConsentHistory_Filter = { + AuthorizationFormConsent?: InputMaybe; + AuthorizationFormConsentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationFormConsent_ConsentGiver_Filters = { + Account?: InputMaybe; + Contact?: InputMaybe; + Individual?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type AuthorizationFormConsent_Filter = { + AuthorizationFormText?: InputMaybe; + AuthorizationFormTextId?: InputMaybe; + ConsentCapturedDateTime?: InputMaybe; + ConsentCapturedSource?: InputMaybe; + ConsentCapturedSourceType?: InputMaybe; + ConsentGiver?: InputMaybe; + ConsentGiverId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DocumentVersion?: InputMaybe; + DocumentVersionId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + RelatedRecord?: InputMaybe; + RelatedRecordId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationFormConsent_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type AuthorizationFormDataUseHistory_Filter = { + AuthorizationFormDataUse?: InputMaybe; + AuthorizationFormDataUseId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationFormDataUse_Filter = { + AuthorizationForm?: InputMaybe; + AuthorizationFormId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationFormDataUse_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type AuthorizationFormHistory_Filter = { + AuthorizationForm?: InputMaybe; + AuthorizationFormId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationFormTextHistory_Filter = { + AuthorizationFormText?: InputMaybe; + AuthorizationFormTextId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationFormText_Filter = { + AuthorizationForm?: InputMaybe; + AuthorizationFormId?: InputMaybe; + ContentDocument?: InputMaybe; + ContentDocumentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FullAuthorizationFormUrl?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Locale?: InputMaybe; + LocaleSelection?: InputMaybe; + Name?: InputMaybe; + SummaryAuthFormText?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationForm_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultAuthFormText?: InputMaybe; + DefaultAuthFormTextId?: InputMaybe; + EffectiveFromDate?: InputMaybe; + EffectiveToDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsSignatureRequired?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + RevisionNumber?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type AuthorizationForm_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type BackgroundOperation_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Error?: InputMaybe; + ExecutionGroup?: InputMaybe; + ExpiresAt?: InputMaybe; + FinishedAt?: InputMaybe; + GroupLeader?: InputMaybe; + GroupLeaderId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + NumFollowers?: InputMaybe; + ParentKey?: InputMaybe; + ProcessAfter?: InputMaybe; + RetryBackoff?: InputMaybe; + RetryCount?: InputMaybe; + RetryLimit?: InputMaybe; + SequenceGroup?: InputMaybe; + SequenceNumber?: InputMaybe; + StartedAt?: InputMaybe; + Status?: InputMaybe; + SubmittedAt?: InputMaybe; + SystemModstamp?: InputMaybe; + Timeout?: InputMaybe; + Type?: InputMaybe; + WorkerUri?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type BooleanOperators = { + eq?: InputMaybe; + ne?: InputMaybe; +}; + +export type BusinessBrand_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + OrgId?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type BusinessBrand_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type BusinessHours_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FridayEndTime?: InputMaybe; + FridayStartTime?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsDefault?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + MondayEndTime?: InputMaybe; + MondayStartTime?: InputMaybe; + Name?: InputMaybe; + SaturdayEndTime?: InputMaybe; + SaturdayStartTime?: InputMaybe; + SundayEndTime?: InputMaybe; + SundayStartTime?: InputMaybe; + SystemModstamp?: InputMaybe; + ThursdayEndTime?: InputMaybe; + ThursdayStartTime?: InputMaybe; + TimeZoneSidKey?: InputMaybe; + TuesdayEndTime?: InputMaybe; + TuesdayStartTime?: InputMaybe; + WednesdayEndTime?: InputMaybe; + WednesdayStartTime?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CampaignHistory_Filter = { + Campaign?: InputMaybe; + CampaignId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CampaignMemberStatus_Filter = { + CampaignId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + HasResponded?: InputMaybe; + Id?: InputMaybe; + IsDefault?: InputMaybe; + IsDeleted?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + SortOrder?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CampaignMember_Filter = { + Campaign?: InputMaybe; + CampaignId?: InputMaybe; + City?: InputMaybe; + CompanyOrAccount?: InputMaybe; + Contact?: InputMaybe; + ContactId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DoNotCall?: InputMaybe; + Email?: InputMaybe; + Fax?: InputMaybe; + FirstName?: InputMaybe; + FirstRespondedDate?: InputMaybe; + HasOptedOutOfEmail?: InputMaybe; + HasOptedOutOfFax?: InputMaybe; + HasResponded?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + Lead?: InputMaybe; + LeadId?: InputMaybe; + LeadOrContactId?: InputMaybe; + LeadOrContactOwner?: InputMaybe; + LeadOrContactOwnerId?: InputMaybe; + LeadSource?: InputMaybe; + MobilePhone?: InputMaybe; + Name?: InputMaybe; + Phone?: InputMaybe; + PostalCode?: InputMaybe; + Salutation?: InputMaybe; + State?: InputMaybe; + Status?: InputMaybe; + Street?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CampaignMember_LeadOrContactOwner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Campaign_Filter = { + ActualCost?: InputMaybe; + AmountAllOpportunities?: InputMaybe; + AmountWonOpportunities?: InputMaybe; + BudgetedCost?: InputMaybe; + CampaignMemberRecordType?: InputMaybe; + CampaignMemberRecordTypeId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + EndDate?: InputMaybe; + ExpectedResponse?: InputMaybe; + ExpectedRevenue?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + NumberOfContacts?: InputMaybe; + NumberOfConvertedLeads?: InputMaybe; + NumberOfLeads?: InputMaybe; + NumberOfOpportunities?: InputMaybe; + NumberOfResponses?: InputMaybe; + NumberOfWonOpportunities?: InputMaybe; + NumberSent?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + ShowCampMembChart?: InputMaybe; + StartDate?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CaseComment_Filter = { + CommentBody?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPublished?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CaseContactRole_Filter = { + Cases?: InputMaybe; + CasesId?: InputMaybe; + Contact?: InputMaybe; + ContactId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Role?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CaseHistory_Filter = { + Case?: InputMaybe; + CaseId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Case_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + CaseNumber?: InputMaybe; + ClosedDate?: InputMaybe; + Comments?: InputMaybe; + Contact?: InputMaybe; + ContactEmail?: InputMaybe; + ContactFax?: InputMaybe; + ContactId?: InputMaybe; + ContactMobile?: InputMaybe; + ContactPhone?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsClosed?: InputMaybe; + IsDeleted?: InputMaybe; + IsEscalated?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + MilestoneTimer?: InputMaybe; + Origin?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + Priority?: InputMaybe; + Reason?: InputMaybe; + Status?: InputMaybe; + Subject?: InputMaybe; + SuppliedCompany?: InputMaybe; + SuppliedEmail?: InputMaybe; + SuppliedName?: InputMaybe; + SuppliedPhone?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Case_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type CommSubscriptionChannelTypeHistory_Filter = { + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionChannelTypeId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscriptionChannelType_Filter = { + CommunicationSubscription?: InputMaybe; + CommunicationSubscriptionId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + EngagementChannelType?: InputMaybe; + EngagementChannelTypeId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscriptionChannelType_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type CommSubscriptionConsentHistory_Filter = { + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionConsentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscriptionConsent_ConsentGiver_Filters = { + Account?: InputMaybe; + Contact?: InputMaybe; + Individual?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type CommSubscriptionConsent_ContactPoint_Filters = { + ContactPointAddress?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointPhone?: InputMaybe; + Name?: InputMaybe; +}; + +export type CommSubscriptionConsent_Filter = { + BusinessBrand?: InputMaybe; + BusinessBrandId?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionChannelTypeId?: InputMaybe; + ConsentCapturedDateTime?: InputMaybe; + ConsentCapturedSource?: InputMaybe; + ConsentGiver?: InputMaybe; + ConsentGiverId?: InputMaybe; + ContactPoint?: InputMaybe; + ContactPointId?: InputMaybe; + ContactPointValue?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + EffectiveFromDate?: InputMaybe; + EngagementChannelType?: InputMaybe; + EngagementChannelTypeId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Party?: InputMaybe; + PartyId?: InputMaybe; + PartyRole?: InputMaybe; + PartyRoleId?: InputMaybe; + PrivacyConsentStatus?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscriptionConsent_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type CommSubscriptionConsent_PartyRole_Filters = { + Customer?: InputMaybe; + Name?: InputMaybe; + Seller?: InputMaybe; +}; + +export type CommSubscriptionHistory_Filter = { + CommSubscription?: InputMaybe; + CommSubscriptionId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscriptionTimingHistory_Filter = { + CommSubscriptionTiming?: InputMaybe; + CommSubscriptionTimingId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscriptionTiming_Filter = { + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionConsentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + Unit?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscription_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CommSubscription_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactHistory_Filter = { + Contact?: InputMaybe; + ContactId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointAddressHistory_Filter = { + ContactPointAddress?: InputMaybe; + ContactPointAddressId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointAddress_Filter = { + ActiveFromDate?: InputMaybe; + ActiveToDate?: InputMaybe; + AddressType?: InputMaybe; + BestTimeToContactEndTime?: InputMaybe; + BestTimeToContactStartTime?: InputMaybe; + BestTimeToContactTimezone?: InputMaybe; + City?: InputMaybe; + ContactPointPhone?: InputMaybe; + ContactPointPhoneId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + Id?: InputMaybe; + IsDefault?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + IsThirdPartyAddress?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + Longitude?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + PostalCode?: InputMaybe; + PreferenceRank?: InputMaybe; + State?: InputMaybe; + Street?: InputMaybe; + SystemModstamp?: InputMaybe; + UsageType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointAddress_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactPointAddress_Parent_Filters = { + Account?: InputMaybe; + Individual?: InputMaybe; + Name?: InputMaybe; +}; + +export type ContactPointConsentHistory_Filter = { + ContactPointConsent?: InputMaybe; + ContactPointConsentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointConsent_ContactPoint_Filters = { + ContactPointAddress?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointPhone?: InputMaybe; + Name?: InputMaybe; +}; + +export type ContactPointConsent_Filter = { + BusinessBrand?: InputMaybe; + BusinessBrandId?: InputMaybe; + CaptureContactPointType?: InputMaybe; + CaptureDate?: InputMaybe; + CaptureSource?: InputMaybe; + ContactPoint?: InputMaybe; + ContactPointId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + DoubleConsentCaptureDate?: InputMaybe; + EffectiveFrom?: InputMaybe; + EffectiveTo?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Party?: InputMaybe; + PartyId?: InputMaybe; + PartyRole?: InputMaybe; + PartyRoleId?: InputMaybe; + PrivacyConsentStatus?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointConsent_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactPointConsent_PartyRole_Filters = { + Customer?: InputMaybe; + Name?: InputMaybe; + Seller?: InputMaybe; +}; + +export type ContactPointEmailHistory_Filter = { + ContactPointEmail?: InputMaybe; + ContactPointEmailId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointEmail_Filter = { + ActiveFromDate?: InputMaybe; + ActiveToDate?: InputMaybe; + BestTimeToContactEndTime?: InputMaybe; + BestTimeToContactStartTime?: InputMaybe; + BestTimeToContactTimezone?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + EmailAddress?: InputMaybe; + EmailDomain?: InputMaybe; + EmailLatestBounceDateTime?: InputMaybe; + EmailLatestBounceReasonText?: InputMaybe; + EmailMailBox?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + PreferenceRank?: InputMaybe; + SystemModstamp?: InputMaybe; + UsageType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointEmail_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactPointEmail_Parent_Filters = { + Account?: InputMaybe; + Individual?: InputMaybe; + Name?: InputMaybe; +}; + +export type ContactPointPhoneHistory_Filter = { + ContactPointPhone?: InputMaybe; + ContactPointPhoneId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointPhone_Filter = { + ActiveFromDate?: InputMaybe; + ActiveToDate?: InputMaybe; + AreaCode?: InputMaybe; + BestTimeToContactEndTime?: InputMaybe; + BestTimeToContactStartTime?: InputMaybe; + BestTimeToContactTimezone?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ExtensionNumber?: InputMaybe; + FormattedInternationalPhoneNumber?: InputMaybe; + FormattedNationalPhoneNumber?: InputMaybe; + Id?: InputMaybe; + IsBusinessPhone?: InputMaybe; + IsDeleted?: InputMaybe; + IsFaxCapable?: InputMaybe; + IsPersonalPhone?: InputMaybe; + IsPrimary?: InputMaybe; + IsSmsCapable?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + PhoneType?: InputMaybe; + PreferenceRank?: InputMaybe; + SystemModstamp?: InputMaybe; + TelephoneNumber?: InputMaybe; + UsageType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointPhone_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactPointPhone_Parent_Filters = { + Account?: InputMaybe; + Individual?: InputMaybe; + Name?: InputMaybe; +}; + +export type ContactPointTypeConsentHistory_Filter = { + ContactPointTypeConsent?: InputMaybe; + ContactPointTypeConsentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointTypeConsent_Filter = { + BusinessBrand?: InputMaybe; + BusinessBrandId?: InputMaybe; + CaptureContactPointType?: InputMaybe; + CaptureDate?: InputMaybe; + CaptureSource?: InputMaybe; + ContactPointType?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + DoubleConsentCaptureDate?: InputMaybe; + EffectiveFrom?: InputMaybe; + EffectiveTo?: InputMaybe; + EngagementChannelType?: InputMaybe; + EngagementChannelTypeId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Party?: InputMaybe; + PartyId?: InputMaybe; + PartyRole?: InputMaybe; + PartyRoleId?: InputMaybe; + PrivacyConsentStatus?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactPointTypeConsent_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactPointTypeConsent_PartyRole_Filters = { + Customer?: InputMaybe; + Name?: InputMaybe; + Seller?: InputMaybe; +}; + +export type ContactRequest_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsCallback?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + PreferredChannel?: InputMaybe; + PreferredPhone?: InputMaybe; + RequestDescription?: InputMaybe; + RequestReason?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + What?: InputMaybe; + WhatId?: InputMaybe; + Who?: InputMaybe; + WhoId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContactRequest_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ContactRequest_What_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + Case?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lease__c?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Payment__c?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; +}; + +export type ContactRequest_Who_Filters = { + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Contact_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + AssistantName?: InputMaybe; + AssistantPhone?: InputMaybe; + Birthdate?: InputMaybe; + BuyerAttributes?: InputMaybe; + ContactSource?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Department?: InputMaybe; + DepartmentGroup?: InputMaybe; + Description?: InputMaybe; + Email?: InputMaybe; + EmailBouncedDate?: InputMaybe; + EmailBouncedReason?: InputMaybe; + Fax?: InputMaybe; + FirstName?: InputMaybe; + HomePhone?: InputMaybe; + Id?: InputMaybe; + Individual?: InputMaybe; + IndividualId?: InputMaybe; + IsDeleted?: InputMaybe; + IsEmailBounced?: InputMaybe; + Jigsaw?: InputMaybe; + JigsawContactId?: InputMaybe; + LastActivityDate?: InputMaybe; + LastCURequestDate?: InputMaybe; + LastCUUpdateDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LeadSource?: InputMaybe; + MailingCity?: InputMaybe; + MailingCountry?: InputMaybe; + MailingGeocodeAccuracy?: InputMaybe; + MailingLatitude?: InputMaybe; + MailingLongitude?: InputMaybe; + MailingPostalCode?: InputMaybe; + MailingState?: InputMaybe; + MailingStreet?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + MobilePhone?: InputMaybe; + Name?: InputMaybe; + OtherCity?: InputMaybe; + OtherCountry?: InputMaybe; + OtherGeocodeAccuracy?: InputMaybe; + OtherLatitude?: InputMaybe; + OtherLongitude?: InputMaybe; + OtherPhone?: InputMaybe; + OtherPostalCode?: InputMaybe; + OtherState?: InputMaybe; + OtherStreet?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone?: InputMaybe; + PhotoUrl?: InputMaybe; + ReportsTo?: InputMaybe; + ReportsToId?: InputMaybe; + Salutation?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + TitleType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Contact_OrderBy = { + Account?: InputMaybe; + AccountId?: InputMaybe; + AssistantName?: InputMaybe; + AssistantPhone?: InputMaybe; + Birthdate?: InputMaybe; + ContactSource?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Department?: InputMaybe; + DepartmentGroup?: InputMaybe; + Description?: InputMaybe; + Email?: InputMaybe; + EmailBouncedDate?: InputMaybe; + EmailBouncedReason?: InputMaybe; + Fax?: InputMaybe; + FirstName?: InputMaybe; + HomePhone?: InputMaybe; + Id?: InputMaybe; + Individual?: InputMaybe; + IndividualId?: InputMaybe; + IsDeleted?: InputMaybe; + IsEmailBounced?: InputMaybe; + Jigsaw?: InputMaybe; + JigsawContactId?: InputMaybe; + LastActivityDate?: InputMaybe; + LastCURequestDate?: InputMaybe; + LastCUUpdateDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LeadSource?: InputMaybe; + MailingCity?: InputMaybe; + MailingCountry?: InputMaybe; + MailingGeocodeAccuracy?: InputMaybe; + MailingLatitude?: InputMaybe; + MailingLongitude?: InputMaybe; + MailingPostalCode?: InputMaybe; + MailingState?: InputMaybe; + MailingStreet?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + MobilePhone?: InputMaybe; + Name?: InputMaybe; + OtherCity?: InputMaybe; + OtherCountry?: InputMaybe; + OtherGeocodeAccuracy?: InputMaybe; + OtherLatitude?: InputMaybe; + OtherLongitude?: InputMaybe; + OtherPhone?: InputMaybe; + OtherPostalCode?: InputMaybe; + OtherState?: InputMaybe; + OtherStreet?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone?: InputMaybe; + PhotoUrl?: InputMaybe; + ReportsTo?: InputMaybe; + ReportsToId?: InputMaybe; + Salutation?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + TitleType?: InputMaybe; +}; + +export type ContentDocumentHistory_Filter = { + ContentDocument?: InputMaybe; + ContentDocumentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentDocumentLink_Filter = { + ContentDocument?: InputMaybe; + ContentDocumentId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LinkedEntity?: InputMaybe; + LinkedEntityId?: InputMaybe; + ShareType?: InputMaybe; + SystemModstamp?: InputMaybe; + Visibility?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentDocumentLink_LinkedEntity_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AuthorizationFormText?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContentWorkspace?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + EmailMessage?: InputMaybe; + EmailTemplate?: InputMaybe; + EngagementChannelType?: InputMaybe; + EnhancedLetterhead?: InputMaybe; + Event?: InputMaybe; + Image?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + ListEmail?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Network?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + Organization?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Report?: InputMaybe; + SocialPost?: InputMaybe; + Task?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + User?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type ContentDocument_Filter = { + ArchivedById?: InputMaybe; + ArchivedDate?: InputMaybe; + ContentAssetId?: InputMaybe; + ContentModifiedDate?: InputMaybe; + ContentSize?: InputMaybe; + ContentSizeLong?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + FileExtension?: InputMaybe; + FileType?: InputMaybe; + Id?: InputMaybe; + IsArchived?: InputMaybe; + IsDeleted?: InputMaybe; + IsInternalOnly?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LatestPublishedVersion?: InputMaybe; + LatestPublishedVersionId?: InputMaybe; + MalwareScanDate?: InputMaybe; + MalwareScanStatus?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + ParentId?: InputMaybe; + PublishStatus?: InputMaybe; + SharingOption?: InputMaybe; + SharingPrivacy?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentFolderItem_Filter = { + ContentSize?: InputMaybe; + ContentSizeLong?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FileExtension?: InputMaybe; + FileType?: InputMaybe; + Id?: InputMaybe; + IsAssetEnabled?: InputMaybe; + IsDeleted?: InputMaybe; + IsFolder?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + ParentContentFolderId?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentFolderLink_Filter = { + ContentFolderId?: InputMaybe; + EnableFolderStatus?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + ParentEntityId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentTaxonomyRelatedTerm_Filter = { + ContentTaxonomy?: InputMaybe; + ContentTaxonomyId?: InputMaybe; + ContentTaxonomyTerm?: InputMaybe; + ContentTaxonomyTermId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentTaxonomyTermRelatedTerm_Filter = { + ContentTaxonomy?: InputMaybe; + ContentTaxonomyId?: InputMaybe; + ContentTaxonomyTerm?: InputMaybe; + ContentTaxonomyTermId?: InputMaybe; + ContentTaxonomyTrmRelaType?: InputMaybe; + ContentTaxonomyTrmRelaTypeId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + RelatedContentTaxonomyTerm?: InputMaybe; + RelatedContentTaxonomyTermId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentTaxonomyTermRelationshipType_Filter = { + ContentTaxonomyTrmRelaCatg?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentTaxonomyTerm_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + ExternalId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentTaxonomy_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentVersionHistory_Filter = { + ContentVersion?: InputMaybe; + ContentVersionId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentVersion_Filter = { + Checksum?: InputMaybe; + ContentBodyId?: InputMaybe; + ContentDocument?: InputMaybe; + ContentDocumentId?: InputMaybe; + ContentLocation?: InputMaybe; + ContentModifiedBy?: InputMaybe; + ContentModifiedById?: InputMaybe; + ContentModifiedDate?: InputMaybe; + ContentSize?: InputMaybe; + ContentSizeLong?: InputMaybe; + ContentUrl?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + ExternalDataSourceId?: InputMaybe; + ExternalDocumentInfo1?: InputMaybe; + ExternalDocumentInfo2?: InputMaybe; + FeaturedContentBoost?: InputMaybe; + FeaturedContentDate?: InputMaybe; + FileExtension?: InputMaybe; + FileType?: InputMaybe; + FirstPublishLocation?: InputMaybe; + FirstPublishLocationId?: InputMaybe; + Id?: InputMaybe; + IsAssetEnabled?: InputMaybe; + IsDeleted?: InputMaybe; + IsLatest?: InputMaybe; + IsMajorVersion?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MalwareScanDate?: InputMaybe; + MalwareScanStatus?: InputMaybe; + NegativeRatingCount?: InputMaybe; + NetworkId?: InputMaybe; + Origin?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + PathOnClient?: InputMaybe; + PositiveRatingCount?: InputMaybe; + PublishStatus?: InputMaybe; + RatingCount?: InputMaybe; + ReasonForChange?: InputMaybe; + SharingOption?: InputMaybe; + SharingPrivacy?: InputMaybe; + SystemModstamp?: InputMaybe; + TagCsv?: InputMaybe; + TextPreview?: InputMaybe; + Title?: InputMaybe; + VersionDataUrl?: InputMaybe; + VersionNumber?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContentVersion_FirstPublishLocation_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AuthorizationFormText?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContentWorkspace?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + EmailMessage?: InputMaybe; + EmailTemplate?: InputMaybe; + EngagementChannelType?: InputMaybe; + EnhancedLetterhead?: InputMaybe; + Event?: InputMaybe; + Image?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + ListEmail?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Network?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + Organization?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Report?: InputMaybe; + SocialPost?: InputMaybe; + Task?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + User?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type ContentWorkspace_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultRecordTypeId?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + Id?: InputMaybe; + IsRestrictContentTypes?: InputMaybe; + IsRestrictLinkedContentTypes?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastWorkspaceActivityDate?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + RootContentFolderId?: InputMaybe; + ShouldAddCreatorMembership?: InputMaybe; + SystemModstamp?: InputMaybe; + TagModel?: InputMaybe; + WorkspaceImageId?: InputMaybe; + WorkspaceType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContractContactRole_Filter = { + Contact?: InputMaybe; + ContactId?: InputMaybe; + Contract?: InputMaybe; + ContractId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Role?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ContractHistory_Filter = { + Contract?: InputMaybe; + ContractId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Contract_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + ActivatedBy?: InputMaybe; + ActivatedById?: InputMaybe; + ActivatedDate?: InputMaybe; + BillingCity?: InputMaybe; + BillingCountry?: InputMaybe; + BillingGeocodeAccuracy?: InputMaybe; + BillingLatitude?: InputMaybe; + BillingLongitude?: InputMaybe; + BillingPostalCode?: InputMaybe; + BillingState?: InputMaybe; + BillingStreet?: InputMaybe; + CompanySigned?: InputMaybe; + CompanySignedDate?: InputMaybe; + CompanySignedId?: InputMaybe; + ContractNumber?: InputMaybe; + ContractTerm?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + CustomerSigned?: InputMaybe; + CustomerSignedDate?: InputMaybe; + CustomerSignedId?: InputMaybe; + CustomerSignedTitle?: InputMaybe; + Description?: InputMaybe; + EndDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastApprovedDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Owner?: InputMaybe; + OwnerExpirationNotice?: InputMaybe; + OwnerId?: InputMaybe; + ShippingCity?: InputMaybe; + ShippingCountry?: InputMaybe; + ShippingGeocodeAccuracy?: InputMaybe; + ShippingLatitude?: InputMaybe; + ShippingLongitude?: InputMaybe; + ShippingPostalCode?: InputMaybe; + ShippingState?: InputMaybe; + ShippingStreet?: InputMaybe; + SpecialTerms?: InputMaybe; + StartDate?: InputMaybe; + Status?: InputMaybe; + StatusCode?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CspTrustedSite_Filter = { + CanAccessCamera?: InputMaybe; + CanAccessMicrophone?: InputMaybe; + Context?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + EndpointUrl?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsApplicableToConnectSrc?: InputMaybe; + IsApplicableToFontSrc?: InputMaybe; + IsApplicableToFrameSrc?: InputMaybe; + IsApplicableToImgSrc?: InputMaybe; + IsApplicableToMediaSrc?: InputMaybe; + IsApplicableToStyleSrc?: InputMaybe; + IsDeleted?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + NamespacePrefix?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type CurrencyOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type CustomPermission_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + ExternalClientApplicationId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsLicensed?: InputMaybe; + IsProtected?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + NamespacePrefix?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Customer_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + CustomerStatusType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Party?: InputMaybe; + PartyId?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalLifeTimeValue?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Customer_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export const DataType = { + Address: "ADDRESS", + Anytype: "ANYTYPE", + Base64: "BASE64", + Boolean: "BOOLEAN", + Combobox: "COMBOBOX", + Complexvalue: "COMPLEXVALUE", + Currency: "CURRENCY", + Date: "DATE", + Datetime: "DATETIME", + Double: "DOUBLE", + Email: "EMAIL", + Encryptedstring: "ENCRYPTEDSTRING", + Int: "INT", + Json: "JSON", + Junctionidlist: "JUNCTIONIDLIST", + Location: "LOCATION", + Long: "LONG", + Multipicklist: "MULTIPICKLIST", + Percent: "PERCENT", + Phone: "PHONE", + Picklist: "PICKLIST", + Reference: "REFERENCE", + String: "STRING", + Textarea: "TEXTAREA", + Time: "TIME", + Url: "URL", +} as const; +export type DataType = (typeof DataType)[keyof typeof DataType]; + +export type DataUseLegalBasisHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DataUseLegalBasis?: InputMaybe; + DataUseLegalBasisId?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DataUseLegalBasis_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Source?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DataUseLegalBasis_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type DataUsePurposeHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DataUsePurpose_Filter = { + CanDataSubjectOptOut?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LegalBasis?: InputMaybe; + LegalBasisId?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DataUsePurpose_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type DateFunctionInput = { + convertTimezoneValue?: InputMaybe; + value?: InputMaybe; +}; + +export type DateInput = { + literal?: InputMaybe; + range?: InputMaybe; + value?: InputMaybe; +}; + +export const DateLiteral = { + Last_90Days: "LAST_90_DAYS", + LastFiscalQuarter: "LAST_FISCAL_QUARTER", + LastFiscalYear: "LAST_FISCAL_YEAR", + LastMonth: "LAST_MONTH", + LastQuarter: "LAST_QUARTER", + LastWeek: "LAST_WEEK", + LastYear: "LAST_YEAR", + Next_90Days: "NEXT_90_DAYS", + NextFiscalQuarter: "NEXT_FISCAL_QUARTER", + NextFiscalYear: "NEXT_FISCAL_YEAR", + NextMonth: "NEXT_MONTH", + NextQuarter: "NEXT_QUARTER", + NextWeek: "NEXT_WEEK", + NextYear: "NEXT_YEAR", + ThisFiscalQuarter: "THIS_FISCAL_QUARTER", + ThisFiscalYear: "THIS_FISCAL_YEAR", + ThisMonth: "THIS_MONTH", + ThisQuarter: "THIS_QUARTER", + ThisWeek: "THIS_WEEK", + ThisYear: "THIS_YEAR", + Today: "TODAY", + Tomorrow: "TOMORROW", + Yesterday: "YESTERDAY", +} as const; +export type DateLiteral = (typeof DateLiteral)[keyof typeof DateLiteral]; + +export type DateOperators = { + CALENDAR_MONTH?: InputMaybe; + CALENDAR_QUARTER?: InputMaybe; + CALENDAR_YEAR?: InputMaybe; + DAY_IN_MONTH?: InputMaybe; + DAY_IN_WEEK?: InputMaybe; + DAY_IN_YEAR?: InputMaybe; + FISCAL_MONTH?: InputMaybe; + FISCAL_QUARTER?: InputMaybe; + FISCAL_YEAR?: InputMaybe; + WEEK_IN_MONTH?: InputMaybe; + WEEK_IN_YEAR?: InputMaybe; + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type DatePrimitiveOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type DateRange = { + last_n_days?: InputMaybe; + last_n_fiscal_quarters?: InputMaybe; + last_n_fiscal_years?: InputMaybe; + last_n_months?: InputMaybe; + last_n_quarters?: InputMaybe; + last_n_weeks?: InputMaybe; + last_n_years?: InputMaybe; + n_days_ago?: InputMaybe; + n_fiscal_quarters_ago?: InputMaybe; + n_fiscal_years_ago?: InputMaybe; + n_months_ago?: InputMaybe; + n_quarters_ago?: InputMaybe; + n_weeks_ago?: InputMaybe; + n_years_ago?: InputMaybe; + next_n_days?: InputMaybe; + next_n_fiscal_quarters?: InputMaybe; + next_n_fiscal_years?: InputMaybe; + next_n_months?: InputMaybe; + next_n_quarters?: InputMaybe; + next_n_weeks?: InputMaybe; + next_n_years?: InputMaybe; +}; + +export type DateTimeFunctionInput = { + convertTimezoneValue?: InputMaybe; + value?: InputMaybe; +}; + +export type DateTimeInput = { + literal?: InputMaybe; + range?: InputMaybe; + value?: InputMaybe; +}; + +export type DateTimeOperators = { + CALENDAR_MONTH?: InputMaybe; + CALENDAR_QUARTER?: InputMaybe; + CALENDAR_YEAR?: InputMaybe; + DAY_IN_MONTH?: InputMaybe; + DAY_IN_WEEK?: InputMaybe; + DAY_IN_YEAR?: InputMaybe; + DAY_ONLY?: InputMaybe; + FISCAL_MONTH?: InputMaybe; + FISCAL_QUARTER?: InputMaybe; + FISCAL_YEAR?: InputMaybe; + HOUR_IN_DAY?: InputMaybe; + WEEK_IN_MONTH?: InputMaybe; + WEEK_IN_YEAR?: InputMaybe; + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type DelegatedAccountHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DelegatedAccount?: InputMaybe; + DelegatedAccountId?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DelegatedAccount_Filter = { + AccessManageUsers?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + ManagedBy?: InputMaybe; + ManagedById?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + SystemModstamp?: InputMaybe; + Target?: InputMaybe; + TargetId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DelegatedAccount_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type DeleteEvent_Filter = { + DeletedBy?: InputMaybe; + DeletedById?: InputMaybe; + DeletedDate?: InputMaybe; + Id?: InputMaybe; + Record?: InputMaybe; + RecordName?: InputMaybe; + SobjectName?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DevopsEnvironmentHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsEnvironmentId?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DevopsEnvironment_Filter = { + CanTrackChanges?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DoceHubType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsDevEnvironment?: InputMaybe; + IsExpired?: InputMaybe; + IsTestEnvironment?: InputMaybe; + IsVibeEnvironment?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastRevisionCounter?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + NamedCredential?: InputMaybe; + OrgIdentifier?: InputMaybe; + OrgType?: InputMaybe; + OrgUrl?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + RefreshDate?: InputMaybe; + RefreshSource?: InputMaybe; + RefreshSourceId?: InputMaybe; + Replaces?: InputMaybe; + ReplacesId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DevopsEnvironment_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type DevopsRequestInfoHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + DevopsRequestInfoId?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DevopsRequestInfo_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ErrorDetails?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Message?: InputMaybe; + Name?: InputMaybe; + OperationType?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + ParentRequestInfo?: InputMaybe; + ParentRequestInfoId?: InputMaybe; + RequestCompletionDate?: InputMaybe; + RequestToken?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DevopsRequestInfo_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type DistanceInput = { + latitude: Scalars["Latitude"]["input"]; + longitude: Scalars["Longitude"]["input"]; +}; + +export type DoubleOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type DuplicateRecordItem_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DuplicateRecordSet?: InputMaybe; + DuplicateRecordSetId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Record?: InputMaybe; + RecordId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type DuplicateRecordItem_Record_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + Case?: InputMaybe; + Contact?: InputMaybe; + Individual?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Payment__c?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; +}; + +export type DuplicateRecordSet_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DuplicateRuleId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + RecordCount?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EmailMessageRelation_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + EmailMessage?: InputMaybe; + EmailMessageId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Relation?: InputMaybe; + RelationAddress?: InputMaybe; + RelationId?: InputMaybe; + RelationObjectType?: InputMaybe; + RelationType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EmailMessageRelation_Relation_Filters = { + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type EmailMessage_Filter = { + ActivityId?: InputMaybe; + AttachmentIds?: InputMaybe; + AutomationType?: InputMaybe; + BccAddress?: InputMaybe; + CcAddress?: InputMaybe; + ClientThreadIdentifier?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + EmailTemplate?: InputMaybe; + EmailTemplateId?: InputMaybe; + FirstOpenedDate?: InputMaybe; + FromAddress?: InputMaybe; + FromId?: InputMaybe; + FromName?: InputMaybe; + HasAttachment?: InputMaybe; + Headers?: InputMaybe; + HtmlBody?: InputMaybe; + Id?: InputMaybe; + Incoming?: InputMaybe; + IsBounced?: InputMaybe; + IsClientManaged?: InputMaybe; + IsDeleted?: InputMaybe; + IsExternallyVisible?: InputMaybe; + IsOpened?: InputMaybe; + IsTracked?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastOpenedDate?: InputMaybe; + MessageDate?: InputMaybe; + MessageIdentifier?: InputMaybe; + Name?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + RelatedTo?: InputMaybe; + RelatedToId?: InputMaybe; + ReplyToEmailMessage?: InputMaybe; + ReplyToEmailMessageId?: InputMaybe; + Source?: InputMaybe; + Status?: InputMaybe; + Subject?: InputMaybe; + SystemModstamp?: InputMaybe; + TextBody?: InputMaybe; + ThreadIdentifier?: InputMaybe; + ToAddress?: InputMaybe; + ValidatedFromAddress?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EmailMessage_RelatedTo_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + ContactRequest?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + Image?: InputMaybe; + Lease__c?: InputMaybe; + ListEmail?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type EmailOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type EmailTemplate_Filter = { + ApiVersion?: InputMaybe; + Body?: InputMaybe; + BrandTemplateId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + Encoding?: InputMaybe; + EnhancedLetterhead?: InputMaybe; + EnhancedLetterheadId?: InputMaybe; + Folder?: InputMaybe; + FolderId?: InputMaybe; + FolderName?: InputMaybe; + HtmlValue?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsBuilderContent?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastUsedDate?: InputMaybe; + Markup?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + PageId?: InputMaybe; + RelatedEntityType?: InputMaybe; + Subject?: InputMaybe; + SystemModstamp?: InputMaybe; + TemplateStyle?: InputMaybe; + TemplateType?: InputMaybe; + TimesUsed?: InputMaybe; + UiType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EmailTemplate_Folder_Filters = { + Name?: InputMaybe; + Organization?: InputMaybe; + User?: InputMaybe; +}; + +export type EngagementChannelTypeHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + EngagementChannelType?: InputMaybe; + EngagementChannelTypeId?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EngagementChannelType_Filter = { + ContactPointType?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EngagementChannelType_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type EnhancedLetterhead_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LetterheadFooter?: InputMaybe; + LetterheadHeader?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type EntityDefinition_Filter = { + DefaultCompactLayoutId?: InputMaybe; + DefaultImplementation?: InputMaybe; + DetailUrl?: InputMaybe; + DeveloperName?: InputMaybe; + DurableId?: InputMaybe; + EditDefinitionUrl?: InputMaybe; + EditUrl?: InputMaybe; + ExtendedBy?: InputMaybe; + ExtendsInterfaces?: InputMaybe; + ExternalSharingModel?: InputMaybe; + HasSubtypes?: InputMaybe; + HelpSettingPageName?: InputMaybe; + HelpSettingPageUrl?: InputMaybe; + Id?: InputMaybe; + ImplementedBy?: InputMaybe; + ImplementsInterfaces?: InputMaybe; + InternalSharingModel?: InputMaybe; + IsApexTriggerable?: InputMaybe; + IsAutoActivityCaptureEnabled?: InputMaybe; + IsCompactLayoutable?: InputMaybe; + IsCustomSetting?: InputMaybe; + IsCustomizable?: InputMaybe; + IsDeprecatedAndHidden?: InputMaybe; + IsEverCreatable?: InputMaybe; + IsEverDeletable?: InputMaybe; + IsEverUpdatable?: InputMaybe; + IsFeedEnabled?: InputMaybe; + IsIdEnabled?: InputMaybe; + IsInterface?: InputMaybe; + IsLayoutable?: InputMaybe; + IsMruEnabled?: InputMaybe; + IsProcessEnabled?: InputMaybe; + IsQueryable?: InputMaybe; + IsReplicateable?: InputMaybe; + IsRetrieveable?: InputMaybe; + IsSearchLayoutable?: InputMaybe; + IsSearchable?: InputMaybe; + IsSubtype?: InputMaybe; + IsTriggerable?: InputMaybe; + IsWorkflowEnabled?: InputMaybe; + KeyPrefix?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + NamespacePrefix?: InputMaybe; + NewUrl?: InputMaybe; + PluralLabel?: InputMaybe; + PublisherId?: InputMaybe; + QualifiedApiName?: InputMaybe; + RunningUserEntityAccessId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Event_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + ActivityDate?: InputMaybe; + ActivityDateTime?: InputMaybe; + ActivityRecurrence2ExceptionId?: InputMaybe; + ActivityRecurrence2Id?: InputMaybe; + Attendees?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DurationInMinutes?: InputMaybe; + EndDate?: InputMaybe; + EndDateTime?: InputMaybe; + EventSubtype?: InputMaybe; + GroupEventType?: InputMaybe; + Id?: InputMaybe; + IsAllDayEvent?: InputMaybe; + IsArchived?: InputMaybe; + IsChild?: InputMaybe; + IsDeleted?: InputMaybe; + IsGroupEvent?: InputMaybe; + IsPrivate?: InputMaybe; + IsRecurrence?: InputMaybe; + IsRecurrence2?: InputMaybe; + IsRecurrence2Exception?: InputMaybe; + IsRecurrence2Exclusion?: InputMaybe; + IsReminderSet?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Location?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Recurrence2PatternStartDate?: InputMaybe; + Recurrence2PatternText?: InputMaybe; + Recurrence2PatternTimeZone?: InputMaybe; + Recurrence2PatternVersion?: InputMaybe; + RecurrenceActivityId?: InputMaybe; + RecurrenceDayOfMonth?: InputMaybe; + RecurrenceDayOfWeekMask?: InputMaybe; + RecurrenceEndDateOnly?: InputMaybe; + RecurrenceInstance?: InputMaybe; + RecurrenceInterval?: InputMaybe; + RecurrenceMonthOfYear?: InputMaybe; + RecurrenceStartDateTime?: InputMaybe; + RecurrenceTimeZoneSidKey?: InputMaybe; + RecurrenceType?: InputMaybe; + ReminderDateTime?: InputMaybe; + ShowAs?: InputMaybe; + StartDateTime?: InputMaybe; + Subject?: InputMaybe; + SystemModstamp?: InputMaybe; + What?: InputMaybe; + WhatId?: InputMaybe; + Who?: InputMaybe; + WhoId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Event_Owner_Filters = { + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Event_What_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + ContactRequest?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + Image?: InputMaybe; + Lease__c?: InputMaybe; + ListEmail?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type Event_Who_Filters = { + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; +}; + +export type ExpressionSetView_Filter = { + Description?: InputMaybe; + DurableId?: InputMaybe; + ExpressionSetDetails?: InputMaybe; + HasContextDefinitionRef?: InputMaybe; + Id?: InputMaybe; + IsExecutable?: InputMaybe; + IsTemplate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + UsageType?: InputMaybe; + UsageTypeLabel?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FeedItem_Filter = { + BestCommentId?: InputMaybe; + Body?: InputMaybe; + CommentCount?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + HasContent?: InputMaybe; + HasFeedEntity?: InputMaybe; + HasLink?: InputMaybe; + HasVerifiedComment?: InputMaybe; + Id?: InputMaybe; + InsertedBy?: InputMaybe; + InsertedById?: InputMaybe; + IsClosed?: InputMaybe; + IsDeleted?: InputMaybe; + IsRichText?: InputMaybe; + LastEditById?: InputMaybe; + LastEditDate?: InputMaybe; + LastModifiedDate?: InputMaybe; + LikeCount?: InputMaybe; + LinkUrl?: InputMaybe; + NetworkScope?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + RelatedRecordId?: InputMaybe; + Revision?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + Type?: InputMaybe; + Visibility?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FeedItem_Parent_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AuthorizationFormText?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContentDocument?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + EngagementChannelType?: InputMaybe; + EnhancedLetterhead?: InputMaybe; + Event?: InputMaybe; + Image?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Report?: InputMaybe; + SocialPost?: InputMaybe; + Task?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + User?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export const FieldExtraTypeInfo = { + ExternalLookup: "EXTERNAL_LOOKUP", + ImageUrl: "IMAGE_URL", + IndirectLookup: "INDIRECT_LOOKUP", + Personname: "PERSONNAME", + Plaintextarea: "PLAINTEXTAREA", + Richtextarea: "RICHTEXTAREA", + SwitchablePersonname: "SWITCHABLE_PERSONNAME", +} as const; +export type FieldExtraTypeInfo = (typeof FieldExtraTypeInfo)[keyof typeof FieldExtraTypeInfo]; + +export type FieldPermissions_Filter = { + Field?: InputMaybe; + Id?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + PermissionsEdit?: InputMaybe; + PermissionsRead?: InputMaybe; + SobjectType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowInterview_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + CurrentDefinitionDeveloperName?: InputMaybe; + CurrentDefinitionVersionLabel?: InputMaybe; + CurrentElement?: InputMaybe; + CurrentVersionNumber?: InputMaybe; + CurrentVersionProcessType?: InputMaybe; + DefinitionDeveloperName?: InputMaybe; + EngineType?: InputMaybe; + Error?: InputMaybe; + FlowVersionViewId?: InputMaybe; + Guid?: InputMaybe; + Id?: InputMaybe; + InterviewLabel?: InputMaybe; + InterviewStatus?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterDefinitionVersionLabel?: InputMaybe; + MasterVersionNumber?: InputMaybe; + MasterVersionProcessType?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + PauseLabel?: InputMaybe; + SystemModstamp?: InputMaybe; + WasPausedFromScreen?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowInterview_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type FlowOrchestrationInstance_Filter = { + AuxiliaryTriggeringRecord?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + CurrentStage?: InputMaybe; + Duration?: InputMaybe; + FlowDefinitionVersionId?: InputMaybe; + FlowDefinitionVersionName?: InputMaybe; + FlowOrchestration?: InputMaybe; + FlowOrchestrationId?: InputMaybe; + FlowType?: InputMaybe; + Id?: InputMaybe; + Interview?: InputMaybe; + InterviewId?: InputMaybe; + IsDebugRun?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + OrchestrationDeveloperName?: InputMaybe; + OrchestrationLabel?: InputMaybe; + OrchestrationName?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + TriggeringRecord?: InputMaybe; + TriggeringRecordType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowOrchestrationInstance_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type FlowOrchestrationLog_Filter = { + Actor?: InputMaybe; + Assignee?: InputMaybe; + AssigneeType?: InputMaybe; + Comments?: InputMaybe; + Context?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Duration?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Kind?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + OrchestrationInstance?: InputMaybe; + OrchestrationInstanceId?: InputMaybe; + OrchestrationName?: InputMaybe; + OrchestrationVersion?: InputMaybe; + StageName?: InputMaybe; + StepName?: InputMaybe; + SystemModstamp?: InputMaybe; + Timestamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowOrchestrationStageInstance_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + OrchestrationInstance?: InputMaybe; + OrchestrationInstanceId?: InputMaybe; + OrchestrationName?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Position?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowOrchestrationStageInstance_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type FlowOrchestrationStepInstance_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + InProgressStepOutputs?: InputMaybe; + IsDeleted?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + OrchestrationInstance?: InputMaybe; + OrchestrationInstanceId?: InputMaybe; + OrchestrationName?: InputMaybe; + OrchestrationStageName?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + RelatedRecord?: InputMaybe; + StageInstance?: InputMaybe; + StageInstanceId?: InputMaybe; + Status?: InputMaybe; + StepType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowOrchestrationStepInstance_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type FlowOrchestrationVersion_Filter = { + ActivatedBy?: InputMaybe; + ActivatedById?: InputMaybe; + ActivatedDate?: InputMaybe; + ApiVersion?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + FlowOrchestration?: InputMaybe; + FlowOrchestrationId?: InputMaybe; + Id?: InputMaybe; + InteractionDefVersionId?: InputMaybe; + IsDeleted?: InputMaybe; + IsOverridable?: InputMaybe; + IsTemplate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + OrchestrationType?: InputMaybe; + OverriddenBy?: InputMaybe; + OverriddenById?: InputMaybe; + OverriddenOrchestration?: InputMaybe; + OverriddenOrchestrationId?: InputMaybe; + RunInMode?: InputMaybe; + SourceTemplate?: InputMaybe; + SourceTemplateId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + TriggerObjectOrEventLabel?: InputMaybe; + VersionNumber?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowOrchestrationWorkItem_Assignee_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type FlowOrchestrationWorkItem_Filter = { + Assignee?: InputMaybe; + AssigneeId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + ElapsedTimeSinceAsgntInSec?: InputMaybe; + ElapsedTimeSinceCreationInSec?: InputMaybe; + FlowType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + OrchestrationName?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + ParentWorkItem?: InputMaybe; + ParentWorkItemId?: InputMaybe; + RelatedRecord?: InputMaybe; + RelatedRecordId?: InputMaybe; + ScreenFlow?: InputMaybe; + ScreenFlowInputs?: InputMaybe; + Status?: InputMaybe; + StepInstance?: InputMaybe; + StepInstanceId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowOrchestrationWorkItem_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type FlowOrchestrationWorkItem_RelatedRecord_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + AnalyticsUserAttrFuncTkn?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AssociatedLocation?: InputMaybe; + AuthorizationForm?: InputMaybe; + AuthorizationFormConsent?: InputMaybe; + AuthorizationFormDataUse?: InputMaybe; + AuthorizationFormText?: InputMaybe; + BusinessBrand?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CaseComment?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContactPointAddress?: InputMaybe; + ContactPointConsent?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointPhone?: InputMaybe; + ContactPointTypeConsent?: InputMaybe; + ContactRequest?: InputMaybe; + ContentDocument?: InputMaybe; + ContentVersion?: InputMaybe; + Contract?: InputMaybe; + Customer?: InputMaybe; + DataUseLegalBasis?: InputMaybe; + DataUsePurpose?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + DuplicateRecordItem?: InputMaybe; + DuplicateRecordSet?: InputMaybe; + EmailMessage?: InputMaybe; + EngagementChannelType?: InputMaybe; + FlowOrchestrationInstance?: InputMaybe; + FlowOrchestrationVersion?: InputMaybe; + Image?: InputMaybe; + Individual?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + LocationTrustMeasure?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + ManagedContentVariant?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityRelatedDeleteLog?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + OrgMetricScanSummary?: InputMaybe; + Organization?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + QuickText?: InputMaybe; + ReportHierarchyObjectField?: InputMaybe; + SecurityHealthCheckAlertRecipient?: InputMaybe; + SecurityHealthCheckResult?: InputMaybe; + Seller?: InputMaybe; + SocialPersona?: InputMaybe; + SocialPost?: InputMaybe; + StreamingChannel?: InputMaybe; + TableauHostMapping?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + UnstructuredStorageSpace?: InputMaybe; + User?: InputMaybe; + UserLocalWebServerIdentity?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type FlowOrchestration_Filter = { + ActiveVersion?: InputMaybe; + ActiveVersionId?: InputMaybe; + ApiName?: InputMaybe; + ApiVersion?: InputMaybe; + AverageRunTime?: InputMaybe; + CompletionRate?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + FailedRunCount?: InputMaybe; + Id?: InputMaybe; + InstalledPackageName?: InputMaybe; + IsCitizenEnabled?: InputMaybe; + IsDeleted?: InputMaybe; + IsOverridable?: InputMaybe; + IsTemplate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + ManageableState?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + OrchestrationDefinition?: InputMaybe; + OrchestrationLabel?: InputMaybe; + OrchestrationType?: InputMaybe; + OverriddenBy?: InputMaybe; + OverriddenById?: InputMaybe; + OverriddenOrchestration?: InputMaybe; + OverriddenOrchestrationId?: InputMaybe; + RunCount?: InputMaybe; + SourceTemplate?: InputMaybe; + SourceTemplateId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + TriggerType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecordElementOccurrence_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FlowRecord?: InputMaybe; + FlowRecordElement?: InputMaybe; + FlowRecordElementId?: InputMaybe; + FlowRecordId?: InputMaybe; + FlowRecordVersion?: InputMaybe; + FlowRecordVersionId?: InputMaybe; + FlowRecordVersionOccurrence?: InputMaybe; + FlowRecordVersionOccurrenceId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecordElement_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ElementName?: InputMaybe; + FlowRecordVersion?: InputMaybe; + FlowRecordVersionId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecordHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + FlowRecord?: InputMaybe; + FlowRecordId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecordVersionOccurrence_Filter = { + CompletedDate?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Enqueued?: InputMaybe; + Entries?: InputMaybe; + ErrorDetail?: InputMaybe; + Errors?: InputMaybe; + Exits?: InputMaybe; + FlowRecord?: InputMaybe; + FlowRecordId?: InputMaybe; + FlowRecordVersion?: InputMaybe; + FlowRecordVersionId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + ProgressStatus?: InputMaybe; + ScheduledDate?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecordVersion_Filter = { + AccessType?: InputMaybe; + ActivatedBy?: InputMaybe; + ActivatedById?: InputMaybe; + ActivatedDate?: InputMaybe; + ApiVersion?: InputMaybe; + AreMetricsLoggedToDataCloud?: InputMaybe; + Builder?: InputMaybe; + CapacityCategory?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + FlowRecord?: InputMaybe; + FlowRecordId?: InputMaybe; + FlowType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsOverridable?: InputMaybe; + IsPaused?: InputMaybe; + IsTemplate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + OverriddenBy?: InputMaybe; + OverriddenById?: InputMaybe; + OverriddenFlow?: InputMaybe; + OverriddenFlowId?: InputMaybe; + PausedDate?: InputMaybe; + PausingUser?: InputMaybe; + PausingUserId?: InputMaybe; + ProgressStatus?: InputMaybe; + ReasonPaused?: InputMaybe; + ResumedDate?: InputMaybe; + ResumingUser?: InputMaybe; + ResumingUserId?: InputMaybe; + RunInMode?: InputMaybe; + ScheduledStartDate?: InputMaybe; + SourceTemplate?: InputMaybe; + SourceTemplateId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + TriggerObjectOrEventLabel?: InputMaybe; + VersionNumber?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecord_AssociatedRecord_Filters = { + Campaign?: InputMaybe; + FlowRecord?: InputMaybe; + Name?: InputMaybe; +}; + +export type FlowRecord_Filter = { + ActiveVersion?: InputMaybe; + ActiveVersionId?: InputMaybe; + ApiName?: InputMaybe; + ApiVersion?: InputMaybe; + AreMetricsLoggedToDataCloud?: InputMaybe; + AssociatedRecord?: InputMaybe; + AssociatedRecordId?: InputMaybe; + Builder?: InputMaybe; + CapacityCategory?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + ElementEntries?: InputMaybe; + ElementErrors?: InputMaybe; + ErrorCode?: InputMaybe; + ErrorDetails?: InputMaybe; + FlowCategory?: InputMaybe; + FlowDefinition?: InputMaybe; + FlowLabel?: InputMaybe; + FlowSubcategory?: InputMaybe; + FlowType?: InputMaybe; + Health?: InputMaybe; + Id?: InputMaybe; + InstalledPackageName?: InputMaybe; + IsCitizenEnabled?: InputMaybe; + IsDeleted?: InputMaybe; + IsOverridable?: InputMaybe; + IsPaused?: InputMaybe; + IsTemplate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + List?: InputMaybe; + ListId?: InputMaybe; + LogsEnabledFlowVersion?: InputMaybe; + ManageableState?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + OverriddenBy?: InputMaybe; + OverriddenById?: InputMaybe; + OverriddenFlow?: InputMaybe; + OverriddenFlowId?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + ProgressStatus?: InputMaybe; + ScheduledStartDate?: InputMaybe; + SourceTemplate?: InputMaybe; + SourceTemplateId?: InputMaybe; + StartSource?: InputMaybe; + SystemModstamp?: InputMaybe; + TriggerObjectOrEventLabel?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type FlowRecord_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ForecastingCustomData_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ForecastOwner?: InputMaybe; + ForecastOwnerId?: InputMaybe; + ForecastingGroupItemId?: InputMaybe; + ForecastingType?: InputMaybe; + ForecastingTypeId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Period?: InputMaybe; + PeriodId?: InputMaybe; + ProductFamily?: InputMaybe; + StartDate?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ForecastingFact_Filter = { + ForecastCategoryName?: InputMaybe; + ForecastedObjectId?: InputMaybe; + ForecastingItemId?: InputMaybe; + ForecastingType?: InputMaybe; + ForecastingTypeId?: InputMaybe; + Id?: InputMaybe; + OpportunityId?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + PeriodId?: InputMaybe; + SystemModstamp?: InputMaybe; + TargetValue?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ForecastingOwnerAdjustment_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ForecastCategoryName?: InputMaybe; + ForecastOwner?: InputMaybe; + ForecastOwnerId?: InputMaybe; + ForecastingGroupItemId?: InputMaybe; + ForecastingItemCategory?: InputMaybe; + ForecastingItemId?: InputMaybe; + ForecastingType?: InputMaybe; + ForecastingTypeId?: InputMaybe; + Id?: InputMaybe; + IsAmount?: InputMaybe; + IsDeleted?: InputMaybe; + IsQuantity?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + OwnerAdjustedAmount?: InputMaybe; + OwnerAdjustedQuantity?: InputMaybe; + OwnerAdjustmentNote?: InputMaybe; + Period?: InputMaybe; + PeriodId?: InputMaybe; + ProductFamily?: InputMaybe; + StartDate?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ForecastingQuota_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ForecastingGroupItemId?: InputMaybe; + ForecastingTypeId?: InputMaybe; + Id?: InputMaybe; + IsAmount?: InputMaybe; + IsQuantity?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + PeriodId?: InputMaybe; + ProductFamily?: InputMaybe; + QuotaAmount?: InputMaybe; + QuotaOwner?: InputMaybe; + QuotaOwnerId?: InputMaybe; + QuotaQuantity?: InputMaybe; + StartDate?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ForecastingType_Filter = { + CanDisplayQuotas?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DateType?: InputMaybe; + DeveloperName?: InputMaybe; + ForecastingGroupId?: InputMaybe; + HasAdjustments?: InputMaybe; + HasOwnerAdjustments?: InputMaybe; + HasProductFamily?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsAdvCurrencyMgmt?: InputMaybe; + IsAmount?: InputMaybe; + IsCdp?: InputMaybe; + IsDeleted?: InputMaybe; + IsPlatformType?: InputMaybe; + IsQuantity?: InputMaybe; + Language?: InputMaybe; + LastActivatedDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + RoleType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type GeolocationInput = { + latitude: Scalars["Latitude"]["input"]; + longitude: Scalars["Longitude"]["input"]; + radius: Scalars["Float"]["input"]; + unit: Unit; +}; + +export type GeolocationOperators = { + gt?: InputMaybe; + lt?: InputMaybe; +}; + +export type GroupMember_Filter = { + Group?: InputMaybe; + GroupId?: InputMaybe; + Id?: InputMaybe; + SystemModstamp?: InputMaybe; + UserOrGroup?: InputMaybe; + UserOrGroupId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type GroupMember_UserOrGroup_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Group_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + DoesIncludeBosses?: InputMaybe; + DoesSendEmailToMembers?: InputMaybe; + Email?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Related?: InputMaybe; + RelatedId?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Group_OrderBy = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + DoesIncludeBosses?: InputMaybe; + DoesSendEmailToMembers?: InputMaybe; + Email?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Related?: InputMaybe; + RelatedId?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; +}; + +export type Group_Owner_Filters = { + Name?: InputMaybe; + Organization?: InputMaybe; + User?: InputMaybe; +}; + +export type Group_Owner_OrderBys = { + Name?: InputMaybe; + Organization?: InputMaybe; + User?: InputMaybe; +}; + +export type Group_Related_Filters = { + Name?: InputMaybe; + User?: InputMaybe; + UserRole?: InputMaybe; +}; + +export type Group_Related_OrderBys = { + Name?: InputMaybe; + User?: InputMaybe; + UserRole?: InputMaybe; +}; + +export type Holiday_Filter = { + ActivityDate?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + EndTimeInMinutes?: InputMaybe; + Id?: InputMaybe; + IsAllDay?: InputMaybe; + IsRecurrence?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + RecurrenceDayOfMonth?: InputMaybe; + RecurrenceDayOfWeekMask?: InputMaybe; + RecurrenceEndDateOnly?: InputMaybe; + RecurrenceInstance?: InputMaybe; + RecurrenceInterval?: InputMaybe; + RecurrenceMonthOfYear?: InputMaybe; + RecurrenceStartDate?: InputMaybe; + RecurrenceType?: InputMaybe; + StartTimeInMinutes?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type IpAddressRange_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + EndAddress?: InputMaybe; + Id?: InputMaybe; + IpAddressFeature?: InputMaybe; + IpAddressUsageScope?: InputMaybe; + IsDeleted?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + StartAddress?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type IdOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + inq?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; + ninq?: InputMaybe; +}; + +export type ImageHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + Image?: InputMaybe; + ImageId?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Image_Filter = { + AlternateText?: InputMaybe; + CapturedAngle?: InputMaybe; + ContentDocument?: InputMaybe; + ContentDocumentId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + ImageClass?: InputMaybe; + ImageClassObjectType?: InputMaybe; + ImageViewType?: InputMaybe; + IsActive?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + Url?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Image_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type IndividualHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + Individual?: InputMaybe; + IndividualId?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Individual_Filter = { + BirthDate?: InputMaybe; + CanStorePiiElsewhere?: InputMaybe; + ChildrenCount?: InputMaybe; + ConsumerCreditScore?: InputMaybe; + ConsumerCreditScoreProviderName?: InputMaybe; + ConvictionsCount?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DeathDate?: InputMaybe; + FirstName?: InputMaybe; + HasOptedOutGeoTracking?: InputMaybe; + HasOptedOutProcessing?: InputMaybe; + HasOptedOutProfiling?: InputMaybe; + HasOptedOutSolicit?: InputMaybe; + HasOptedOutTracking?: InputMaybe; + Id?: InputMaybe; + IndividualsAge?: InputMaybe; + InfluencerRating?: InputMaybe; + IsDeleted?: InputMaybe; + IsHomeOwner?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastViewedDate?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + MilitaryService?: InputMaybe; + Name?: InputMaybe; + Occupation?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Salutation?: InputMaybe; + SendIndividualData?: InputMaybe; + ShouldForget?: InputMaybe; + SystemModstamp?: InputMaybe; + Website?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Individual_OrderBy = { + BirthDate?: InputMaybe; + CanStorePiiElsewhere?: InputMaybe; + ChildrenCount?: InputMaybe; + ConsumerCreditScore?: InputMaybe; + ConsumerCreditScoreProviderName?: InputMaybe; + ConvictionsCount?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DeathDate?: InputMaybe; + FirstName?: InputMaybe; + HasOptedOutGeoTracking?: InputMaybe; + HasOptedOutProcessing?: InputMaybe; + HasOptedOutProfiling?: InputMaybe; + HasOptedOutSolicit?: InputMaybe; + HasOptedOutTracking?: InputMaybe; + Id?: InputMaybe; + IndividualsAge?: InputMaybe; + InfluencerRating?: InputMaybe; + IsDeleted?: InputMaybe; + IsHomeOwner?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastViewedDate?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + MilitaryService?: InputMaybe; + Name?: InputMaybe; + Occupation?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Salutation?: InputMaybe; + SendIndividualData?: InputMaybe; + ShouldForget?: InputMaybe; + SystemModstamp?: InputMaybe; + Website?: InputMaybe; +}; + +export type IntegerOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type JoinInput = { + Account?: InputMaybe; + AccountHistory?: InputMaybe; + AccountPartner?: InputMaybe; + Agent__History?: InputMaybe; + Agent__c?: InputMaybe; + AnalyticsUserAttrFuncTkn?: InputMaybe; + ApiName?: InputMaybe; + AppAnalyticsQueryRequest?: InputMaybe; + AppMenuItem?: InputMaybe; + Application__History?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalSubmissionDetailHistory?: InputMaybe; + ApprovalSubmissionHistory?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + ApprovalWorkItemHistory?: InputMaybe; + Asset?: InputMaybe; + AssetHistory?: InputMaybe; + AssetRelationship?: InputMaybe; + AssetRelationshipHistory?: InputMaybe; + AssociatedLocation?: InputMaybe; + AssociatedLocationHistory?: InputMaybe; + Attachment?: InputMaybe; + AuthorizationForm?: InputMaybe; + AuthorizationFormConsent?: InputMaybe; + AuthorizationFormConsentHistory?: InputMaybe; + AuthorizationFormDataUse?: InputMaybe; + AuthorizationFormDataUseHistory?: InputMaybe; + AuthorizationFormHistory?: InputMaybe; + AuthorizationFormText?: InputMaybe; + AuthorizationFormTextHistory?: InputMaybe; + BackgroundOperation?: InputMaybe; + BusinessBrand?: InputMaybe; + BusinessHours?: InputMaybe; + Campaign?: InputMaybe; + CampaignHistory?: InputMaybe; + CampaignMember?: InputMaybe; + CampaignMemberStatus?: InputMaybe; + Case?: InputMaybe; + CaseComment?: InputMaybe; + CaseContactRole?: InputMaybe; + CaseHistory?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionChannelTypeHistory?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionConsentHistory?: InputMaybe; + CommSubscriptionHistory?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + CommSubscriptionTimingHistory?: InputMaybe; + Contact?: InputMaybe; + ContactHistory?: InputMaybe; + ContactPointAddress?: InputMaybe; + ContactPointAddressHistory?: InputMaybe; + ContactPointConsent?: InputMaybe; + ContactPointConsentHistory?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointEmailHistory?: InputMaybe; + ContactPointPhone?: InputMaybe; + ContactPointPhoneHistory?: InputMaybe; + ContactPointTypeConsent?: InputMaybe; + ContactPointTypeConsentHistory?: InputMaybe; + ContactRequest?: InputMaybe; + ContentDocument?: InputMaybe; + ContentDocumentHistory?: InputMaybe; + ContentDocumentLink?: InputMaybe; + ContentFolderItem?: InputMaybe; + ContentFolderLink?: InputMaybe; + ContentTaxonomy?: InputMaybe; + ContentTaxonomyRelatedTerm?: InputMaybe; + ContentTaxonomyTerm?: InputMaybe; + ContentTaxonomyTermRelatedTerm?: InputMaybe; + ContentTaxonomyTermRelationshipType?: InputMaybe; + ContentVersion?: InputMaybe; + ContentVersionHistory?: InputMaybe; + ContentWorkspace?: InputMaybe; + Contract?: InputMaybe; + ContractContactRole?: InputMaybe; + ContractHistory?: InputMaybe; + CspTrustedSite?: InputMaybe; + CustomPermission?: InputMaybe; + Customer?: InputMaybe; + DataUseLegalBasis?: InputMaybe; + DataUseLegalBasisHistory?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeHistory?: InputMaybe; + DelegatedAccount?: InputMaybe; + DelegatedAccountHistory?: InputMaybe; + DeleteEvent?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsEnvironmentHistory?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + DevopsRequestInfoHistory?: InputMaybe; + DuplicateRecordItem?: InputMaybe; + DuplicateRecordSet?: InputMaybe; + EmailMessage?: InputMaybe; + EmailMessageRelation?: InputMaybe; + EmailTemplate?: InputMaybe; + EngagementChannelType?: InputMaybe; + EngagementChannelTypeHistory?: InputMaybe; + EnhancedLetterhead?: InputMaybe; + EntityDefinition?: InputMaybe; + Event?: InputMaybe; + ExpressionSetView?: InputMaybe; + FeedItem?: InputMaybe; + FieldPermissions?: InputMaybe; + FlowInterview?: InputMaybe; + FlowOrchestration?: InputMaybe; + FlowOrchestrationInstance?: InputMaybe; + FlowOrchestrationLog?: InputMaybe; + FlowOrchestrationStageInstance?: InputMaybe; + FlowOrchestrationStepInstance?: InputMaybe; + FlowOrchestrationVersion?: InputMaybe; + FlowOrchestrationWorkItem?: InputMaybe; + FlowRecord?: InputMaybe; + FlowRecordElement?: InputMaybe; + FlowRecordElementOccurrence?: InputMaybe; + FlowRecordHistory?: InputMaybe; + FlowRecordVersion?: InputMaybe; + FlowRecordVersionOccurrence?: InputMaybe; + ForecastingCustomData?: InputMaybe; + ForecastingFact?: InputMaybe; + ForecastingOwnerAdjustment?: InputMaybe; + ForecastingQuota?: InputMaybe; + ForecastingType?: InputMaybe; + Group?: InputMaybe; + GroupMember?: InputMaybe; + Holiday?: InputMaybe; + IPAddressRange?: InputMaybe; + Image?: InputMaybe; + ImageHistory?: InputMaybe; + Individual?: InputMaybe; + IndividualHistory?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + LeadHistory?: InputMaybe; + Lease__History?: InputMaybe; + Lease__c?: InputMaybe; + ListEmail?: InputMaybe; + Location?: InputMaybe; + LocationHistory?: InputMaybe; + LocationTrustMeasure?: InputMaybe; + Maintenance_Request__History?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__History?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + ManagedContent?: InputMaybe; + ManagedContentPublishedUrl?: InputMaybe; + ManagedContentVariant?: InputMaybe; + Network?: InputMaybe; + NetworkDataCategory?: InputMaybe; + Note?: InputMaybe; + Notification__c?: InputMaybe; + ObjectMetadataTag?: InputMaybe; + ObjectPermissions?: InputMaybe; + ObjectRelatedUrl?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityContactRole?: InputMaybe; + OpportunityFieldHistory?: InputMaybe; + OpportunityHistory?: InputMaybe; + OpportunityLineItem?: InputMaybe; + OpportunityPartner?: InputMaybe; + OpportunityRelatedDeleteLog?: InputMaybe; + Order?: InputMaybe; + OrderHistory?: InputMaybe; + OrderItem?: InputMaybe; + OrderItemHistory?: InputMaybe; + OrgMetric?: InputMaybe; + OrgMetricScanSummary?: InputMaybe; + Organization?: InputMaybe; + Partner?: InputMaybe; + PartyConsent?: InputMaybe; + PartyConsentHistory?: InputMaybe; + Payment__History?: InputMaybe; + Payment__c?: InputMaybe; + Period?: InputMaybe; + PermissionSet?: InputMaybe; + PermissionSetGroup?: InputMaybe; + PermissionSetLicense?: InputMaybe; + Pricebook2?: InputMaybe; + Pricebook2History?: InputMaybe; + PricebookEntry?: InputMaybe; + PricebookEntryHistory?: InputMaybe; + ProcessDefinition?: InputMaybe; + ProcessException?: InputMaybe; + ProcessInstance?: InputMaybe; + Product2?: InputMaybe; + Product2History?: InputMaybe; + Profile?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillEndorsementHistory?: InputMaybe; + ProfileSkillHistory?: InputMaybe; + ProfileSkillUser?: InputMaybe; + ProfileSkillUserHistory?: InputMaybe; + Property_Cost__History?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__History?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__History?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__History?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__History?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__History?: InputMaybe; + Property__c?: InputMaybe; + QuickText?: InputMaybe; + QuickTextHistory?: InputMaybe; + Recommendation?: InputMaybe; + RecordAction?: InputMaybe; + RecordType?: InputMaybe; + Report?: InputMaybe; + ReportHierarchyObjectField?: InputMaybe; + Scorecard?: InputMaybe; + ScorecardAssociation?: InputMaybe; + ScorecardMetric?: InputMaybe; + SecurityHealthCheckAlertRecipient?: InputMaybe; + SecurityHealthCheckResult?: InputMaybe; + SelfSvcPortalTopic?: InputMaybe; + Seller?: InputMaybe; + SellerHistory?: InputMaybe; + SetupAssistantStep?: InputMaybe; + SiteHistory?: InputMaybe; + SocialPersona?: InputMaybe; + SocialPersonaHistory?: InputMaybe; + SocialPost?: InputMaybe; + SocialPostHistory?: InputMaybe; + SolutionHistory?: InputMaybe; + StaticResource?: InputMaybe; + StreamingChannel?: InputMaybe; + TableauHostMapping?: InputMaybe; + Task?: InputMaybe; + Tenant__History?: InputMaybe; + Tenant__c?: InputMaybe; + Topic?: InputMaybe; + TopicAssignment?: InputMaybe; + Translation?: InputMaybe; + UnstructuredStorageSpace?: InputMaybe; + User?: InputMaybe; + UserAppMenuItem?: InputMaybe; + UserDefinedLabel?: InputMaybe; + UserDefinedLabelAssignment?: InputMaybe; + UserHistory?: InputMaybe; + UserLocalWebServerIdentity?: InputMaybe; + UserRole?: InputMaybe; + UserSharedFeature?: InputMaybe; + WorkBadgeDefinitionHistory?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderHistory?: InputMaybe; + WorkOrderLineItem?: InputMaybe; + WorkOrderLineItemHistory?: InputMaybe; +}; + +export type Kpi_Snapshot__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Previous_Month_Sales__c?: InputMaybe; + Sales_MoM_Change__c?: InputMaybe; + Snapshot_Date__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Total_Properties__c?: InputMaybe; + Total_Sales_Amount__c?: InputMaybe; + Total_Sales_Count__c?: InputMaybe; + Units_Available__c?: InputMaybe; + Units_Occupied__c?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Kpi_Snapshot__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type LatitudeOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export const LayoutComponentType = { + Canvas: "CANVAS", + CustomLink: "CUSTOM_LINK", + EmptySpace: "EMPTY_SPACE", + Field: "FIELD", + ReportChart: "REPORT_CHART", + VisualforcePage: "VISUALFORCE_PAGE", +} as const; +export type LayoutComponentType = (typeof LayoutComponentType)[keyof typeof LayoutComponentType]; + +export const LayoutMode = { + Create: "CREATE", + Edit: "EDIT", + View: "VIEW", +} as const; +export type LayoutMode = (typeof LayoutMode)[keyof typeof LayoutMode]; + +export const LayoutType = { + Compact: "COMPACT", + Full: "FULL", +} as const; +export type LayoutType = (typeof LayoutType)[keyof typeof LayoutType]; + +export type LeadHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Lead?: InputMaybe; + LeadId?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Lead_Filter = { + AnnualRevenue?: InputMaybe; + City?: InputMaybe; + Company?: InputMaybe; + ConvertedAccount?: InputMaybe; + ConvertedAccountId?: InputMaybe; + ConvertedContact?: InputMaybe; + ConvertedContactId?: InputMaybe; + ConvertedDate?: InputMaybe; + ConvertedOpportunity?: InputMaybe; + ConvertedOpportunityId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Email?: InputMaybe; + EmailBouncedDate?: InputMaybe; + EmailBouncedReason?: InputMaybe; + FirstName?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + Id?: InputMaybe; + Individual?: InputMaybe; + IndividualId?: InputMaybe; + Industry?: InputMaybe; + IsConverted?: InputMaybe; + IsDeleted?: InputMaybe; + IsUnreadByOwner?: InputMaybe; + Jigsaw?: InputMaybe; + JigsawContactId?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + LeadSource?: InputMaybe; + Longitude?: InputMaybe; + MasterRecord?: InputMaybe; + MasterRecordId?: InputMaybe; + Name?: InputMaybe; + NumberOfEmployees?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone?: InputMaybe; + PhotoUrl?: InputMaybe; + PostalCode?: InputMaybe; + Rating?: InputMaybe; + Salutation?: InputMaybe; + State?: InputMaybe; + Status?: InputMaybe; + Street?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + Website?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Lead_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Lease__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Lease__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + End_Date__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Lease_Status__c?: InputMaybe; + Monthly_Rent__c?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + Security_Deposit__c?: InputMaybe; + Start_Date__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Tenant__c?: InputMaybe; + Tenant__r?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ListEmail_Filter = { + Campaign?: InputMaybe; + CampaignId?: InputMaybe; + CcAddress?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FromAddress?: InputMaybe; + FromName?: InputMaybe; + HasAttachment?: InputMaybe; + HtmlBody?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsEmailArchiveRequired?: InputMaybe; + IsSyntheticCcEnabled?: InputMaybe; + IsTracked?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + PardotAsset?: InputMaybe; + PardotTenant?: InputMaybe; + RelatedTo?: InputMaybe; + RelatedToId?: InputMaybe; + ReplyToName?: InputMaybe; + ScheduledDate?: InputMaybe; + SentVia?: InputMaybe; + Status?: InputMaybe; + Subject?: InputMaybe; + SystemModstamp?: InputMaybe; + Template?: InputMaybe; + TemplateId?: InputMaybe; + TextBody?: InputMaybe; + TotalSent?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ListEmail_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ListEmail_RelatedTo_Filters = { + Case?: InputMaybe; + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; + Opportunity?: InputMaybe; + Product2?: InputMaybe; + User?: InputMaybe; +}; + +export type LocationHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Location?: InputMaybe; + LocationId?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type LocationTrustMeasure_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + IconUrl?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsVisibleInPublic?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Location?: InputMaybe; + LocationExternalReference?: InputMaybe; + LocationId?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SortOrder?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type LocationTrustMeasure_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Location_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Email?: InputMaybe; + ExternalReference?: InputMaybe; + Fax?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsInventoryLocation?: InputMaybe; + IsMobile?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LocationType?: InputMaybe; + LogoId?: InputMaybe; + Mobile?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone?: InputMaybe; + RootLocation?: InputMaybe; + RootLocationId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Location_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type LongOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type LongTextAreaOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type LongitudeOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type Maintenance_Request__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Maintenance_Request__C_Filter = { + Actual_Cost__c?: InputMaybe; + Assigned_Worker__c?: InputMaybe; + Assigned_Worker__r?: InputMaybe; + Completed__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description__c?: InputMaybe; + Est_Cost__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Priority__c?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + Scheduled__c?: InputMaybe; + Status__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Tenant_Home__c?: InputMaybe; + Type__c?: InputMaybe; + User__c?: InputMaybe; + User__r?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Maintenance_Request__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Maintenance_Worker__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Maintenance_Worker__C_Filter = { + Certifications__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Employment_Type__c?: InputMaybe; + Hourly_Rate__c?: InputMaybe; + Id?: InputMaybe; + IsActive__c?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Location__c?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone__c?: InputMaybe; + Rating__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Type__c?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Maintenance_Worker__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ManagedContentPublishedUrl_Filter = { + AssociatedCampaign?: InputMaybe; + AssociatedCampaignId?: InputMaybe; + ContentKey?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + ManagedContent?: InputMaybe; + ManagedContentId?: InputMaybe; + ManagedContentTypeId?: InputMaybe; + Name?: InputMaybe; + RedirectContent?: InputMaybe; + RedirectContentId?: InputMaybe; + RedirectUrl?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + UrlAlias?: InputMaybe; + UrlPreferenceIsDefault?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ManagedContentVariant_Filter = { + AltBodyMimeType?: InputMaybe; + AltBodySize?: InputMaybe; + ContentType?: InputMaybe; + ContentTypeFullyQualifiedName?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + HasLocks?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + IsPublished?: InputMaybe; + IsReady?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + ManagedContent?: InputMaybe; + ManagedContentId?: InputMaybe; + ManagedContentKey?: InputMaybe; + ManagedContentSpaceId?: InputMaybe; + ManagedContentVariantStatus?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + UrlName?: InputMaybe; + VariantType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ManagedContent_Filter = { + ApiName?: InputMaybe; + AuthoredManagedContent?: InputMaybe; + AuthoredManagedContentId?: InputMaybe; + AuthoredManagedContentSpaceId?: InputMaybe; + BaseType?: InputMaybe; + ContentKey?: InputMaybe; + ContentType?: InputMaybe; + ContentTypeFullyQualifiedName?: InputMaybe; + ContentTypeInfoId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ExternalId?: InputMaybe; + FolderId?: InputMaybe; + Id?: InputMaybe; + InternalPreferenceIsJsonStoreContent?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastPublishedVersionId?: InputMaybe; + LastStagedVersionId?: InputMaybe; + LatestVersionId?: InputMaybe; + Name?: InputMaybe; + PrimaryLanguage?: InputMaybe; + SourceContext?: InputMaybe; + SystemModstamp?: InputMaybe; + Template?: InputMaybe; + TemplateId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type MultiPicklistOperators = { + eq?: InputMaybe; + excludes?: InputMaybe>>; + includes?: InputMaybe>>; + ne?: InputMaybe; +}; + +export type Name_Filter = { + Alias?: InputMaybe; + CommunityNickname?: InputMaybe; + Email?: InputMaybe; + FirstName?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + LastName?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + NameOrAlias?: InputMaybe; + Phone?: InputMaybe; + Profile?: InputMaybe; + ProfileId?: InputMaybe; + RecordType?: InputMaybe; + RecordTypeId?: InputMaybe; + Title?: InputMaybe; + Type?: InputMaybe; + UserRole?: InputMaybe; + UserRoleId?: InputMaybe; + Username?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Name_OrderBy = { + Alias?: InputMaybe; + CommunityNickname?: InputMaybe; + Email?: InputMaybe; + FirstName?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + LastName?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + NameOrAlias?: InputMaybe; + Phone?: InputMaybe; + Profile?: InputMaybe; + ProfileId?: InputMaybe; + RecordType?: InputMaybe; + RecordTypeId?: InputMaybe; + Title?: InputMaybe; + Type?: InputMaybe; + UserRole?: InputMaybe; + UserRoleId?: InputMaybe; + Username?: InputMaybe; +}; + +export type NetworkDataCategory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataCategoryGroupName?: InputMaybe; + DataCategoryLabel?: InputMaybe; + DataCategoryName?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + Image?: InputMaybe; + ImageId?: InputMaybe; + IsDeleted?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Network?: InputMaybe; + NetworkId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Network_Filter = { + AllowedExtensions?: InputMaybe; + CaseCommentEmailTemplateId?: InputMaybe; + ChangePasswordEmailTemplateId?: InputMaybe; + ChgEmailVerNewEmailTemplateId?: InputMaybe; + ChgEmailVerOldEmailTemplateId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeviceActEmailTemplateId?: InputMaybe; + EmailFooterLogoId?: InputMaybe; + EmailFooterText?: InputMaybe; + EmailSenderAddress?: InputMaybe; + EmailSenderName?: InputMaybe; + FirstActivationDate?: InputMaybe; + ForgotPasswordEmailTemplateId?: InputMaybe; + HeadlessForgotPasswordTemplateId?: InputMaybe; + HeadlessRegistrationTemplateId?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LockoutEmailTemplateId?: InputMaybe; + MaxFileSizeKb?: InputMaybe; + Name?: InputMaybe; + NewSenderAddress?: InputMaybe; + OptionsActionOverrideEnabled?: InputMaybe; + OptionsAdvancedAuthForSiteEnabled?: InputMaybe; + OptionsAllowInternalUserLogin?: InputMaybe; + OptionsAllowMembersToFlag?: InputMaybe; + OptionsApexCDNCachingEnabled?: InputMaybe; + OptionsCWBannerState?: InputMaybe; + OptionsDirectMessagesEnabled?: InputMaybe; + OptionsDisableWorkspaceInfo?: InputMaybe; + OptionsEinsteinAnswersEnabled?: InputMaybe; + OptionsEinsteinAnswersKAEnabled?: InputMaybe; + OptionsEinsteinAnswersQAEnabled?: InputMaybe; + OptionsEinsteinAnswersSnippetEnabled?: InputMaybe; + OptionsEmbeddedLoginEnabled?: InputMaybe; + OptionsEnableTalkingAboutStats?: InputMaybe; + OptionsEnableTopicAssignmentRules?: InputMaybe; + OptionsExpFriendlyUrlsAsDefault?: InputMaybe; + OptionsExperienceBundleBasedSnaOverrideEnabled?: InputMaybe; + OptionsGatherCustomerSentimentData?: InputMaybe; + OptionsGuestChatterEnabled?: InputMaybe; + OptionsGuestFileAccessEnabled?: InputMaybe; + OptionsGuestMemberVisibility?: InputMaybe; + OptionsHeadlessFrgtPswEnabled?: InputMaybe; + OptionsImageOptimizationCDNEnabled?: InputMaybe; + OptionsInvitationsEnabled?: InputMaybe; + OptionsKnowledgeableEnabled?: InputMaybe; + OptionsLWRExperienceConnectedAppEnabled?: InputMaybe; + OptionsLWRExperienceOnManagedRuntime?: InputMaybe; + OptionsLWRSearchGenerativeAnswersEnabled?: InputMaybe; + OptionsMemberVisibility?: InputMaybe; + OptionsMobileImageOptimizationEnabled?: InputMaybe; + OptionsNetworkSentimentAnalysis?: InputMaybe; + OptionsNicknameDisplayEnabled?: InputMaybe; + OptionsPrivateMessagesEnabled?: InputMaybe; + OptionsProfileBasedLayoutsForKnowledgeSearchEnabled?: InputMaybe; + OptionsPvtPagesPwdResetAccessDisabled?: InputMaybe; + OptionsRecognitionBadgingEnabled?: InputMaybe; + OptionsReputationEnabled?: InputMaybe; + OptionsReputationRecordConversationsDisabled?: InputMaybe; + OptionsSecondaryEmailSenderEnabled?: InputMaybe; + OptionsSelfRegistrationEnabled?: InputMaybe; + OptionsSendWelcomeEmail?: InputMaybe; + OptionsShowAllNetworkSettings?: InputMaybe; + OptionsSiteAsContainerEnabled?: InputMaybe; + OptionsThreadedDiscussionsEnabled?: InputMaybe; + OptionsTopicFilteringForKnowledgeSearchEnabled?: InputMaybe; + OptionsTopicSuggestionsEnabled?: InputMaybe; + OptionsTwilioCallbackApiEnabled?: InputMaybe; + OptionsUpDownVoteEnabled?: InputMaybe; + PendingSecondaryEmailAddress?: InputMaybe; + PwdlessRegEmailTemplateId?: InputMaybe; + SelfRegMicroBatchSubErrorEmailTemplateId?: InputMaybe; + SelfRegProfileId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + TabSetId?: InputMaybe; + UrlPathPrefix?: InputMaybe; + VerificationEmailTemplateId?: InputMaybe; + VerifiedSecondaryEmailAddress?: InputMaybe; + WelcomeEmailTemplateId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type NoFunctionAggregateOrderByClause = { + nulls?: InputMaybe; + order?: InputMaybe; +}; + +export type Note_Filter = { + Body?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrivate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + SystemModstamp?: InputMaybe; + Title?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Note_Parent_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + EngagementChannelType?: InputMaybe; + Image?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + Payment__c?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + SocialPost?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type Notification__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Is_Read__c?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Message__c?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Priority__c?: InputMaybe; + Related_Object_Type__c?: InputMaybe; + Related_Record_Id__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Title__c?: InputMaybe; + Type__c?: InputMaybe; + User__c?: InputMaybe; + User__r?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Notification__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export const NullOrder = { + First: "FIRST", + Last: "LAST", +} as const; +export type NullOrder = (typeof NullOrder)[keyof typeof NullOrder]; + +export const NullsOrder = { + First: "FIRST", + Last: "LAST", +} as const; +export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]; + +export type ObjectMetadataTag_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Record?: InputMaybe; + RecordId?: InputMaybe; + SystemModstamp?: InputMaybe; + TagType?: InputMaybe; + Value?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ObjectPermissions_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + PermissionsCreate?: InputMaybe; + PermissionsDelete?: InputMaybe; + PermissionsEdit?: InputMaybe; + PermissionsModifyAllRecords?: InputMaybe; + PermissionsRead?: InputMaybe; + PermissionsViewAllFields?: InputMaybe; + PermissionsViewAllRecords?: InputMaybe; + SobjectType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ObjectRelatedUrl_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LanguageCode?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + Scope?: InputMaybe; + SystemModstamp?: InputMaybe; + UniqueIndex?: InputMaybe; + UrlName?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ObjectRelatedUrl_Parent_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + Contact?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lease__c?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Payment__c?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; +}; + +export type OpportunityContactRole_Filter = { + Contact?: InputMaybe; + ContactId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + Role?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OpportunityFieldHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OpportunityHistory_Filter = { + Amount?: InputMaybe; + CloseDate?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ExpectedRevenue?: InputMaybe; + ForecastCategory?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + PrevAmount?: InputMaybe; + PrevCloseDate?: InputMaybe; + Probability?: InputMaybe; + StageName?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OpportunityLineItem_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + ListPrice?: InputMaybe; + Name?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + PricebookEntry?: InputMaybe; + PricebookEntryId?: InputMaybe; + Product2?: InputMaybe; + Product2Id?: InputMaybe; + ProductCode?: InputMaybe; + Quantity?: InputMaybe; + ServiceDate?: InputMaybe; + SortOrder?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalPrice?: InputMaybe; + UnitPrice?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OpportunityPartner_Filter = { + AccountTo?: InputMaybe; + AccountToId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + ReversePartnerId?: InputMaybe; + Role?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OpportunityRelatedDeleteLog_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + DeleteLog?: InputMaybe; + FieldName?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + Parent?: InputMaybe; + SobjectType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Opportunity_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + Amount?: InputMaybe; + Campaign?: InputMaybe; + CampaignId?: InputMaybe; + CloseDate?: InputMaybe; + ContactId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Fiscal?: InputMaybe; + FiscalQuarter?: InputMaybe; + FiscalYear?: InputMaybe; + ForecastCategory?: InputMaybe; + ForecastCategoryName?: InputMaybe; + HasOpenActivity?: InputMaybe; + HasOpportunityLineItem?: InputMaybe; + HasOverdueTask?: InputMaybe; + Id?: InputMaybe; + IsClosed?: InputMaybe; + IsDeleted?: InputMaybe; + IsWon?: InputMaybe; + LastActivityDate?: InputMaybe; + LastAmountChangedHistory?: InputMaybe; + LastAmountChangedHistoryId?: InputMaybe; + LastCloseDateChangedHistory?: InputMaybe; + LastCloseDateChangedHistoryId?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastStageChangeDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LeadSource?: InputMaybe; + Name?: InputMaybe; + NextStep?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Pricebook2?: InputMaybe; + Pricebook2Id?: InputMaybe; + Probability?: InputMaybe; + PushCount?: InputMaybe; + StageName?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OrderByClause = { + nulls?: InputMaybe; + order?: InputMaybe; +}; + +export type OrderByGeolocationClause = { + distance?: InputMaybe; + nulls?: InputMaybe; + order?: InputMaybe; +}; + +export type OrderHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Order?: InputMaybe; + OrderId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OrderItemHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + OrderItem?: InputMaybe; + OrderItemId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OrderItem_Filter = { + AvailableQuantity?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + EndDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + ListPrice?: InputMaybe; + Order?: InputMaybe; + OrderId?: InputMaybe; + OrderItemNumber?: InputMaybe; + OriginalOrderItem?: InputMaybe; + OriginalOrderItemId?: InputMaybe; + PricebookEntry?: InputMaybe; + PricebookEntryId?: InputMaybe; + Product2?: InputMaybe; + Product2Id?: InputMaybe; + Quantity?: InputMaybe; + ServiceDate?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalPrice?: InputMaybe; + UnitPrice?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Order_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + ActivatedBy?: InputMaybe; + ActivatedById?: InputMaybe; + ActivatedDate?: InputMaybe; + BillingCity?: InputMaybe; + BillingCountry?: InputMaybe; + BillingGeocodeAccuracy?: InputMaybe; + BillingLatitude?: InputMaybe; + BillingLongitude?: InputMaybe; + BillingPostalCode?: InputMaybe; + BillingState?: InputMaybe; + BillingStreet?: InputMaybe; + CompanyAuthorizedBy?: InputMaybe; + CompanyAuthorizedById?: InputMaybe; + Contract?: InputMaybe; + ContractId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + CustomerAuthorizedBy?: InputMaybe; + CustomerAuthorizedById?: InputMaybe; + Description?: InputMaybe; + EffectiveDate?: InputMaybe; + EndDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsReductionOrder?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + OrderNumber?: InputMaybe; + OriginalOrder?: InputMaybe; + OriginalOrderId?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Pricebook2?: InputMaybe; + Pricebook2Id?: InputMaybe; + ShippingCity?: InputMaybe; + ShippingCountry?: InputMaybe; + ShippingGeocodeAccuracy?: InputMaybe; + ShippingLatitude?: InputMaybe; + ShippingLongitude?: InputMaybe; + ShippingPostalCode?: InputMaybe; + ShippingState?: InputMaybe; + ShippingStreet?: InputMaybe; + Status?: InputMaybe; + StatusCode?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalAmount?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Order_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type OrgMetricScanSummary_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ErrorMessage?: InputMaybe; + FeatureLimit?: InputMaybe; + Id?: InputMaybe; + ImplementationEffort?: InputMaybe; + IsDeleted?: InputMaybe; + ItemCount?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + OrgMetric?: InputMaybe; + OrgMetricId?: InputMaybe; + PercentUsage?: InputMaybe; + ScanDate?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + Unit?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type OrgMetric_Filter = { + Category?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FeatureType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LatestOrgMetricScanSummary?: InputMaybe; + LatestOrgMetricScanSummaryId?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Organization_Filter = { + City?: InputMaybe; + ComplianceBccEmail?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultAccountAccess?: InputMaybe; + DefaultCalendarAccess?: InputMaybe; + DefaultCampaignAccess?: InputMaybe; + DefaultCaseAccess?: InputMaybe; + DefaultContactAccess?: InputMaybe; + DefaultLeadAccess?: InputMaybe; + DefaultLocaleSidKey?: InputMaybe; + DefaultOpportunityAccess?: InputMaybe; + DefaultPricebookAccess?: InputMaybe; + DelegatedAuthenticationServiceUrl?: InputMaybe; + Division?: InputMaybe; + Fax?: InputMaybe; + FiscalYearStartMonth?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + Id?: InputMaybe; + InstanceName?: InputMaybe; + IsReadOnly?: InputMaybe; + IsSandbox?: InputMaybe; + LanguageLocaleKey?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Latitude?: InputMaybe; + Longitude?: InputMaybe; + MonthlyPageViewsEntitlement?: InputMaybe; + MonthlyPageViewsUsed?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + NumKnowledgeService?: InputMaybe; + OrganizationType?: InputMaybe; + Phone?: InputMaybe; + PostalCode?: InputMaybe; + PreferencesAutoSelectIndividualOnMerge?: InputMaybe; + PreferencesConsentManagementEnabled?: InputMaybe; + PreferencesDeleteMonitoringDataEnabled?: InputMaybe; + PreferencesEnhancedEmailEnabled?: InputMaybe; + PreferencesLightningLoginEnabled?: InputMaybe; + PreferencesManyWhoPreference?: InputMaybe; + PreferencesOnlyLLPermUserAllowed?: InputMaybe; + PreferencesPathAssistantsEnabled?: InputMaybe; + PreferencesRequireOpportunityProducts?: InputMaybe; + PreferencesRetainLoginHints?: InputMaybe; + PreferencesS1DesktopEnabled?: InputMaybe; + PreferencesS1EncryptedStoragePref2?: InputMaybe; + PreferencesS1OfflinePref?: InputMaybe; + PreferencesShowTM2EnabledBanner?: InputMaybe; + PreferencesSkipProvWizardWelcome?: InputMaybe; + PreferencesSocialProfilesEnable?: InputMaybe; + PreferencesTerritoryManagement2Enable?: InputMaybe; + PreferencesUsePathCollapsedUserPref?: InputMaybe; + PreferencesUserSwitching?: InputMaybe; + PrimaryContact?: InputMaybe; + ReceivesAdminInfoEmails?: InputMaybe; + ReceivesInfoEmails?: InputMaybe; + SignupCountryIsoCode?: InputMaybe; + State?: InputMaybe; + Street?: InputMaybe; + SystemModstamp?: InputMaybe; + TimeZoneSidKey?: InputMaybe; + TrialExpirationDate?: InputMaybe; + UiSkin?: InputMaybe; + UsesStartDateAsFiscalYearName?: InputMaybe; + WebToCaseDefaultOrigin?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Organization_OrderBy = { + City?: InputMaybe; + ComplianceBccEmail?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultAccountAccess?: InputMaybe; + DefaultCalendarAccess?: InputMaybe; + DefaultCampaignAccess?: InputMaybe; + DefaultCaseAccess?: InputMaybe; + DefaultContactAccess?: InputMaybe; + DefaultLeadAccess?: InputMaybe; + DefaultLocaleSidKey?: InputMaybe; + DefaultOpportunityAccess?: InputMaybe; + DefaultPricebookAccess?: InputMaybe; + DelegatedAuthenticationServiceUrl?: InputMaybe; + Division?: InputMaybe; + Fax?: InputMaybe; + FiscalYearStartMonth?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + Id?: InputMaybe; + InstanceName?: InputMaybe; + IsReadOnly?: InputMaybe; + IsSandbox?: InputMaybe; + LanguageLocaleKey?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Latitude?: InputMaybe; + Longitude?: InputMaybe; + MonthlyPageViewsEntitlement?: InputMaybe; + MonthlyPageViewsUsed?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + NumKnowledgeService?: InputMaybe; + OrganizationType?: InputMaybe; + Phone?: InputMaybe; + PostalCode?: InputMaybe; + PreferencesAutoSelectIndividualOnMerge?: InputMaybe; + PreferencesConsentManagementEnabled?: InputMaybe; + PreferencesDeleteMonitoringDataEnabled?: InputMaybe; + PreferencesEnhancedEmailEnabled?: InputMaybe; + PreferencesLightningLoginEnabled?: InputMaybe; + PreferencesManyWhoPreference?: InputMaybe; + PreferencesOnlyLLPermUserAllowed?: InputMaybe; + PreferencesPathAssistantsEnabled?: InputMaybe; + PreferencesRequireOpportunityProducts?: InputMaybe; + PreferencesRetainLoginHints?: InputMaybe; + PreferencesS1DesktopEnabled?: InputMaybe; + PreferencesS1EncryptedStoragePref2?: InputMaybe; + PreferencesS1OfflinePref?: InputMaybe; + PreferencesShowTM2EnabledBanner?: InputMaybe; + PreferencesSkipProvWizardWelcome?: InputMaybe; + PreferencesSocialProfilesEnable?: InputMaybe; + PreferencesTerritoryManagement2Enable?: InputMaybe; + PreferencesUsePathCollapsedUserPref?: InputMaybe; + PreferencesUserSwitching?: InputMaybe; + PrimaryContact?: InputMaybe; + ReceivesAdminInfoEmails?: InputMaybe; + ReceivesInfoEmails?: InputMaybe; + SignupCountryIsoCode?: InputMaybe; + State?: InputMaybe; + Street?: InputMaybe; + SystemModstamp?: InputMaybe; + TimeZoneSidKey?: InputMaybe; + TrialExpirationDate?: InputMaybe; + UiSkin?: InputMaybe; + UsesStartDateAsFiscalYearName?: InputMaybe; + WebToCaseDefaultOrigin?: InputMaybe; +}; + +export type Partner_Filter = { + AccountFrom?: InputMaybe; + AccountFromId?: InputMaybe; + AccountTo?: InputMaybe; + AccountToId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsPrimary?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Opportunity?: InputMaybe; + OpportunityId?: InputMaybe; + ReversePartnerId?: InputMaybe; + Role?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PartyConsentHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + PartyConsent?: InputMaybe; + PartyConsentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PartyConsent_Filter = { + Action?: InputMaybe; + BusinessBrand?: InputMaybe; + BusinessBrandId?: InputMaybe; + CaptureContactPointType?: InputMaybe; + CaptureDate?: InputMaybe; + CaptureSource?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataUsePurpose?: InputMaybe; + DataUsePurposeId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Party?: InputMaybe; + PartyId?: InputMaybe; + PartyRole?: InputMaybe; + PartyRoleId?: InputMaybe; + PrivacyConsentStatus?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PartyConsent_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type PartyConsent_PartyRole_Filters = { + Customer?: InputMaybe; + Name?: InputMaybe; + Seller?: InputMaybe; +}; + +export type Payment__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Payment__C_Filter = { + Amount__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Lease__c?: InputMaybe; + Lease__r?: InputMaybe; + Name?: InputMaybe; + Notes__c?: InputMaybe; + Payment_Date__c?: InputMaybe; + Payment_Method__c?: InputMaybe; + Payment_Status__c?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PercentOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type Period_Filter = { + EndDate?: InputMaybe; + FiscalYearSettingsId?: InputMaybe; + FullyQualifiedLabel?: InputMaybe; + Id?: InputMaybe; + IsForecastPeriod?: InputMaybe; + Number?: InputMaybe; + PeriodLabel?: InputMaybe; + QuarterLabel?: InputMaybe; + StartDate?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PermissionSetGroup_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + HasActivationRequired?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + NamespacePrefix?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PermissionSetLicense_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DeveloperName?: InputMaybe; + ExpirationDate?: InputMaybe; + Id?: InputMaybe; + IsAvailableForIntegrations?: InputMaybe; + IsDeleted?: InputMaybe; + IsSupplementLicense?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LicenseExpirationPolicy?: InputMaybe; + MasterLabel?: InputMaybe; + MaximumPermissionsAcceptInboundBundling?: InputMaybe; + MaximumPermissionsAccessBankingRelationshipAssistance?: InputMaybe; + MaximumPermissionsAccessBankingServiceAgent?: InputMaybe; + MaximumPermissionsAccessCMC?: InputMaybe; + MaximumPermissionsAccessContentBuilder?: InputMaybe; + MaximumPermissionsAccessDisputePrompts?: InputMaybe; + MaximumPermissionsAccessOrchestrationObjects?: InputMaybe; + MaximumPermissionsAccessPolicyAgent?: InputMaybe; + MaximumPermissionsAccessServiceEinstein?: InputMaybe; + MaximumPermissionsAccessSfDrive?: InputMaybe; + MaximumPermissionsAccessToComplaintAgent?: InputMaybe; + MaximumPermissionsAccessToComplaintMgmt?: InputMaybe; + MaximumPermissionsAccessToDisputeManagement?: InputMaybe; + MaximumPermissionsAccessToServiceProcess?: InputMaybe; + MaximumPermissionsAccessWealthAdvisorAgent?: InputMaybe; + MaximumPermissionsAccountSwitcherUser?: InputMaybe; + MaximumPermissionsActivateContract?: InputMaybe; + MaximumPermissionsActivateOrder?: InputMaybe; + MaximumPermissionsActivateSystemModeFlows?: InputMaybe; + MaximumPermissionsActivitiesAccess?: InputMaybe; + MaximumPermissionsAddDirectMessageMembers?: InputMaybe; + MaximumPermissionsAdvancedCsvDataImportUser?: InputMaybe; + MaximumPermissionsAgentforceServiceAgentUser?: InputMaybe; + MaximumPermissionsAllowEmailIC?: InputMaybe; + MaximumPermissionsAllowLightningLogin?: InputMaybe; + MaximumPermissionsAllowViewEditConvertedLeads?: InputMaybe; + MaximumPermissionsApexRestServices?: InputMaybe; + MaximumPermissionsApiEnabled?: InputMaybe; + MaximumPermissionsApiUserOnly?: InputMaybe; + MaximumPermissionsAppFrameworkManageApp?: InputMaybe; + MaximumPermissionsAppFrameworkManageTemplate?: InputMaybe; + MaximumPermissionsAppFrameworkViewApp?: InputMaybe; + MaximumPermissionsApprovalAdmin?: InputMaybe; + MaximumPermissionsApprovalDesigner?: InputMaybe; + MaximumPermissionsAssignPermissionSets?: InputMaybe; + MaximumPermissionsAssignTopics?: InputMaybe; + MaximumPermissionsAttributionModelUser?: InputMaybe; + MaximumPermissionsAuthorApex?: InputMaybe; + MaximumPermissionsB2BMarketingAnalyticsUser?: InputMaybe; + MaximumPermissionsBulkApiHardDelete?: InputMaybe; + MaximumPermissionsBypassMFAForUiLogins?: InputMaybe; + MaximumPermissionsCMSECEAuthoringAccess?: InputMaybe; + MaximumPermissionsCampaignInfluence2?: InputMaybe; + MaximumPermissionsCanApproveFeedPost?: InputMaybe; + MaximumPermissionsCanApproveUninstalledApps?: InputMaybe; + MaximumPermissionsCanDoActAsUser?: InputMaybe; + MaximumPermissionsCanEditPrompts?: InputMaybe; + MaximumPermissionsCanInsertFeedSystemFields?: InputMaybe; + MaximumPermissionsCanTranslateScrt2Conversation?: InputMaybe; + MaximumPermissionsCanUpdateEmailMessage?: InputMaybe; + MaximumPermissionsCanUseNewDashboardBuilder?: InputMaybe; + MaximumPermissionsCanVerifyComment?: InputMaybe; + MaximumPermissionsCanWriteWithAiScrt2Conversation?: InputMaybe; + MaximumPermissionsCdcReportingCreateReports?: InputMaybe; + MaximumPermissionsCdcReportingManageFolders?: InputMaybe; + MaximumPermissionsCdcReportingViewReports?: InputMaybe; + MaximumPermissionsChangeDashboardColors?: InputMaybe; + MaximumPermissionsChatterComposeUiCodesnippet?: InputMaybe; + MaximumPermissionsChatterEditOwnPost?: InputMaybe; + MaximumPermissionsChatterEditOwnRecordPost?: InputMaybe; + MaximumPermissionsChatterFileLink?: InputMaybe; + MaximumPermissionsChatterInternalUser?: InputMaybe; + MaximumPermissionsChatterInviteExternalUsers?: InputMaybe; + MaximumPermissionsChatterOwnGroups?: InputMaybe; + MaximumPermissionsClientSecretRotation?: InputMaybe; + MaximumPermissionsCloseConversations?: InputMaybe; + MaximumPermissionsConfigCustomRecs?: InputMaybe; + MaximumPermissionsConfigureDataspaceScope?: InputMaybe; + MaximumPermissionsConnectOrgToEnvironmentHub?: InputMaybe; + MaximumPermissionsConsentApiUpdate?: InputMaybe; + MaximumPermissionsContentAdministrator?: InputMaybe; + MaximumPermissionsContentHubUser?: InputMaybe; + MaximumPermissionsContentWorkspaces?: InputMaybe; + MaximumPermissionsConvertLeads?: InputMaybe; + MaximumPermissionsCreateCustomizeDashboards?: InputMaybe; + MaximumPermissionsCreateCustomizeFilters?: InputMaybe; + MaximumPermissionsCreateCustomizeReports?: InputMaybe; + MaximumPermissionsCreateDashboardFolders?: InputMaybe; + MaximumPermissionsCreateLtngTempFolder?: InputMaybe; + MaximumPermissionsCreateLtngTempInPub?: InputMaybe; + MaximumPermissionsCreatePackaging?: InputMaybe; + MaximumPermissionsCreateReportFolders?: InputMaybe; + MaximumPermissionsCreateReportInLightning?: InputMaybe; + MaximumPermissionsCreateTopics?: InputMaybe; + MaximumPermissionsCreateWorkBadgeDefinition?: InputMaybe; + MaximumPermissionsCreateWorkspaces?: InputMaybe; + MaximumPermissionsCustomAppsOnFSMobile?: InputMaybe; + MaximumPermissionsCustomMobileAppsAccess?: InputMaybe; + MaximumPermissionsCustomSidebarOnAllPages?: InputMaybe; + MaximumPermissionsCustomizeApplication?: InputMaybe; + MaximumPermissionsDataExport?: InputMaybe; + MaximumPermissionsDelegatedTwoFactor?: InputMaybe; + MaximumPermissionsDeleteActivatedContract?: InputMaybe; + MaximumPermissionsDeleteCrMemoAndInvoice?: InputMaybe; + MaximumPermissionsDeleteSalesforceFiles?: InputMaybe; + MaximumPermissionsDeleteTopics?: InputMaybe; + MaximumPermissionsDigitalLendingAdminUser?: InputMaybe; + MaximumPermissionsDigitalLendingEditReadOnly?: InputMaybe; + MaximumPermissionsDigitalLendingUser?: InputMaybe; + MaximumPermissionsDigitalLendingWorkbench?: InputMaybe; + MaximumPermissionsDistributeFromPersWksp?: InputMaybe; + MaximumPermissionsDownloadMaliciousFiles?: InputMaybe; + MaximumPermissionsDownloadPackageVersionZips?: InputMaybe; + MaximumPermissionsEditActivatedOrders?: InputMaybe; + MaximumPermissionsEditBillingInfo?: InputMaybe; + MaximumPermissionsEditBrandTemplates?: InputMaybe; + MaximumPermissionsEditCaseComments?: InputMaybe; + MaximumPermissionsEditEvent?: InputMaybe; + MaximumPermissionsEditHtmlTemplates?: InputMaybe; + MaximumPermissionsEditMyDashboards?: InputMaybe; + MaximumPermissionsEditMyReports?: InputMaybe; + MaximumPermissionsEditOppLineItemUnitPrice?: InputMaybe; + MaximumPermissionsEditPublicDocuments?: InputMaybe; + MaximumPermissionsEditPublicFilters?: InputMaybe; + MaximumPermissionsEditPublicTemplates?: InputMaybe; + MaximumPermissionsEditReadonlyFields?: InputMaybe; + MaximumPermissionsEditTask?: InputMaybe; + MaximumPermissionsEditTopics?: InputMaybe; + MaximumPermissionsEmailAdministration?: InputMaybe; + MaximumPermissionsEmailMass?: InputMaybe; + MaximumPermissionsEmailSingle?: InputMaybe; + MaximumPermissionsEmailTemplateManagement?: InputMaybe; + MaximumPermissionsEnableBCTransactionPolling?: InputMaybe; + MaximumPermissionsEnableCommunityAppLauncher?: InputMaybe; + MaximumPermissionsEnableIPFSUpload?: InputMaybe; + MaximumPermissionsEnableNotifications?: InputMaybe; + MaximumPermissionsEngagementConfigUser?: InputMaybe; + MaximumPermissionsEnhancedSalesMobileExp?: InputMaybe; + MaximumPermissionsExportReport?: InputMaybe; + MaximumPermissionsExternalClientAppAdmin?: InputMaybe; + MaximumPermissionsExternalClientAppDeveloper?: InputMaybe; + MaximumPermissionsExternalClientAppViewer?: InputMaybe; + MaximumPermissionsFSCArcGraphCommunityUser?: InputMaybe; + MaximumPermissionsFeedPinning?: InputMaybe; + MaximumPermissionsFlowUFLRequired?: InputMaybe; + MaximumPermissionsForceTwoFactor?: InputMaybe; + MaximumPermissionsFreezeUsers?: InputMaybe; + MaximumPermissionsGiveRecognitionBadge?: InputMaybe; + MaximumPermissionsGovernNetworks?: InputMaybe; + MaximumPermissionsGrantOutboundBundling?: InputMaybe; + MaximumPermissionsHasUnlimitedNBAExecutions?: InputMaybe; + MaximumPermissionsHeadlessCMSAccess?: InputMaybe; + MaximumPermissionsHeadlessPublishNudges?: InputMaybe; + MaximumPermissionsHideReadByList?: InputMaybe; + MaximumPermissionsIdentityConnect?: InputMaybe; + MaximumPermissionsIdentityEnabled?: InputMaybe; + MaximumPermissionsImportCustomObjects?: InputMaybe; + MaximumPermissionsImportLeads?: InputMaybe; + MaximumPermissionsImportPersonal?: InputMaybe; + MaximumPermissionsInboundMigrationToolsUser?: InputMaybe; + MaximumPermissionsInstallPackaging?: InputMaybe; + MaximumPermissionsIntelligentDocumentProcessing?: InputMaybe; + MaximumPermissionsIsSsoEnabled?: InputMaybe; + MaximumPermissionsIsotopeAccess?: InputMaybe; + MaximumPermissionsIsotopeCToCUser?: InputMaybe; + MaximumPermissionsIsotopeLEX?: InputMaybe; + MaximumPermissionsKGERMultiArticlesUser?: InputMaybe; + MaximumPermissionsLMEndMessagingSessionUserPerm?: InputMaybe; + MaximumPermissionsLMOutboundMessagingUserPerm?: InputMaybe; + MaximumPermissionsLightningConsoleAllowedForUser?: InputMaybe; + MaximumPermissionsLightningExperienceUser?: InputMaybe; + MaximumPermissionsListEmailSend?: InputMaybe; + MaximumPermissionsLobbyManagementUserAccess?: InputMaybe; + MaximumPermissionsLtngPromoReserved01UserPerm?: InputMaybe; + MaximumPermissionsMCPMetadataApi?: InputMaybe; + MaximumPermissionsManageAccessPolicies?: InputMaybe; + MaximumPermissionsManageAgentforceServiceAgent?: InputMaybe; + MaximumPermissionsManageAnalyticSnapshots?: InputMaybe; + MaximumPermissionsManageApiNamedQueries?: InputMaybe; + MaximumPermissionsManageAuthProviders?: InputMaybe; + MaximumPermissionsManageBusinessHourHolidays?: InputMaybe; + MaximumPermissionsManageC360AConnections?: InputMaybe; + MaximumPermissionsManageCMS?: InputMaybe; + MaximumPermissionsManageCallCenters?: InputMaybe; + MaximumPermissionsManageCases?: InputMaybe; + MaximumPermissionsManageCategories?: InputMaybe; + MaximumPermissionsManageCdpMlModels?: InputMaybe; + MaximumPermissionsManageCertificates?: InputMaybe; + MaximumPermissionsManageCertificatesExpiration?: InputMaybe; + MaximumPermissionsManageChatterMessages?: InputMaybe; + MaximumPermissionsManageContentPermissions?: InputMaybe; + MaximumPermissionsManageContentProperties?: InputMaybe; + MaximumPermissionsManageContentTaxonomy?: InputMaybe; + MaximumPermissionsManageContentTypes?: InputMaybe; + MaximumPermissionsManageCustomDomains?: InputMaybe; + MaximumPermissionsManageCustomPermissions?: InputMaybe; + MaximumPermissionsManageCustomReportTypes?: InputMaybe; + MaximumPermissionsManageDashbdsInPubFolders?: InputMaybe; + MaximumPermissionsManageDataCategories?: InputMaybe; + MaximumPermissionsManageDataIntegrations?: InputMaybe; + MaximumPermissionsManageDataspaceScope?: InputMaybe; + MaximumPermissionsManageDynamicDashboards?: InputMaybe; + MaximumPermissionsManageEmailClientConfig?: InputMaybe; + MaximumPermissionsManageExchangeConfig?: InputMaybe; + MaximumPermissionsManageExternalConnections?: InputMaybe; + MaximumPermissionsManageFilesAndAttachments?: InputMaybe; + MaximumPermissionsManageForecastingCustomData?: InputMaybe; + MaximumPermissionsManageHealthCheck?: InputMaybe; + MaximumPermissionsManageHerokuAppLink?: InputMaybe; + MaximumPermissionsManageHubConnections?: InputMaybe; + MaximumPermissionsManageIntegrationConnections?: InputMaybe; + MaximumPermissionsManageInteraction?: InputMaybe; + MaximumPermissionsManageInternalUsers?: InputMaybe; + MaximumPermissionsManageIpAddresses?: InputMaybe; + MaximumPermissionsManageLeads?: InputMaybe; + MaximumPermissionsManageLoginAccessPolicies?: InputMaybe; + MaximumPermissionsManageMaliciousFiles?: InputMaybe; + MaximumPermissionsManageMobile?: InputMaybe; + MaximumPermissionsManageMobileAppSecurity?: InputMaybe; + MaximumPermissionsManageNamedCredentials?: InputMaybe; + MaximumPermissionsManageNetworks?: InputMaybe; + MaximumPermissionsManageOrchInstsAndWorkItems?: InputMaybe; + MaximumPermissionsManageOrchestrationRuns?: InputMaybe; + MaximumPermissionsManagePasswordPolicies?: InputMaybe; + MaximumPermissionsManageProfilesPermissionsets?: InputMaybe; + MaximumPermissionsManagePropositions?: InputMaybe; + MaximumPermissionsManagePvtRptsAndDashbds?: InputMaybe; + MaximumPermissionsManageQuotas?: InputMaybe; + MaximumPermissionsManageRecommendationStrategies?: InputMaybe; + MaximumPermissionsManageReleaseUpdates?: InputMaybe; + MaximumPermissionsManageRemoteAccess?: InputMaybe; + MaximumPermissionsManageReportsInPubFolders?: InputMaybe; + MaximumPermissionsManageRoles?: InputMaybe; + MaximumPermissionsManageSessionPermissionSets?: InputMaybe; + MaximumPermissionsManageSharedListViews?: InputMaybe; + MaximumPermissionsManageSharing?: InputMaybe; + MaximumPermissionsManageSocialPosting?: InputMaybe; + MaximumPermissionsManageSolutions?: InputMaybe; + MaximumPermissionsManageSubscriptions?: InputMaybe; + MaximumPermissionsManageSurveys?: InputMaybe; + MaximumPermissionsManageSynonyms?: InputMaybe; + MaximumPermissionsManageTrustMeasures?: InputMaybe; + MaximumPermissionsManageTwoFactor?: InputMaybe; + MaximumPermissionsManageUnlistedGroups?: InputMaybe; + MaximumPermissionsManageUsers?: InputMaybe; + MaximumPermissionsMassInlineEdit?: InputMaybe; + MaximumPermissionsMeetingEngagementUser?: InputMaybe; + MaximumPermissionsMemberSelfServiceAgentAccess?: InputMaybe; + MaximumPermissionsMergeTopics?: InputMaybe; + MaximumPermissionsMetadataStudioUser?: InputMaybe; + MaximumPermissionsMicrobatching?: InputMaybe; + MaximumPermissionsMngBenVerfForAssistiveAgnt?: InputMaybe; + MaximumPermissionsMobileAppSecurity?: InputMaybe; + MaximumPermissionsModerateChatter?: InputMaybe; + MaximumPermissionsModerateNetworkFeeds?: InputMaybe; + MaximumPermissionsModerateNetworkFiles?: InputMaybe; + MaximumPermissionsModerateNetworkMessages?: InputMaybe; + MaximumPermissionsModerateNetworkUsers?: InputMaybe; + MaximumPermissionsModifyAccessAllowPolicies?: InputMaybe; + MaximumPermissionsModifyAccessDenyPolicies?: InputMaybe; + MaximumPermissionsModifyAllData?: InputMaybe; + MaximumPermissionsModifyAllPolicyCenterPolicies?: InputMaybe; + MaximumPermissionsModifyDataClassification?: InputMaybe; + MaximumPermissionsModifyMetadata?: InputMaybe; + MaximumPermissionsMonitorLoginHistory?: InputMaybe; + MaximumPermissionsNativeWebviewScrolling?: InputMaybe; + MaximumPermissionsNewReportBuilder?: InputMaybe; + MaximumPermissionsOutboundMigrationToolsUser?: InputMaybe; + MaximumPermissionsOverrideForecasts?: InputMaybe; + MaximumPermissionsPackaging2?: InputMaybe; + MaximumPermissionsPackaging2Delete?: InputMaybe; + MaximumPermissionsPasswordNeverExpires?: InputMaybe; + MaximumPermissionsPersonalizationDecisioningUser?: InputMaybe; + MaximumPermissionsPersonalizationIntelUser?: InputMaybe; + MaximumPermissionsPersonalizationPlatform?: InputMaybe; + MaximumPermissionsPersonalizedFinanceUserAccess?: InputMaybe; + MaximumPermissionsPreventClassicExperience?: InputMaybe; + MaximumPermissionsPrismBackofficeUser?: InputMaybe; + MaximumPermissionsPrismPlaygroundUser?: InputMaybe; + MaximumPermissionsPrivacyDataAccess?: InputMaybe; + MaximumPermissionsPrmExtIntPrtnrAdminUser?: InputMaybe; + MaximumPermissionsPublishPackaging?: InputMaybe; + MaximumPermissionsQrCodeGeneratorMobilePublisherPlayground?: InputMaybe; + MaximumPermissionsQueryAllFiles?: InputMaybe; + MaximumPermissionsQueryNonVetoedFiles?: InputMaybe; + MaximumPermissionsQuipMetricsAccess?: InputMaybe; + MaximumPermissionsQuipUserEngagementMetrics?: InputMaybe; + MaximumPermissionsReassignOrchestrationWorkItems?: InputMaybe; + MaximumPermissionsRegrelloUser?: InputMaybe; + MaximumPermissionsRemoveDirectMessageMembers?: InputMaybe; + MaximumPermissionsResetPasswords?: InputMaybe; + MaximumPermissionsRunFlow?: InputMaybe; + MaximumPermissionsRunReports?: InputMaybe; + MaximumPermissionsSalesInsightsUser?: InputMaybe; + MaximumPermissionsSandboxTestingInCommunityApp?: InputMaybe; + MaximumPermissionsScheduleJob?: InputMaybe; + MaximumPermissionsScheduleReports?: InputMaybe; + MaximumPermissionsSegmentIntelligenceUser?: InputMaybe; + MaximumPermissionsSelectFilesFromSalesforce?: InputMaybe; + MaximumPermissionsSendAnnouncementEmails?: InputMaybe; + MaximumPermissionsSendCustomNotifications?: InputMaybe; + MaximumPermissionsSendSitRequests?: InputMaybe; + MaximumPermissionsShareFilesWithNetworks?: InputMaybe; + MaximumPermissionsShowCompanyNameAsUserBadge?: InputMaybe; + MaximumPermissionsSimpleCsvDataImportUser?: InputMaybe; + MaximumPermissionsSkipIdentityConfirmation?: InputMaybe; + MaximumPermissionsSolutionImport?: InputMaybe; + MaximumPermissionsStageManagementDesignUser?: InputMaybe; + MaximumPermissionsSubscribeDashboardRolesGrps?: InputMaybe; + MaximumPermissionsSubscribeDashboardToOtherUsers?: InputMaybe; + MaximumPermissionsSubscribeReportRolesGrps?: InputMaybe; + MaximumPermissionsSubscribeReportToOtherUsers?: InputMaybe; + MaximumPermissionsSubscribeReportsRunAsUser?: InputMaybe; + MaximumPermissionsSubscribeToLightningDashboards?: InputMaybe; + MaximumPermissionsSubscribeToLightningReports?: InputMaybe; + MaximumPermissionsTerritoryOperations?: InputMaybe; + MaximumPermissionsTraceXdsQueries?: InputMaybe; + MaximumPermissionsTransactionalEmailSend?: InputMaybe; + MaximumPermissionsTransferAnyCase?: InputMaybe; + MaximumPermissionsTransferAnyEntity?: InputMaybe; + MaximumPermissionsTransferAnyLead?: InputMaybe; + MaximumPermissionsTwoFactorApi?: InputMaybe; + MaximumPermissionsUpdateReportTypeReferences?: InputMaybe; + MaximumPermissionsUseAnyApiAuth?: InputMaybe; + MaximumPermissionsUseAssistantDialog?: InputMaybe; + MaximumPermissionsUseMySearch?: InputMaybe; + MaximumPermissionsUseQuerySuggestions?: InputMaybe; + MaximumPermissionsUseRestrictedTheme?: InputMaybe; + MaximumPermissionsUseServicePartReturn?: InputMaybe; + MaximumPermissionsUseSetupWithAgentforce?: InputMaybe; + MaximumPermissionsUseTeamReassignWizards?: InputMaybe; + MaximumPermissionsUseTeamsForEmployee?: InputMaybe; + MaximumPermissionsUseTeamsForItSrvcs?: InputMaybe; + MaximumPermissionsUseWebLink?: InputMaybe; + MaximumPermissionsUserCanDeployStore?: InputMaybe; + MaximumPermissionsUserInteractionInsights?: InputMaybe; + MaximumPermissionsViewAccessPolicies?: InputMaybe; + MaximumPermissionsViewAllActivities?: InputMaybe; + MaximumPermissionsViewAllCustomSettings?: InputMaybe; + MaximumPermissionsViewAllData?: InputMaybe; + MaximumPermissionsViewAllFieldsGlobal?: InputMaybe; + MaximumPermissionsViewAllForecasts?: InputMaybe; + MaximumPermissionsViewAllForeignKeyNames?: InputMaybe; + MaximumPermissionsViewAllPolicyCenterPolicies?: InputMaybe; + MaximumPermissionsViewAllProfiles?: InputMaybe; + MaximumPermissionsViewAllUsers?: InputMaybe; + MaximumPermissionsViewApiNamedQueries?: InputMaybe; + MaximumPermissionsViewClientSecret?: InputMaybe; + MaximumPermissionsViewContent?: InputMaybe; + MaximumPermissionsViewContentTaxonomy?: InputMaybe; + MaximumPermissionsViewCustomerSentiment?: InputMaybe; + MaximumPermissionsViewDataAssessment?: InputMaybe; + MaximumPermissionsViewDataCategories?: InputMaybe; + MaximumPermissionsViewDeveloperName?: InputMaybe; + MaximumPermissionsViewEncryptedData?: InputMaybe; + MaximumPermissionsViewEventLogFiles?: InputMaybe; + MaximumPermissionsViewGlobalHeader?: InputMaybe; + MaximumPermissionsViewHealthCheck?: InputMaybe; + MaximumPermissionsViewHelpLink?: InputMaybe; + MaximumPermissionsViewLicenseUtilization?: InputMaybe; + MaximumPermissionsViewMyTeamsDashboards?: InputMaybe; + MaximumPermissionsViewOrchestrationsInAutomApp?: InputMaybe; + MaximumPermissionsViewPrivateStaticResources?: InputMaybe; + MaximumPermissionsViewPublicCapstoneFolders?: InputMaybe; + MaximumPermissionsViewPublicDashboards?: InputMaybe; + MaximumPermissionsViewPublicReports?: InputMaybe; + MaximumPermissionsViewRecommendations?: InputMaybe; + MaximumPermissionsViewRestrictionAndScopingRules?: InputMaybe; + MaximumPermissionsViewRoles?: InputMaybe; + MaximumPermissionsViewSetup?: InputMaybe; + MaximumPermissionsViewTrustMeasures?: InputMaybe; + MaximumPermissionsViewUserPII?: InputMaybe; + MaximumPermissionsYourAccountCDAPublishEvents?: InputMaybe; + MigratableLicenses?: InputMaybe; + PermissionSetLicenseKey?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalLicenses?: InputMaybe; + UsedLicenses?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PermissionSet_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + HasActivationRequired?: InputMaybe; + Id?: InputMaybe; + IsCustom?: InputMaybe; + IsOwnedByProfile?: InputMaybe; + Label?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + License?: InputMaybe; + LicenseId?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + PermissionSetGroup?: InputMaybe; + PermissionSetGroupId?: InputMaybe; + PermissionsAcceptInboundBundling?: InputMaybe; + PermissionsAccessBankingRelationshipAssistance?: InputMaybe; + PermissionsAccessBankingServiceAgent?: InputMaybe; + PermissionsAccessCMC?: InputMaybe; + PermissionsAccessContentBuilder?: InputMaybe; + PermissionsAccessDisputePrompts?: InputMaybe; + PermissionsAccessOrchestrationObjects?: InputMaybe; + PermissionsAccessPolicyAgent?: InputMaybe; + PermissionsAccessServiceEinstein?: InputMaybe; + PermissionsAccessSfDrive?: InputMaybe; + PermissionsAccessToComplaintAgent?: InputMaybe; + PermissionsAccessToComplaintMgmt?: InputMaybe; + PermissionsAccessToDisputeManagement?: InputMaybe; + PermissionsAccessToServiceProcess?: InputMaybe; + PermissionsAccessWealthAdvisorAgent?: InputMaybe; + PermissionsAccountSwitcherUser?: InputMaybe; + PermissionsActivateContract?: InputMaybe; + PermissionsActivateOrder?: InputMaybe; + PermissionsActivateSystemModeFlows?: InputMaybe; + PermissionsActivitiesAccess?: InputMaybe; + PermissionsAddDirectMessageMembers?: InputMaybe; + PermissionsAdvancedCsvDataImportUser?: InputMaybe; + PermissionsAgentforceServiceAgentUser?: InputMaybe; + PermissionsAllowEmailIC?: InputMaybe; + PermissionsAllowLightningLogin?: InputMaybe; + PermissionsAllowViewEditConvertedLeads?: InputMaybe; + PermissionsApexRestServices?: InputMaybe; + PermissionsApiEnabled?: InputMaybe; + PermissionsApiUserOnly?: InputMaybe; + PermissionsAppFrameworkManageApp?: InputMaybe; + PermissionsAppFrameworkManageTemplate?: InputMaybe; + PermissionsAppFrameworkViewApp?: InputMaybe; + PermissionsApprovalAdmin?: InputMaybe; + PermissionsApprovalDesigner?: InputMaybe; + PermissionsAssignPermissionSets?: InputMaybe; + PermissionsAssignTopics?: InputMaybe; + PermissionsAttributionModelUser?: InputMaybe; + PermissionsAuthorApex?: InputMaybe; + PermissionsB2BMarketingAnalyticsUser?: InputMaybe; + PermissionsBulkApiHardDelete?: InputMaybe; + PermissionsBypassMFAForUiLogins?: InputMaybe; + PermissionsCMSECEAuthoringAccess?: InputMaybe; + PermissionsCampaignInfluence2?: InputMaybe; + PermissionsCanApproveFeedPost?: InputMaybe; + PermissionsCanApproveUninstalledApps?: InputMaybe; + PermissionsCanDoActAsUser?: InputMaybe; + PermissionsCanEditPrompts?: InputMaybe; + PermissionsCanInsertFeedSystemFields?: InputMaybe; + PermissionsCanTranslateScrt2Conversation?: InputMaybe; + PermissionsCanUpdateEmailMessage?: InputMaybe; + PermissionsCanUseNewDashboardBuilder?: InputMaybe; + PermissionsCanVerifyComment?: InputMaybe; + PermissionsCanWriteWithAiScrt2Conversation?: InputMaybe; + PermissionsCdcReportingCreateReports?: InputMaybe; + PermissionsCdcReportingManageFolders?: InputMaybe; + PermissionsCdcReportingViewReports?: InputMaybe; + PermissionsChangeDashboardColors?: InputMaybe; + PermissionsChatterComposeUiCodesnippet?: InputMaybe; + PermissionsChatterEditOwnPost?: InputMaybe; + PermissionsChatterEditOwnRecordPost?: InputMaybe; + PermissionsChatterFileLink?: InputMaybe; + PermissionsChatterInternalUser?: InputMaybe; + PermissionsChatterInviteExternalUsers?: InputMaybe; + PermissionsChatterOwnGroups?: InputMaybe; + PermissionsClientSecretRotation?: InputMaybe; + PermissionsCloseConversations?: InputMaybe; + PermissionsConfigCustomRecs?: InputMaybe; + PermissionsConfigureDataspaceScope?: InputMaybe; + PermissionsConnectOrgToEnvironmentHub?: InputMaybe; + PermissionsConsentApiUpdate?: InputMaybe; + PermissionsContentAdministrator?: InputMaybe; + PermissionsContentHubUser?: InputMaybe; + PermissionsContentWorkspaces?: InputMaybe; + PermissionsConvertLeads?: InputMaybe; + PermissionsCreateCustomizeDashboards?: InputMaybe; + PermissionsCreateCustomizeFilters?: InputMaybe; + PermissionsCreateCustomizeReports?: InputMaybe; + PermissionsCreateDashboardFolders?: InputMaybe; + PermissionsCreateLtngTempFolder?: InputMaybe; + PermissionsCreateLtngTempInPub?: InputMaybe; + PermissionsCreatePackaging?: InputMaybe; + PermissionsCreateReportFolders?: InputMaybe; + PermissionsCreateReportInLightning?: InputMaybe; + PermissionsCreateTopics?: InputMaybe; + PermissionsCreateWorkBadgeDefinition?: InputMaybe; + PermissionsCreateWorkspaces?: InputMaybe; + PermissionsCustomAppsOnFSMobile?: InputMaybe; + PermissionsCustomMobileAppsAccess?: InputMaybe; + PermissionsCustomSidebarOnAllPages?: InputMaybe; + PermissionsCustomizeApplication?: InputMaybe; + PermissionsDataExport?: InputMaybe; + PermissionsDelegatedTwoFactor?: InputMaybe; + PermissionsDeleteActivatedContract?: InputMaybe; + PermissionsDeleteCrMemoAndInvoice?: InputMaybe; + PermissionsDeleteSalesforceFiles?: InputMaybe; + PermissionsDeleteTopics?: InputMaybe; + PermissionsDigitalLendingAdminUser?: InputMaybe; + PermissionsDigitalLendingEditReadOnly?: InputMaybe; + PermissionsDigitalLendingUser?: InputMaybe; + PermissionsDigitalLendingWorkbench?: InputMaybe; + PermissionsDistributeFromPersWksp?: InputMaybe; + PermissionsDownloadMaliciousFiles?: InputMaybe; + PermissionsDownloadPackageVersionZips?: InputMaybe; + PermissionsEditActivatedOrders?: InputMaybe; + PermissionsEditBillingInfo?: InputMaybe; + PermissionsEditBrandTemplates?: InputMaybe; + PermissionsEditCaseComments?: InputMaybe; + PermissionsEditEvent?: InputMaybe; + PermissionsEditHtmlTemplates?: InputMaybe; + PermissionsEditMyDashboards?: InputMaybe; + PermissionsEditMyReports?: InputMaybe; + PermissionsEditOppLineItemUnitPrice?: InputMaybe; + PermissionsEditPublicDocuments?: InputMaybe; + PermissionsEditPublicFilters?: InputMaybe; + PermissionsEditPublicTemplates?: InputMaybe; + PermissionsEditReadonlyFields?: InputMaybe; + PermissionsEditTask?: InputMaybe; + PermissionsEditTopics?: InputMaybe; + PermissionsEmailAdministration?: InputMaybe; + PermissionsEmailMass?: InputMaybe; + PermissionsEmailSingle?: InputMaybe; + PermissionsEmailTemplateManagement?: InputMaybe; + PermissionsEnableBCTransactionPolling?: InputMaybe; + PermissionsEnableCommunityAppLauncher?: InputMaybe; + PermissionsEnableIPFSUpload?: InputMaybe; + PermissionsEnableNotifications?: InputMaybe; + PermissionsEngagementConfigUser?: InputMaybe; + PermissionsEnhancedSalesMobileExp?: InputMaybe; + PermissionsExportReport?: InputMaybe; + PermissionsExternalClientAppAdmin?: InputMaybe; + PermissionsExternalClientAppDeveloper?: InputMaybe; + PermissionsExternalClientAppViewer?: InputMaybe; + PermissionsFSCArcGraphCommunityUser?: InputMaybe; + PermissionsFeedPinning?: InputMaybe; + PermissionsFlowUFLRequired?: InputMaybe; + PermissionsForceTwoFactor?: InputMaybe; + PermissionsFreezeUsers?: InputMaybe; + PermissionsGiveRecognitionBadge?: InputMaybe; + PermissionsGovernNetworks?: InputMaybe; + PermissionsGrantOutboundBundling?: InputMaybe; + PermissionsHasUnlimitedNBAExecutions?: InputMaybe; + PermissionsHeadlessCMSAccess?: InputMaybe; + PermissionsHeadlessPublishNudges?: InputMaybe; + PermissionsHideReadByList?: InputMaybe; + PermissionsIdentityConnect?: InputMaybe; + PermissionsIdentityEnabled?: InputMaybe; + PermissionsImportCustomObjects?: InputMaybe; + PermissionsImportLeads?: InputMaybe; + PermissionsImportPersonal?: InputMaybe; + PermissionsInboundMigrationToolsUser?: InputMaybe; + PermissionsInstallPackaging?: InputMaybe; + PermissionsIntelligentDocumentProcessing?: InputMaybe; + PermissionsIsSsoEnabled?: InputMaybe; + PermissionsIsotopeAccess?: InputMaybe; + PermissionsIsotopeCToCUser?: InputMaybe; + PermissionsIsotopeLEX?: InputMaybe; + PermissionsKGERMultiArticlesUser?: InputMaybe; + PermissionsLMEndMessagingSessionUserPerm?: InputMaybe; + PermissionsLMOutboundMessagingUserPerm?: InputMaybe; + PermissionsLightningConsoleAllowedForUser?: InputMaybe; + PermissionsLightningExperienceUser?: InputMaybe; + PermissionsListEmailSend?: InputMaybe; + PermissionsLobbyManagementUserAccess?: InputMaybe; + PermissionsLtngPromoReserved01UserPerm?: InputMaybe; + PermissionsMCPMetadataApi?: InputMaybe; + PermissionsManageAccessPolicies?: InputMaybe; + PermissionsManageAgentforceServiceAgent?: InputMaybe; + PermissionsManageAnalyticSnapshots?: InputMaybe; + PermissionsManageApiNamedQueries?: InputMaybe; + PermissionsManageAuthProviders?: InputMaybe; + PermissionsManageBusinessHourHolidays?: InputMaybe; + PermissionsManageC360AConnections?: InputMaybe; + PermissionsManageCMS?: InputMaybe; + PermissionsManageCallCenters?: InputMaybe; + PermissionsManageCases?: InputMaybe; + PermissionsManageCategories?: InputMaybe; + PermissionsManageCdpMlModels?: InputMaybe; + PermissionsManageCertificates?: InputMaybe; + PermissionsManageCertificatesExpiration?: InputMaybe; + PermissionsManageChatterMessages?: InputMaybe; + PermissionsManageContentPermissions?: InputMaybe; + PermissionsManageContentProperties?: InputMaybe; + PermissionsManageContentTaxonomy?: InputMaybe; + PermissionsManageContentTypes?: InputMaybe; + PermissionsManageCustomDomains?: InputMaybe; + PermissionsManageCustomPermissions?: InputMaybe; + PermissionsManageCustomReportTypes?: InputMaybe; + PermissionsManageDashbdsInPubFolders?: InputMaybe; + PermissionsManageDataCategories?: InputMaybe; + PermissionsManageDataIntegrations?: InputMaybe; + PermissionsManageDataspaceScope?: InputMaybe; + PermissionsManageDynamicDashboards?: InputMaybe; + PermissionsManageEmailClientConfig?: InputMaybe; + PermissionsManageExchangeConfig?: InputMaybe; + PermissionsManageExternalConnections?: InputMaybe; + PermissionsManageFilesAndAttachments?: InputMaybe; + PermissionsManageForecastingCustomData?: InputMaybe; + PermissionsManageHealthCheck?: InputMaybe; + PermissionsManageHerokuAppLink?: InputMaybe; + PermissionsManageHubConnections?: InputMaybe; + PermissionsManageIntegrationConnections?: InputMaybe; + PermissionsManageInteraction?: InputMaybe; + PermissionsManageInternalUsers?: InputMaybe; + PermissionsManageIpAddresses?: InputMaybe; + PermissionsManageLeads?: InputMaybe; + PermissionsManageLoginAccessPolicies?: InputMaybe; + PermissionsManageMaliciousFiles?: InputMaybe; + PermissionsManageMobile?: InputMaybe; + PermissionsManageMobileAppSecurity?: InputMaybe; + PermissionsManageNamedCredentials?: InputMaybe; + PermissionsManageNetworks?: InputMaybe; + PermissionsManageOrchInstsAndWorkItems?: InputMaybe; + PermissionsManageOrchestrationRuns?: InputMaybe; + PermissionsManagePasswordPolicies?: InputMaybe; + PermissionsManageProfilesPermissionsets?: InputMaybe; + PermissionsManagePropositions?: InputMaybe; + PermissionsManagePvtRptsAndDashbds?: InputMaybe; + PermissionsManageQuotas?: InputMaybe; + PermissionsManageRecommendationStrategies?: InputMaybe; + PermissionsManageReleaseUpdates?: InputMaybe; + PermissionsManageRemoteAccess?: InputMaybe; + PermissionsManageReportsInPubFolders?: InputMaybe; + PermissionsManageRoles?: InputMaybe; + PermissionsManageSessionPermissionSets?: InputMaybe; + PermissionsManageSharedListViews?: InputMaybe; + PermissionsManageSharing?: InputMaybe; + PermissionsManageSocialPosting?: InputMaybe; + PermissionsManageSolutions?: InputMaybe; + PermissionsManageSubscriptions?: InputMaybe; + PermissionsManageSurveys?: InputMaybe; + PermissionsManageSynonyms?: InputMaybe; + PermissionsManageTrustMeasures?: InputMaybe; + PermissionsManageTwoFactor?: InputMaybe; + PermissionsManageUnlistedGroups?: InputMaybe; + PermissionsManageUsers?: InputMaybe; + PermissionsMassInlineEdit?: InputMaybe; + PermissionsMeetingEngagementUser?: InputMaybe; + PermissionsMemberSelfServiceAgentAccess?: InputMaybe; + PermissionsMergeTopics?: InputMaybe; + PermissionsMetadataStudioUser?: InputMaybe; + PermissionsMicrobatching?: InputMaybe; + PermissionsMngBenVerfForAssistiveAgnt?: InputMaybe; + PermissionsMobileAppSecurity?: InputMaybe; + PermissionsModerateChatter?: InputMaybe; + PermissionsModerateNetworkFeeds?: InputMaybe; + PermissionsModerateNetworkFiles?: InputMaybe; + PermissionsModerateNetworkMessages?: InputMaybe; + PermissionsModerateNetworkUsers?: InputMaybe; + PermissionsModifyAccessAllowPolicies?: InputMaybe; + PermissionsModifyAccessDenyPolicies?: InputMaybe; + PermissionsModifyAllData?: InputMaybe; + PermissionsModifyAllPolicyCenterPolicies?: InputMaybe; + PermissionsModifyDataClassification?: InputMaybe; + PermissionsModifyMetadata?: InputMaybe; + PermissionsMonitorLoginHistory?: InputMaybe; + PermissionsNativeWebviewScrolling?: InputMaybe; + PermissionsNewReportBuilder?: InputMaybe; + PermissionsOutboundMigrationToolsUser?: InputMaybe; + PermissionsOverrideForecasts?: InputMaybe; + PermissionsPackaging2?: InputMaybe; + PermissionsPackaging2Delete?: InputMaybe; + PermissionsPasswordNeverExpires?: InputMaybe; + PermissionsPersonalizationDecisioningUser?: InputMaybe; + PermissionsPersonalizationIntelUser?: InputMaybe; + PermissionsPersonalizationPlatform?: InputMaybe; + PermissionsPersonalizedFinanceUserAccess?: InputMaybe; + PermissionsPreventClassicExperience?: InputMaybe; + PermissionsPrismBackofficeUser?: InputMaybe; + PermissionsPrismPlaygroundUser?: InputMaybe; + PermissionsPrivacyDataAccess?: InputMaybe; + PermissionsPrmExtIntPrtnrAdminUser?: InputMaybe; + PermissionsPublishPackaging?: InputMaybe; + PermissionsQrCodeGeneratorMobilePublisherPlayground?: InputMaybe; + PermissionsQueryAllFiles?: InputMaybe; + PermissionsQueryNonVetoedFiles?: InputMaybe; + PermissionsQuipMetricsAccess?: InputMaybe; + PermissionsQuipUserEngagementMetrics?: InputMaybe; + PermissionsReassignOrchestrationWorkItems?: InputMaybe; + PermissionsRegrelloUser?: InputMaybe; + PermissionsRemoveDirectMessageMembers?: InputMaybe; + PermissionsResetPasswords?: InputMaybe; + PermissionsRunFlow?: InputMaybe; + PermissionsRunReports?: InputMaybe; + PermissionsSalesInsightsUser?: InputMaybe; + PermissionsSandboxTestingInCommunityApp?: InputMaybe; + PermissionsScheduleJob?: InputMaybe; + PermissionsScheduleReports?: InputMaybe; + PermissionsSegmentIntelligenceUser?: InputMaybe; + PermissionsSelectFilesFromSalesforce?: InputMaybe; + PermissionsSendAnnouncementEmails?: InputMaybe; + PermissionsSendCustomNotifications?: InputMaybe; + PermissionsSendSitRequests?: InputMaybe; + PermissionsShareFilesWithNetworks?: InputMaybe; + PermissionsShowCompanyNameAsUserBadge?: InputMaybe; + PermissionsSimpleCsvDataImportUser?: InputMaybe; + PermissionsSkipIdentityConfirmation?: InputMaybe; + PermissionsSolutionImport?: InputMaybe; + PermissionsStageManagementDesignUser?: InputMaybe; + PermissionsSubscribeDashboardRolesGrps?: InputMaybe; + PermissionsSubscribeDashboardToOtherUsers?: InputMaybe; + PermissionsSubscribeReportRolesGrps?: InputMaybe; + PermissionsSubscribeReportToOtherUsers?: InputMaybe; + PermissionsSubscribeReportsRunAsUser?: InputMaybe; + PermissionsSubscribeToLightningDashboards?: InputMaybe; + PermissionsSubscribeToLightningReports?: InputMaybe; + PermissionsTerritoryOperations?: InputMaybe; + PermissionsTraceXdsQueries?: InputMaybe; + PermissionsTransactionalEmailSend?: InputMaybe; + PermissionsTransferAnyCase?: InputMaybe; + PermissionsTransferAnyEntity?: InputMaybe; + PermissionsTransferAnyLead?: InputMaybe; + PermissionsTwoFactorApi?: InputMaybe; + PermissionsUpdateReportTypeReferences?: InputMaybe; + PermissionsUseAnyApiAuth?: InputMaybe; + PermissionsUseAssistantDialog?: InputMaybe; + PermissionsUseMySearch?: InputMaybe; + PermissionsUseQuerySuggestions?: InputMaybe; + PermissionsUseRestrictedTheme?: InputMaybe; + PermissionsUseServicePartReturn?: InputMaybe; + PermissionsUseSetupWithAgentforce?: InputMaybe; + PermissionsUseTeamReassignWizards?: InputMaybe; + PermissionsUseTeamsForEmployee?: InputMaybe; + PermissionsUseTeamsForItSrvcs?: InputMaybe; + PermissionsUseWebLink?: InputMaybe; + PermissionsUserCanDeployStore?: InputMaybe; + PermissionsUserInteractionInsights?: InputMaybe; + PermissionsViewAccessPolicies?: InputMaybe; + PermissionsViewAllActivities?: InputMaybe; + PermissionsViewAllCustomSettings?: InputMaybe; + PermissionsViewAllData?: InputMaybe; + PermissionsViewAllFieldsGlobal?: InputMaybe; + PermissionsViewAllForecasts?: InputMaybe; + PermissionsViewAllForeignKeyNames?: InputMaybe; + PermissionsViewAllPolicyCenterPolicies?: InputMaybe; + PermissionsViewAllProfiles?: InputMaybe; + PermissionsViewAllUsers?: InputMaybe; + PermissionsViewApiNamedQueries?: InputMaybe; + PermissionsViewClientSecret?: InputMaybe; + PermissionsViewContent?: InputMaybe; + PermissionsViewContentTaxonomy?: InputMaybe; + PermissionsViewCustomerSentiment?: InputMaybe; + PermissionsViewDataAssessment?: InputMaybe; + PermissionsViewDataCategories?: InputMaybe; + PermissionsViewDeveloperName?: InputMaybe; + PermissionsViewEncryptedData?: InputMaybe; + PermissionsViewEventLogFiles?: InputMaybe; + PermissionsViewGlobalHeader?: InputMaybe; + PermissionsViewHealthCheck?: InputMaybe; + PermissionsViewHelpLink?: InputMaybe; + PermissionsViewLicenseUtilization?: InputMaybe; + PermissionsViewMyTeamsDashboards?: InputMaybe; + PermissionsViewOrchestrationsInAutomApp?: InputMaybe; + PermissionsViewPrivateStaticResources?: InputMaybe; + PermissionsViewPublicCapstoneFolders?: InputMaybe; + PermissionsViewPublicDashboards?: InputMaybe; + PermissionsViewPublicReports?: InputMaybe; + PermissionsViewRecommendations?: InputMaybe; + PermissionsViewRestrictionAndScopingRules?: InputMaybe; + PermissionsViewRoles?: InputMaybe; + PermissionsViewSetup?: InputMaybe; + PermissionsViewTrustMeasures?: InputMaybe; + PermissionsViewUserPII?: InputMaybe; + PermissionsYourAccountCDAPublishEvents?: InputMaybe; + Profile?: InputMaybe; + ProfileId?: InputMaybe; + PsgCount?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PermissionSet_License_Filters = { + Name?: InputMaybe; + PermissionSetLicense?: InputMaybe; +}; + +export type PhoneNumberOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type PicklistOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type Pricebook2History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Pricebook2?: InputMaybe; + Pricebook2Id?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Pricebook2_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsArchived?: InputMaybe; + IsDeleted?: InputMaybe; + IsStandard?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PricebookEntryHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + PricebookEntry?: InputMaybe; + PricebookEntryId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type PricebookEntry_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsArchived?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Pricebook2?: InputMaybe; + Pricebook2Id?: InputMaybe; + Product2?: InputMaybe; + Product2Id?: InputMaybe; + ProductCode?: InputMaybe; + SystemModstamp?: InputMaybe; + UnitPrice?: InputMaybe; + UseStandardPrice?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProcessDefinition_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LockType?: InputMaybe; + Name?: InputMaybe; + State?: InputMaybe; + SystemModstamp?: InputMaybe; + TableEnumOrId?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProcessException_AttachedTo_Filters = { + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lease__c?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Order?: InputMaybe; + OrderItem?: InputMaybe; + Payment__c?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; +}; + +export type ProcessException_Filter = { + Asset?: InputMaybe; + AssetId?: InputMaybe; + AttachedTo?: InputMaybe; + AttachedToId?: InputMaybe; + Case?: InputMaybe; + CaseId?: InputMaybe; + Category?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + ExternalReference?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Message?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Priority?: InputMaybe; + ProcessExceptionNumber?: InputMaybe; + Severity?: InputMaybe; + SeverityCategory?: InputMaybe; + Status?: InputMaybe; + StatusCategory?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProcessException_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type ProcessInstance_Filter = { + CompletedDate?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ElapsedTimeInDays?: InputMaybe; + ElapsedTimeInHours?: InputMaybe; + ElapsedTimeInMinutes?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActor?: InputMaybe; + LastActorId?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + ProcessDefinition?: InputMaybe; + ProcessDefinitionId?: InputMaybe; + Status?: InputMaybe; + SubmittedBy?: InputMaybe; + SubmittedById?: InputMaybe; + SystemModstamp?: InputMaybe; + TargetObject?: InputMaybe; + TargetObjectId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProcessInstance_TargetObject_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + AnalyticsUserAttrFuncTkn?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AssociatedLocation?: InputMaybe; + AuthorizationForm?: InputMaybe; + AuthorizationFormConsent?: InputMaybe; + AuthorizationFormDataUse?: InputMaybe; + AuthorizationFormText?: InputMaybe; + BusinessBrand?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscription?: InputMaybe; + CommSubscriptionChannelType?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + CommSubscriptionTiming?: InputMaybe; + Contact?: InputMaybe; + ContactPointAddress?: InputMaybe; + ContactPointConsent?: InputMaybe; + ContactPointEmail?: InputMaybe; + ContactPointPhone?: InputMaybe; + ContactPointTypeConsent?: InputMaybe; + Contract?: InputMaybe; + Customer?: InputMaybe; + DataUseLegalBasis?: InputMaybe; + DataUsePurpose?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + DuplicateRecordItem?: InputMaybe; + DuplicateRecordSet?: InputMaybe; + EmailMessage?: InputMaybe; + EngagementChannelType?: InputMaybe; + FlowOrchestrationInstance?: InputMaybe; + FlowOrchestrationVersion?: InputMaybe; + FlowOrchestrationWorkItem?: InputMaybe; + Image?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + LocationTrustMeasure?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + OrgMetricScanSummary?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillUser?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + ReportHierarchyObjectField?: InputMaybe; + SecurityHealthCheckAlertRecipient?: InputMaybe; + SecurityHealthCheckResult?: InputMaybe; + Seller?: InputMaybe; + SocialPost?: InputMaybe; + StreamingChannel?: InputMaybe; + TableauHostMapping?: InputMaybe; + Tenant__c?: InputMaybe; + UnstructuredStorageSpace?: InputMaybe; + UserLocalWebServerIdentity?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type Product2History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Product2?: InputMaybe; + Product2Id?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Product2_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DisplayUrl?: InputMaybe; + ExternalDataSourceId?: InputMaybe; + ExternalId?: InputMaybe; + Family?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsArchived?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + ProductCode?: InputMaybe; + QuantityUnitOfMeasure?: InputMaybe; + StockKeepingUnit?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkillEndorsementHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + ProfileSkillEndorsement?: InputMaybe; + ProfileSkillEndorsementId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkillEndorsement_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + ProfileSkillUser?: InputMaybe; + ProfileSkillUserId?: InputMaybe; + SystemModstamp?: InputMaybe; + User?: InputMaybe; + UserId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkillHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkillUserHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + ProfileSkillUser?: InputMaybe; + ProfileSkillUserId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkillUser_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + EndorsementCount?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + ProfileSkill?: InputMaybe; + ProfileSkillId?: InputMaybe; + SystemModstamp?: InputMaybe; + User?: InputMaybe; + UserId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkill_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + UserCount?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ProfileSkill_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Profile_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultApplicationId?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsSsoEnabled?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + PermissionsAcceptInboundBundling?: InputMaybe; + PermissionsAccessBankingRelationshipAssistance?: InputMaybe; + PermissionsAccessBankingServiceAgent?: InputMaybe; + PermissionsAccessCMC?: InputMaybe; + PermissionsAccessContentBuilder?: InputMaybe; + PermissionsAccessDisputePrompts?: InputMaybe; + PermissionsAccessOrchestrationObjects?: InputMaybe; + PermissionsAccessPolicyAgent?: InputMaybe; + PermissionsAccessServiceEinstein?: InputMaybe; + PermissionsAccessSfDrive?: InputMaybe; + PermissionsAccessToComplaintAgent?: InputMaybe; + PermissionsAccessToComplaintMgmt?: InputMaybe; + PermissionsAccessToDisputeManagement?: InputMaybe; + PermissionsAccessToServiceProcess?: InputMaybe; + PermissionsAccessWealthAdvisorAgent?: InputMaybe; + PermissionsAccountSwitcherUser?: InputMaybe; + PermissionsActivateContract?: InputMaybe; + PermissionsActivateOrder?: InputMaybe; + PermissionsActivateSystemModeFlows?: InputMaybe; + PermissionsActivitiesAccess?: InputMaybe; + PermissionsAddDirectMessageMembers?: InputMaybe; + PermissionsAdvancedCsvDataImportUser?: InputMaybe; + PermissionsAgentforceServiceAgentUser?: InputMaybe; + PermissionsAllowEmailIC?: InputMaybe; + PermissionsAllowLightningLogin?: InputMaybe; + PermissionsAllowViewEditConvertedLeads?: InputMaybe; + PermissionsApexRestServices?: InputMaybe; + PermissionsApiEnabled?: InputMaybe; + PermissionsApiUserOnly?: InputMaybe; + PermissionsAppFrameworkManageApp?: InputMaybe; + PermissionsAppFrameworkManageTemplate?: InputMaybe; + PermissionsAppFrameworkViewApp?: InputMaybe; + PermissionsApprovalAdmin?: InputMaybe; + PermissionsApprovalDesigner?: InputMaybe; + PermissionsAssignPermissionSets?: InputMaybe; + PermissionsAssignTopics?: InputMaybe; + PermissionsAttributionModelUser?: InputMaybe; + PermissionsAuthorApex?: InputMaybe; + PermissionsB2BMarketingAnalyticsUser?: InputMaybe; + PermissionsBulkApiHardDelete?: InputMaybe; + PermissionsBypassMFAForUiLogins?: InputMaybe; + PermissionsCMSECEAuthoringAccess?: InputMaybe; + PermissionsCampaignInfluence2?: InputMaybe; + PermissionsCanApproveFeedPost?: InputMaybe; + PermissionsCanApproveUninstalledApps?: InputMaybe; + PermissionsCanDoActAsUser?: InputMaybe; + PermissionsCanEditPrompts?: InputMaybe; + PermissionsCanInsertFeedSystemFields?: InputMaybe; + PermissionsCanTranslateScrt2Conversation?: InputMaybe; + PermissionsCanUpdateEmailMessage?: InputMaybe; + PermissionsCanUseNewDashboardBuilder?: InputMaybe; + PermissionsCanVerifyComment?: InputMaybe; + PermissionsCanWriteWithAiScrt2Conversation?: InputMaybe; + PermissionsCdcReportingCreateReports?: InputMaybe; + PermissionsCdcReportingManageFolders?: InputMaybe; + PermissionsCdcReportingViewReports?: InputMaybe; + PermissionsChangeDashboardColors?: InputMaybe; + PermissionsChatterComposeUiCodesnippet?: InputMaybe; + PermissionsChatterEditOwnPost?: InputMaybe; + PermissionsChatterEditOwnRecordPost?: InputMaybe; + PermissionsChatterFileLink?: InputMaybe; + PermissionsChatterInternalUser?: InputMaybe; + PermissionsChatterInviteExternalUsers?: InputMaybe; + PermissionsChatterOwnGroups?: InputMaybe; + PermissionsClientSecretRotation?: InputMaybe; + PermissionsCloseConversations?: InputMaybe; + PermissionsConfigCustomRecs?: InputMaybe; + PermissionsConfigureDataspaceScope?: InputMaybe; + PermissionsConnectOrgToEnvironmentHub?: InputMaybe; + PermissionsConsentApiUpdate?: InputMaybe; + PermissionsContentAdministrator?: InputMaybe; + PermissionsContentHubUser?: InputMaybe; + PermissionsContentWorkspaces?: InputMaybe; + PermissionsConvertLeads?: InputMaybe; + PermissionsCreateCustomizeDashboards?: InputMaybe; + PermissionsCreateCustomizeFilters?: InputMaybe; + PermissionsCreateCustomizeReports?: InputMaybe; + PermissionsCreateDashboardFolders?: InputMaybe; + PermissionsCreateLtngTempFolder?: InputMaybe; + PermissionsCreateLtngTempInPub?: InputMaybe; + PermissionsCreateMultiforce?: InputMaybe; + PermissionsCreateReportFolders?: InputMaybe; + PermissionsCreateReportInLightning?: InputMaybe; + PermissionsCreateTopics?: InputMaybe; + PermissionsCreateWorkBadgeDefinition?: InputMaybe; + PermissionsCreateWorkspaces?: InputMaybe; + PermissionsCustomAppsOnFSMobile?: InputMaybe; + PermissionsCustomMobileAppsAccess?: InputMaybe; + PermissionsCustomSidebarOnAllPages?: InputMaybe; + PermissionsCustomizeApplication?: InputMaybe; + PermissionsDataExport?: InputMaybe; + PermissionsDelegatedTwoFactor?: InputMaybe; + PermissionsDeleteActivatedContract?: InputMaybe; + PermissionsDeleteCrMemoAndInvoice?: InputMaybe; + PermissionsDeleteSalesforceFiles?: InputMaybe; + PermissionsDeleteTopics?: InputMaybe; + PermissionsDigitalLendingAdminUser?: InputMaybe; + PermissionsDigitalLendingEditReadOnly?: InputMaybe; + PermissionsDigitalLendingUser?: InputMaybe; + PermissionsDigitalLendingWorkbench?: InputMaybe; + PermissionsDistributeFromPersWksp?: InputMaybe; + PermissionsDownloadMaliciousFiles?: InputMaybe; + PermissionsDownloadPackageVersionZips?: InputMaybe; + PermissionsEditActivatedOrders?: InputMaybe; + PermissionsEditBillingInfo?: InputMaybe; + PermissionsEditBrandTemplates?: InputMaybe; + PermissionsEditCaseComments?: InputMaybe; + PermissionsEditEvent?: InputMaybe; + PermissionsEditHtmlTemplates?: InputMaybe; + PermissionsEditMyDashboards?: InputMaybe; + PermissionsEditMyReports?: InputMaybe; + PermissionsEditOppLineItemUnitPrice?: InputMaybe; + PermissionsEditPublicDocuments?: InputMaybe; + PermissionsEditPublicFilters?: InputMaybe; + PermissionsEditPublicTemplates?: InputMaybe; + PermissionsEditReadonlyFields?: InputMaybe; + PermissionsEditTask?: InputMaybe; + PermissionsEditTopics?: InputMaybe; + PermissionsEmailAdministration?: InputMaybe; + PermissionsEmailMass?: InputMaybe; + PermissionsEmailSingle?: InputMaybe; + PermissionsEmailTemplateManagement?: InputMaybe; + PermissionsEnableBCTransactionPolling?: InputMaybe; + PermissionsEnableCommunityAppLauncher?: InputMaybe; + PermissionsEnableIPFSUpload?: InputMaybe; + PermissionsEnableNotifications?: InputMaybe; + PermissionsEngagementConfigUser?: InputMaybe; + PermissionsEnhancedSalesMobileExp?: InputMaybe; + PermissionsExportReport?: InputMaybe; + PermissionsExternalClientAppAdmin?: InputMaybe; + PermissionsExternalClientAppDeveloper?: InputMaybe; + PermissionsExternalClientAppViewer?: InputMaybe; + PermissionsFSCArcGraphCommunityUser?: InputMaybe; + PermissionsFeedPinning?: InputMaybe; + PermissionsFlowUFLRequired?: InputMaybe; + PermissionsForceTwoFactor?: InputMaybe; + PermissionsFreezeUsers?: InputMaybe; + PermissionsGiveRecognitionBadge?: InputMaybe; + PermissionsGovernNetworks?: InputMaybe; + PermissionsGrantOutboundBundling?: InputMaybe; + PermissionsHasUnlimitedNBAExecutions?: InputMaybe; + PermissionsHeadlessCMSAccess?: InputMaybe; + PermissionsHeadlessPublishNudges?: InputMaybe; + PermissionsHideReadByList?: InputMaybe; + PermissionsIdentityConnect?: InputMaybe; + PermissionsIdentityEnabled?: InputMaybe; + PermissionsImportCustomObjects?: InputMaybe; + PermissionsImportLeads?: InputMaybe; + PermissionsImportPersonal?: InputMaybe; + PermissionsInboundMigrationToolsUser?: InputMaybe; + PermissionsInstallMultiforce?: InputMaybe; + PermissionsIntelligentDocumentProcessing?: InputMaybe; + PermissionsIsSsoEnabled?: InputMaybe; + PermissionsIsotopeAccess?: InputMaybe; + PermissionsIsotopeCToCUser?: InputMaybe; + PermissionsIsotopeLEX?: InputMaybe; + PermissionsKGERMultiArticlesUser?: InputMaybe; + PermissionsLMEndMessagingSessionUserPerm?: InputMaybe; + PermissionsLMOutboundMessagingUserPerm?: InputMaybe; + PermissionsLightningConsoleAllowedForUser?: InputMaybe; + PermissionsLightningExperienceUser?: InputMaybe; + PermissionsListEmailSend?: InputMaybe; + PermissionsLobbyManagementUserAccess?: InputMaybe; + PermissionsLtngPromoReserved01UserPerm?: InputMaybe; + PermissionsMCPMetadataApi?: InputMaybe; + PermissionsManageAccessPolicies?: InputMaybe; + PermissionsManageAgentforceServiceAgent?: InputMaybe; + PermissionsManageAnalyticSnapshots?: InputMaybe; + PermissionsManageApiNamedQueries?: InputMaybe; + PermissionsManageAuthProviders?: InputMaybe; + PermissionsManageBusinessHourHolidays?: InputMaybe; + PermissionsManageC360AConnections?: InputMaybe; + PermissionsManageCMS?: InputMaybe; + PermissionsManageCallCenters?: InputMaybe; + PermissionsManageCases?: InputMaybe; + PermissionsManageCategories?: InputMaybe; + PermissionsManageCdpMlModels?: InputMaybe; + PermissionsManageCertificates?: InputMaybe; + PermissionsManageCertificatesExpiration?: InputMaybe; + PermissionsManageChatterMessages?: InputMaybe; + PermissionsManageContentPermissions?: InputMaybe; + PermissionsManageContentProperties?: InputMaybe; + PermissionsManageContentTaxonomy?: InputMaybe; + PermissionsManageContentTypes?: InputMaybe; + PermissionsManageCustomDomains?: InputMaybe; + PermissionsManageCustomPermissions?: InputMaybe; + PermissionsManageCustomReportTypes?: InputMaybe; + PermissionsManageDashbdsInPubFolders?: InputMaybe; + PermissionsManageDataCategories?: InputMaybe; + PermissionsManageDataIntegrations?: InputMaybe; + PermissionsManageDataspaceScope?: InputMaybe; + PermissionsManageDynamicDashboards?: InputMaybe; + PermissionsManageEmailClientConfig?: InputMaybe; + PermissionsManageExchangeConfig?: InputMaybe; + PermissionsManageExternalConnections?: InputMaybe; + PermissionsManageFilesAndAttachments?: InputMaybe; + PermissionsManageForecastingCustomData?: InputMaybe; + PermissionsManageHealthCheck?: InputMaybe; + PermissionsManageHerokuAppLink?: InputMaybe; + PermissionsManageHubConnections?: InputMaybe; + PermissionsManageIntegrationConnections?: InputMaybe; + PermissionsManageInteraction?: InputMaybe; + PermissionsManageInternalUsers?: InputMaybe; + PermissionsManageIpAddresses?: InputMaybe; + PermissionsManageLeads?: InputMaybe; + PermissionsManageLoginAccessPolicies?: InputMaybe; + PermissionsManageMaliciousFiles?: InputMaybe; + PermissionsManageMobile?: InputMaybe; + PermissionsManageMobileAppSecurity?: InputMaybe; + PermissionsManageNamedCredentials?: InputMaybe; + PermissionsManageNetworks?: InputMaybe; + PermissionsManageOrchInstsAndWorkItems?: InputMaybe; + PermissionsManageOrchestrationRuns?: InputMaybe; + PermissionsManagePasswordPolicies?: InputMaybe; + PermissionsManageProfilesPermissionsets?: InputMaybe; + PermissionsManagePropositions?: InputMaybe; + PermissionsManagePvtRptsAndDashbds?: InputMaybe; + PermissionsManageQuotas?: InputMaybe; + PermissionsManageRecommendationStrategies?: InputMaybe; + PermissionsManageReleaseUpdates?: InputMaybe; + PermissionsManageRemoteAccess?: InputMaybe; + PermissionsManageReportsInPubFolders?: InputMaybe; + PermissionsManageRoles?: InputMaybe; + PermissionsManageSessionPermissionSets?: InputMaybe; + PermissionsManageSharedListViews?: InputMaybe; + PermissionsManageSharing?: InputMaybe; + PermissionsManageSocialPosting?: InputMaybe; + PermissionsManageSolutions?: InputMaybe; + PermissionsManageSubscriptions?: InputMaybe; + PermissionsManageSurveys?: InputMaybe; + PermissionsManageSynonyms?: InputMaybe; + PermissionsManageTrustMeasures?: InputMaybe; + PermissionsManageTwoFactor?: InputMaybe; + PermissionsManageUnlistedGroups?: InputMaybe; + PermissionsManageUsers?: InputMaybe; + PermissionsMassInlineEdit?: InputMaybe; + PermissionsMeetingEngagementUser?: InputMaybe; + PermissionsMemberSelfServiceAgentAccess?: InputMaybe; + PermissionsMergeTopics?: InputMaybe; + PermissionsMetadataStudioUser?: InputMaybe; + PermissionsMicrobatching?: InputMaybe; + PermissionsMngBenVerfForAssistiveAgnt?: InputMaybe; + PermissionsMobileAppSecurity?: InputMaybe; + PermissionsModerateChatter?: InputMaybe; + PermissionsModerateNetworkFeeds?: InputMaybe; + PermissionsModerateNetworkFiles?: InputMaybe; + PermissionsModerateNetworkMessages?: InputMaybe; + PermissionsModerateNetworkUsers?: InputMaybe; + PermissionsModifyAccessAllowPolicies?: InputMaybe; + PermissionsModifyAccessDenyPolicies?: InputMaybe; + PermissionsModifyAllData?: InputMaybe; + PermissionsModifyAllPolicyCenterPolicies?: InputMaybe; + PermissionsModifyDataClassification?: InputMaybe; + PermissionsModifyMetadata?: InputMaybe; + PermissionsMonitorLoginHistory?: InputMaybe; + PermissionsNativeWebviewScrolling?: InputMaybe; + PermissionsNewReportBuilder?: InputMaybe; + PermissionsOutboundMigrationToolsUser?: InputMaybe; + PermissionsOverrideForecasts?: InputMaybe; + PermissionsPackaging2?: InputMaybe; + PermissionsPackaging2Delete?: InputMaybe; + PermissionsPasswordNeverExpires?: InputMaybe; + PermissionsPersonalizationDecisioningUser?: InputMaybe; + PermissionsPersonalizationIntelUser?: InputMaybe; + PermissionsPersonalizationPlatform?: InputMaybe; + PermissionsPersonalizedFinanceUserAccess?: InputMaybe; + PermissionsPreventClassicExperience?: InputMaybe; + PermissionsPrismBackofficeUser?: InputMaybe; + PermissionsPrismPlaygroundUser?: InputMaybe; + PermissionsPrivacyDataAccess?: InputMaybe; + PermissionsPrmExtIntPrtnrAdminUser?: InputMaybe; + PermissionsPublishMultiforce?: InputMaybe; + PermissionsQrCodeGeneratorMobilePublisherPlayground?: InputMaybe; + PermissionsQueryAllFiles?: InputMaybe; + PermissionsQueryNonVetoedFiles?: InputMaybe; + PermissionsQuipMetricsAccess?: InputMaybe; + PermissionsQuipUserEngagementMetrics?: InputMaybe; + PermissionsReassignOrchestrationWorkItems?: InputMaybe; + PermissionsRegrelloUser?: InputMaybe; + PermissionsRemoveDirectMessageMembers?: InputMaybe; + PermissionsResetPasswords?: InputMaybe; + PermissionsRunFlow?: InputMaybe; + PermissionsRunReports?: InputMaybe; + PermissionsSalesInsightsUser?: InputMaybe; + PermissionsSandboxTestingInCommunityApp?: InputMaybe; + PermissionsScheduleJob?: InputMaybe; + PermissionsScheduleReports?: InputMaybe; + PermissionsSegmentIntelligenceUser?: InputMaybe; + PermissionsSelectFilesFromSalesforce?: InputMaybe; + PermissionsSendAnnouncementEmails?: InputMaybe; + PermissionsSendCustomNotifications?: InputMaybe; + PermissionsSendSitRequests?: InputMaybe; + PermissionsShareFilesWithNetworks?: InputMaybe; + PermissionsShowCompanyNameAsUserBadge?: InputMaybe; + PermissionsSimpleCsvDataImportUser?: InputMaybe; + PermissionsSkipIdentityConfirmation?: InputMaybe; + PermissionsSolutionImport?: InputMaybe; + PermissionsStageManagementDesignUser?: InputMaybe; + PermissionsSubscribeDashboardRolesGrps?: InputMaybe; + PermissionsSubscribeDashboardToOtherUsers?: InputMaybe; + PermissionsSubscribeReportRolesGrps?: InputMaybe; + PermissionsSubscribeReportToOtherUsers?: InputMaybe; + PermissionsSubscribeReportsRunAsUser?: InputMaybe; + PermissionsSubscribeToLightningDashboards?: InputMaybe; + PermissionsSubscribeToLightningReports?: InputMaybe; + PermissionsTerritoryOperations?: InputMaybe; + PermissionsTraceXdsQueries?: InputMaybe; + PermissionsTransactionalEmailSend?: InputMaybe; + PermissionsTransferAnyCase?: InputMaybe; + PermissionsTransferAnyEntity?: InputMaybe; + PermissionsTransferAnyLead?: InputMaybe; + PermissionsTwoFactorApi?: InputMaybe; + PermissionsUpdateReportTypeReferences?: InputMaybe; + PermissionsUseAnyApiAuth?: InputMaybe; + PermissionsUseAssistantDialog?: InputMaybe; + PermissionsUseMySearch?: InputMaybe; + PermissionsUseQuerySuggestions?: InputMaybe; + PermissionsUseRestrictedTheme?: InputMaybe; + PermissionsUseServicePartReturn?: InputMaybe; + PermissionsUseSetupWithAgentforce?: InputMaybe; + PermissionsUseTeamReassignWizards?: InputMaybe; + PermissionsUseTeamsForEmployee?: InputMaybe; + PermissionsUseTeamsForItSrvcs?: InputMaybe; + PermissionsUseWebLink?: InputMaybe; + PermissionsUserCanDeployStore?: InputMaybe; + PermissionsUserInteractionInsights?: InputMaybe; + PermissionsViewAccessPolicies?: InputMaybe; + PermissionsViewAllActivities?: InputMaybe; + PermissionsViewAllCustomSettings?: InputMaybe; + PermissionsViewAllData?: InputMaybe; + PermissionsViewAllFieldsGlobal?: InputMaybe; + PermissionsViewAllForecasts?: InputMaybe; + PermissionsViewAllForeignKeyNames?: InputMaybe; + PermissionsViewAllPolicyCenterPolicies?: InputMaybe; + PermissionsViewAllProfiles?: InputMaybe; + PermissionsViewAllUsers?: InputMaybe; + PermissionsViewApiNamedQueries?: InputMaybe; + PermissionsViewClientSecret?: InputMaybe; + PermissionsViewContent?: InputMaybe; + PermissionsViewContentTaxonomy?: InputMaybe; + PermissionsViewCustomerSentiment?: InputMaybe; + PermissionsViewDataAssessment?: InputMaybe; + PermissionsViewDataCategories?: InputMaybe; + PermissionsViewDeveloperName?: InputMaybe; + PermissionsViewEncryptedData?: InputMaybe; + PermissionsViewEventLogFiles?: InputMaybe; + PermissionsViewGlobalHeader?: InputMaybe; + PermissionsViewHealthCheck?: InputMaybe; + PermissionsViewHelpLink?: InputMaybe; + PermissionsViewLicenseUtilization?: InputMaybe; + PermissionsViewMyTeamsDashboards?: InputMaybe; + PermissionsViewOrchestrationsInAutomApp?: InputMaybe; + PermissionsViewPrivateStaticResources?: InputMaybe; + PermissionsViewPublicCapstoneFolders?: InputMaybe; + PermissionsViewPublicDashboards?: InputMaybe; + PermissionsViewPublicReports?: InputMaybe; + PermissionsViewRecommendations?: InputMaybe; + PermissionsViewRestrictionAndScopingRules?: InputMaybe; + PermissionsViewRoles?: InputMaybe; + PermissionsViewSetup?: InputMaybe; + PermissionsViewTrustMeasures?: InputMaybe; + PermissionsViewUserPII?: InputMaybe; + PermissionsYourAccountCDAPublishEvents?: InputMaybe; + SharingType?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + UserLicenseId?: InputMaybe; + UserType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Profile_OrderBy = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultApplicationId?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsSsoEnabled?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + PermissionsAcceptInboundBundling?: InputMaybe; + PermissionsAccessBankingRelationshipAssistance?: InputMaybe; + PermissionsAccessBankingServiceAgent?: InputMaybe; + PermissionsAccessCMC?: InputMaybe; + PermissionsAccessContentBuilder?: InputMaybe; + PermissionsAccessDisputePrompts?: InputMaybe; + PermissionsAccessOrchestrationObjects?: InputMaybe; + PermissionsAccessPolicyAgent?: InputMaybe; + PermissionsAccessServiceEinstein?: InputMaybe; + PermissionsAccessSfDrive?: InputMaybe; + PermissionsAccessToComplaintAgent?: InputMaybe; + PermissionsAccessToComplaintMgmt?: InputMaybe; + PermissionsAccessToDisputeManagement?: InputMaybe; + PermissionsAccessToServiceProcess?: InputMaybe; + PermissionsAccessWealthAdvisorAgent?: InputMaybe; + PermissionsAccountSwitcherUser?: InputMaybe; + PermissionsActivateContract?: InputMaybe; + PermissionsActivateOrder?: InputMaybe; + PermissionsActivateSystemModeFlows?: InputMaybe; + PermissionsActivitiesAccess?: InputMaybe; + PermissionsAddDirectMessageMembers?: InputMaybe; + PermissionsAdvancedCsvDataImportUser?: InputMaybe; + PermissionsAgentforceServiceAgentUser?: InputMaybe; + PermissionsAllowEmailIC?: InputMaybe; + PermissionsAllowLightningLogin?: InputMaybe; + PermissionsAllowViewEditConvertedLeads?: InputMaybe; + PermissionsApexRestServices?: InputMaybe; + PermissionsApiEnabled?: InputMaybe; + PermissionsApiUserOnly?: InputMaybe; + PermissionsAppFrameworkManageApp?: InputMaybe; + PermissionsAppFrameworkManageTemplate?: InputMaybe; + PermissionsAppFrameworkViewApp?: InputMaybe; + PermissionsApprovalAdmin?: InputMaybe; + PermissionsApprovalDesigner?: InputMaybe; + PermissionsAssignPermissionSets?: InputMaybe; + PermissionsAssignTopics?: InputMaybe; + PermissionsAttributionModelUser?: InputMaybe; + PermissionsAuthorApex?: InputMaybe; + PermissionsB2BMarketingAnalyticsUser?: InputMaybe; + PermissionsBulkApiHardDelete?: InputMaybe; + PermissionsBypassMFAForUiLogins?: InputMaybe; + PermissionsCMSECEAuthoringAccess?: InputMaybe; + PermissionsCampaignInfluence2?: InputMaybe; + PermissionsCanApproveFeedPost?: InputMaybe; + PermissionsCanApproveUninstalledApps?: InputMaybe; + PermissionsCanDoActAsUser?: InputMaybe; + PermissionsCanEditPrompts?: InputMaybe; + PermissionsCanInsertFeedSystemFields?: InputMaybe; + PermissionsCanTranslateScrt2Conversation?: InputMaybe; + PermissionsCanUpdateEmailMessage?: InputMaybe; + PermissionsCanUseNewDashboardBuilder?: InputMaybe; + PermissionsCanVerifyComment?: InputMaybe; + PermissionsCanWriteWithAiScrt2Conversation?: InputMaybe; + PermissionsCdcReportingCreateReports?: InputMaybe; + PermissionsCdcReportingManageFolders?: InputMaybe; + PermissionsCdcReportingViewReports?: InputMaybe; + PermissionsChangeDashboardColors?: InputMaybe; + PermissionsChatterComposeUiCodesnippet?: InputMaybe; + PermissionsChatterEditOwnPost?: InputMaybe; + PermissionsChatterEditOwnRecordPost?: InputMaybe; + PermissionsChatterFileLink?: InputMaybe; + PermissionsChatterInternalUser?: InputMaybe; + PermissionsChatterInviteExternalUsers?: InputMaybe; + PermissionsChatterOwnGroups?: InputMaybe; + PermissionsClientSecretRotation?: InputMaybe; + PermissionsCloseConversations?: InputMaybe; + PermissionsConfigCustomRecs?: InputMaybe; + PermissionsConfigureDataspaceScope?: InputMaybe; + PermissionsConnectOrgToEnvironmentHub?: InputMaybe; + PermissionsConsentApiUpdate?: InputMaybe; + PermissionsContentAdministrator?: InputMaybe; + PermissionsContentHubUser?: InputMaybe; + PermissionsContentWorkspaces?: InputMaybe; + PermissionsConvertLeads?: InputMaybe; + PermissionsCreateCustomizeDashboards?: InputMaybe; + PermissionsCreateCustomizeFilters?: InputMaybe; + PermissionsCreateCustomizeReports?: InputMaybe; + PermissionsCreateDashboardFolders?: InputMaybe; + PermissionsCreateLtngTempFolder?: InputMaybe; + PermissionsCreateLtngTempInPub?: InputMaybe; + PermissionsCreateMultiforce?: InputMaybe; + PermissionsCreateReportFolders?: InputMaybe; + PermissionsCreateReportInLightning?: InputMaybe; + PermissionsCreateTopics?: InputMaybe; + PermissionsCreateWorkBadgeDefinition?: InputMaybe; + PermissionsCreateWorkspaces?: InputMaybe; + PermissionsCustomAppsOnFSMobile?: InputMaybe; + PermissionsCustomMobileAppsAccess?: InputMaybe; + PermissionsCustomSidebarOnAllPages?: InputMaybe; + PermissionsCustomizeApplication?: InputMaybe; + PermissionsDataExport?: InputMaybe; + PermissionsDelegatedTwoFactor?: InputMaybe; + PermissionsDeleteActivatedContract?: InputMaybe; + PermissionsDeleteCrMemoAndInvoice?: InputMaybe; + PermissionsDeleteSalesforceFiles?: InputMaybe; + PermissionsDeleteTopics?: InputMaybe; + PermissionsDigitalLendingAdminUser?: InputMaybe; + PermissionsDigitalLendingEditReadOnly?: InputMaybe; + PermissionsDigitalLendingUser?: InputMaybe; + PermissionsDigitalLendingWorkbench?: InputMaybe; + PermissionsDistributeFromPersWksp?: InputMaybe; + PermissionsDownloadMaliciousFiles?: InputMaybe; + PermissionsDownloadPackageVersionZips?: InputMaybe; + PermissionsEditActivatedOrders?: InputMaybe; + PermissionsEditBillingInfo?: InputMaybe; + PermissionsEditBrandTemplates?: InputMaybe; + PermissionsEditCaseComments?: InputMaybe; + PermissionsEditEvent?: InputMaybe; + PermissionsEditHtmlTemplates?: InputMaybe; + PermissionsEditMyDashboards?: InputMaybe; + PermissionsEditMyReports?: InputMaybe; + PermissionsEditOppLineItemUnitPrice?: InputMaybe; + PermissionsEditPublicDocuments?: InputMaybe; + PermissionsEditPublicFilters?: InputMaybe; + PermissionsEditPublicTemplates?: InputMaybe; + PermissionsEditReadonlyFields?: InputMaybe; + PermissionsEditTask?: InputMaybe; + PermissionsEditTopics?: InputMaybe; + PermissionsEmailAdministration?: InputMaybe; + PermissionsEmailMass?: InputMaybe; + PermissionsEmailSingle?: InputMaybe; + PermissionsEmailTemplateManagement?: InputMaybe; + PermissionsEnableBCTransactionPolling?: InputMaybe; + PermissionsEnableCommunityAppLauncher?: InputMaybe; + PermissionsEnableIPFSUpload?: InputMaybe; + PermissionsEnableNotifications?: InputMaybe; + PermissionsEngagementConfigUser?: InputMaybe; + PermissionsEnhancedSalesMobileExp?: InputMaybe; + PermissionsExportReport?: InputMaybe; + PermissionsExternalClientAppAdmin?: InputMaybe; + PermissionsExternalClientAppDeveloper?: InputMaybe; + PermissionsExternalClientAppViewer?: InputMaybe; + PermissionsFSCArcGraphCommunityUser?: InputMaybe; + PermissionsFeedPinning?: InputMaybe; + PermissionsFlowUFLRequired?: InputMaybe; + PermissionsForceTwoFactor?: InputMaybe; + PermissionsFreezeUsers?: InputMaybe; + PermissionsGiveRecognitionBadge?: InputMaybe; + PermissionsGovernNetworks?: InputMaybe; + PermissionsGrantOutboundBundling?: InputMaybe; + PermissionsHasUnlimitedNBAExecutions?: InputMaybe; + PermissionsHeadlessCMSAccess?: InputMaybe; + PermissionsHeadlessPublishNudges?: InputMaybe; + PermissionsHideReadByList?: InputMaybe; + PermissionsIdentityConnect?: InputMaybe; + PermissionsIdentityEnabled?: InputMaybe; + PermissionsImportCustomObjects?: InputMaybe; + PermissionsImportLeads?: InputMaybe; + PermissionsImportPersonal?: InputMaybe; + PermissionsInboundMigrationToolsUser?: InputMaybe; + PermissionsInstallMultiforce?: InputMaybe; + PermissionsIntelligentDocumentProcessing?: InputMaybe; + PermissionsIsSsoEnabled?: InputMaybe; + PermissionsIsotopeAccess?: InputMaybe; + PermissionsIsotopeCToCUser?: InputMaybe; + PermissionsIsotopeLEX?: InputMaybe; + PermissionsKGERMultiArticlesUser?: InputMaybe; + PermissionsLMEndMessagingSessionUserPerm?: InputMaybe; + PermissionsLMOutboundMessagingUserPerm?: InputMaybe; + PermissionsLightningConsoleAllowedForUser?: InputMaybe; + PermissionsLightningExperienceUser?: InputMaybe; + PermissionsListEmailSend?: InputMaybe; + PermissionsLobbyManagementUserAccess?: InputMaybe; + PermissionsLtngPromoReserved01UserPerm?: InputMaybe; + PermissionsMCPMetadataApi?: InputMaybe; + PermissionsManageAccessPolicies?: InputMaybe; + PermissionsManageAgentforceServiceAgent?: InputMaybe; + PermissionsManageAnalyticSnapshots?: InputMaybe; + PermissionsManageApiNamedQueries?: InputMaybe; + PermissionsManageAuthProviders?: InputMaybe; + PermissionsManageBusinessHourHolidays?: InputMaybe; + PermissionsManageC360AConnections?: InputMaybe; + PermissionsManageCMS?: InputMaybe; + PermissionsManageCallCenters?: InputMaybe; + PermissionsManageCases?: InputMaybe; + PermissionsManageCategories?: InputMaybe; + PermissionsManageCdpMlModels?: InputMaybe; + PermissionsManageCertificates?: InputMaybe; + PermissionsManageCertificatesExpiration?: InputMaybe; + PermissionsManageChatterMessages?: InputMaybe; + PermissionsManageContentPermissions?: InputMaybe; + PermissionsManageContentProperties?: InputMaybe; + PermissionsManageContentTaxonomy?: InputMaybe; + PermissionsManageContentTypes?: InputMaybe; + PermissionsManageCustomDomains?: InputMaybe; + PermissionsManageCustomPermissions?: InputMaybe; + PermissionsManageCustomReportTypes?: InputMaybe; + PermissionsManageDashbdsInPubFolders?: InputMaybe; + PermissionsManageDataCategories?: InputMaybe; + PermissionsManageDataIntegrations?: InputMaybe; + PermissionsManageDataspaceScope?: InputMaybe; + PermissionsManageDynamicDashboards?: InputMaybe; + PermissionsManageEmailClientConfig?: InputMaybe; + PermissionsManageExchangeConfig?: InputMaybe; + PermissionsManageExternalConnections?: InputMaybe; + PermissionsManageFilesAndAttachments?: InputMaybe; + PermissionsManageForecastingCustomData?: InputMaybe; + PermissionsManageHealthCheck?: InputMaybe; + PermissionsManageHerokuAppLink?: InputMaybe; + PermissionsManageHubConnections?: InputMaybe; + PermissionsManageIntegrationConnections?: InputMaybe; + PermissionsManageInteraction?: InputMaybe; + PermissionsManageInternalUsers?: InputMaybe; + PermissionsManageIpAddresses?: InputMaybe; + PermissionsManageLeads?: InputMaybe; + PermissionsManageLoginAccessPolicies?: InputMaybe; + PermissionsManageMaliciousFiles?: InputMaybe; + PermissionsManageMobile?: InputMaybe; + PermissionsManageMobileAppSecurity?: InputMaybe; + PermissionsManageNamedCredentials?: InputMaybe; + PermissionsManageNetworks?: InputMaybe; + PermissionsManageOrchInstsAndWorkItems?: InputMaybe; + PermissionsManageOrchestrationRuns?: InputMaybe; + PermissionsManagePasswordPolicies?: InputMaybe; + PermissionsManageProfilesPermissionsets?: InputMaybe; + PermissionsManagePropositions?: InputMaybe; + PermissionsManagePvtRptsAndDashbds?: InputMaybe; + PermissionsManageQuotas?: InputMaybe; + PermissionsManageRecommendationStrategies?: InputMaybe; + PermissionsManageReleaseUpdates?: InputMaybe; + PermissionsManageRemoteAccess?: InputMaybe; + PermissionsManageReportsInPubFolders?: InputMaybe; + PermissionsManageRoles?: InputMaybe; + PermissionsManageSessionPermissionSets?: InputMaybe; + PermissionsManageSharedListViews?: InputMaybe; + PermissionsManageSharing?: InputMaybe; + PermissionsManageSocialPosting?: InputMaybe; + PermissionsManageSolutions?: InputMaybe; + PermissionsManageSubscriptions?: InputMaybe; + PermissionsManageSurveys?: InputMaybe; + PermissionsManageSynonyms?: InputMaybe; + PermissionsManageTrustMeasures?: InputMaybe; + PermissionsManageTwoFactor?: InputMaybe; + PermissionsManageUnlistedGroups?: InputMaybe; + PermissionsManageUsers?: InputMaybe; + PermissionsMassInlineEdit?: InputMaybe; + PermissionsMeetingEngagementUser?: InputMaybe; + PermissionsMemberSelfServiceAgentAccess?: InputMaybe; + PermissionsMergeTopics?: InputMaybe; + PermissionsMetadataStudioUser?: InputMaybe; + PermissionsMicrobatching?: InputMaybe; + PermissionsMngBenVerfForAssistiveAgnt?: InputMaybe; + PermissionsMobileAppSecurity?: InputMaybe; + PermissionsModerateChatter?: InputMaybe; + PermissionsModerateNetworkFeeds?: InputMaybe; + PermissionsModerateNetworkFiles?: InputMaybe; + PermissionsModerateNetworkMessages?: InputMaybe; + PermissionsModerateNetworkUsers?: InputMaybe; + PermissionsModifyAccessAllowPolicies?: InputMaybe; + PermissionsModifyAccessDenyPolicies?: InputMaybe; + PermissionsModifyAllData?: InputMaybe; + PermissionsModifyAllPolicyCenterPolicies?: InputMaybe; + PermissionsModifyDataClassification?: InputMaybe; + PermissionsModifyMetadata?: InputMaybe; + PermissionsMonitorLoginHistory?: InputMaybe; + PermissionsNativeWebviewScrolling?: InputMaybe; + PermissionsNewReportBuilder?: InputMaybe; + PermissionsOutboundMigrationToolsUser?: InputMaybe; + PermissionsOverrideForecasts?: InputMaybe; + PermissionsPackaging2?: InputMaybe; + PermissionsPackaging2Delete?: InputMaybe; + PermissionsPasswordNeverExpires?: InputMaybe; + PermissionsPersonalizationDecisioningUser?: InputMaybe; + PermissionsPersonalizationIntelUser?: InputMaybe; + PermissionsPersonalizationPlatform?: InputMaybe; + PermissionsPersonalizedFinanceUserAccess?: InputMaybe; + PermissionsPreventClassicExperience?: InputMaybe; + PermissionsPrismBackofficeUser?: InputMaybe; + PermissionsPrismPlaygroundUser?: InputMaybe; + PermissionsPrivacyDataAccess?: InputMaybe; + PermissionsPrmExtIntPrtnrAdminUser?: InputMaybe; + PermissionsPublishMultiforce?: InputMaybe; + PermissionsQrCodeGeneratorMobilePublisherPlayground?: InputMaybe; + PermissionsQueryAllFiles?: InputMaybe; + PermissionsQueryNonVetoedFiles?: InputMaybe; + PermissionsQuipMetricsAccess?: InputMaybe; + PermissionsQuipUserEngagementMetrics?: InputMaybe; + PermissionsReassignOrchestrationWorkItems?: InputMaybe; + PermissionsRegrelloUser?: InputMaybe; + PermissionsRemoveDirectMessageMembers?: InputMaybe; + PermissionsResetPasswords?: InputMaybe; + PermissionsRunFlow?: InputMaybe; + PermissionsRunReports?: InputMaybe; + PermissionsSalesInsightsUser?: InputMaybe; + PermissionsSandboxTestingInCommunityApp?: InputMaybe; + PermissionsScheduleJob?: InputMaybe; + PermissionsScheduleReports?: InputMaybe; + PermissionsSegmentIntelligenceUser?: InputMaybe; + PermissionsSelectFilesFromSalesforce?: InputMaybe; + PermissionsSendAnnouncementEmails?: InputMaybe; + PermissionsSendCustomNotifications?: InputMaybe; + PermissionsSendSitRequests?: InputMaybe; + PermissionsShareFilesWithNetworks?: InputMaybe; + PermissionsShowCompanyNameAsUserBadge?: InputMaybe; + PermissionsSimpleCsvDataImportUser?: InputMaybe; + PermissionsSkipIdentityConfirmation?: InputMaybe; + PermissionsSolutionImport?: InputMaybe; + PermissionsStageManagementDesignUser?: InputMaybe; + PermissionsSubscribeDashboardRolesGrps?: InputMaybe; + PermissionsSubscribeDashboardToOtherUsers?: InputMaybe; + PermissionsSubscribeReportRolesGrps?: InputMaybe; + PermissionsSubscribeReportToOtherUsers?: InputMaybe; + PermissionsSubscribeReportsRunAsUser?: InputMaybe; + PermissionsSubscribeToLightningDashboards?: InputMaybe; + PermissionsSubscribeToLightningReports?: InputMaybe; + PermissionsTerritoryOperations?: InputMaybe; + PermissionsTraceXdsQueries?: InputMaybe; + PermissionsTransactionalEmailSend?: InputMaybe; + PermissionsTransferAnyCase?: InputMaybe; + PermissionsTransferAnyEntity?: InputMaybe; + PermissionsTransferAnyLead?: InputMaybe; + PermissionsTwoFactorApi?: InputMaybe; + PermissionsUpdateReportTypeReferences?: InputMaybe; + PermissionsUseAnyApiAuth?: InputMaybe; + PermissionsUseAssistantDialog?: InputMaybe; + PermissionsUseMySearch?: InputMaybe; + PermissionsUseQuerySuggestions?: InputMaybe; + PermissionsUseRestrictedTheme?: InputMaybe; + PermissionsUseServicePartReturn?: InputMaybe; + PermissionsUseSetupWithAgentforce?: InputMaybe; + PermissionsUseTeamReassignWizards?: InputMaybe; + PermissionsUseTeamsForEmployee?: InputMaybe; + PermissionsUseTeamsForItSrvcs?: InputMaybe; + PermissionsUseWebLink?: InputMaybe; + PermissionsUserCanDeployStore?: InputMaybe; + PermissionsUserInteractionInsights?: InputMaybe; + PermissionsViewAccessPolicies?: InputMaybe; + PermissionsViewAllActivities?: InputMaybe; + PermissionsViewAllCustomSettings?: InputMaybe; + PermissionsViewAllData?: InputMaybe; + PermissionsViewAllFieldsGlobal?: InputMaybe; + PermissionsViewAllForecasts?: InputMaybe; + PermissionsViewAllForeignKeyNames?: InputMaybe; + PermissionsViewAllPolicyCenterPolicies?: InputMaybe; + PermissionsViewAllProfiles?: InputMaybe; + PermissionsViewAllUsers?: InputMaybe; + PermissionsViewApiNamedQueries?: InputMaybe; + PermissionsViewClientSecret?: InputMaybe; + PermissionsViewContent?: InputMaybe; + PermissionsViewContentTaxonomy?: InputMaybe; + PermissionsViewCustomerSentiment?: InputMaybe; + PermissionsViewDataAssessment?: InputMaybe; + PermissionsViewDataCategories?: InputMaybe; + PermissionsViewDeveloperName?: InputMaybe; + PermissionsViewEncryptedData?: InputMaybe; + PermissionsViewEventLogFiles?: InputMaybe; + PermissionsViewGlobalHeader?: InputMaybe; + PermissionsViewHealthCheck?: InputMaybe; + PermissionsViewHelpLink?: InputMaybe; + PermissionsViewLicenseUtilization?: InputMaybe; + PermissionsViewMyTeamsDashboards?: InputMaybe; + PermissionsViewOrchestrationsInAutomApp?: InputMaybe; + PermissionsViewPrivateStaticResources?: InputMaybe; + PermissionsViewPublicCapstoneFolders?: InputMaybe; + PermissionsViewPublicDashboards?: InputMaybe; + PermissionsViewPublicReports?: InputMaybe; + PermissionsViewRecommendations?: InputMaybe; + PermissionsViewRestrictionAndScopingRules?: InputMaybe; + PermissionsViewRoles?: InputMaybe; + PermissionsViewSetup?: InputMaybe; + PermissionsViewTrustMeasures?: InputMaybe; + PermissionsViewUserPII?: InputMaybe; + PermissionsYourAccountCDAPublishEvents?: InputMaybe; + SharingType?: InputMaybe; + SystemModstamp?: InputMaybe; + Type?: InputMaybe; + UserLicenseId?: InputMaybe; + UserType?: InputMaybe; +}; + +export type Property_Cost__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Cost__C_Filter = { + Cost_Amount__c?: InputMaybe; + Cost_Category__c?: InputMaybe; + Cost_Date__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + SystemModstamp?: InputMaybe; + Vendor__c?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Feature__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description__c?: InputMaybe; + Display_on_Listing__c?: InputMaybe; + Feature_Category__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Image__C_Filter = { + Alt_Text__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Display_Order__c?: InputMaybe; + Id?: InputMaybe; + Image_Type__c?: InputMaybe; + Image_URL__c?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Listing__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Listing__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Display_Order__c?: InputMaybe; + Featured__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Listing_Price__c?: InputMaybe; + Listing_Status__c?: InputMaybe; + Marketing_Description__c?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + Short_Description__c?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Listing__C_OrderBy = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Display_Order__c?: InputMaybe; + Featured__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Listing_Price__c?: InputMaybe; + Listing_Status__c?: InputMaybe; + Marketing_Description__c?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + Short_Description__c?: InputMaybe; + SystemModstamp?: InputMaybe; +}; + +export type Property_Management_Company__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Management_Company__C_Filter = { + Active__c?: InputMaybe; + Company_Code__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Email__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone__c?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Management_Company__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Property_Owner__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Owner__C_Filter = { + Address__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Email__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Phone__c?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Owner__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Property_Sale__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property_Sale__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + Sale_Amount__c?: InputMaybe; + Sale_Date__c?: InputMaybe; + Sale_Status__c?: InputMaybe; + Sale_Type__c?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property__C_Filter = { + Address__c?: InputMaybe; + Agent__c?: InputMaybe; + Agent__r?: InputMaybe; + Available_Date__c?: InputMaybe; + Bathrooms__c?: InputMaybe; + Bedrooms__c?: InputMaybe; + Coordinates__Latitude__s?: InputMaybe; + Coordinates__Longitude__s?: InputMaybe; + Coordinates__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Deposit__c?: InputMaybe; + Description__c?: InputMaybe; + Features__c?: InputMaybe; + Hero_Image__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Lease_Term__c?: InputMaybe; + Monthly_Rent__c?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parking__c?: InputMaybe; + Pet_Friendly__c?: InputMaybe; + Sq_Ft__c?: InputMaybe; + Status__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Tour_URL__c?: InputMaybe; + Type__c?: InputMaybe; + Utilities__c?: InputMaybe; + Year_Built__c?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Property__C_OrderBy = { + Address__c?: InputMaybe; + Agent__c?: InputMaybe; + Agent__r?: InputMaybe; + Available_Date__c?: InputMaybe; + Bathrooms__c?: InputMaybe; + Bedrooms__c?: InputMaybe; + Coordinates__Latitude__s?: InputMaybe; + Coordinates__Longitude__s?: InputMaybe; + Coordinates__c?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Deposit__c?: InputMaybe; + Description__c?: InputMaybe; + Hero_Image__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Lease_Term__c?: InputMaybe; + Monthly_Rent__c?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parking__c?: InputMaybe; + Pet_Friendly__c?: InputMaybe; + Sq_Ft__c?: InputMaybe; + Status__c?: InputMaybe; + SystemModstamp?: InputMaybe; + Tour_URL__c?: InputMaybe; + Type__c?: InputMaybe; + Year_Built__c?: InputMaybe; +}; + +export type Property__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Property__C_Owner_OrderBys = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type QuickTextHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + QuickText?: InputMaybe; + QuickTextId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type QuickText_Filter = { + Category?: InputMaybe; + Channel?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FolderId?: InputMaybe; + FolderName?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsInsertable?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Message?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SourceType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type QuickText_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Recommendation_Filter = { + AcceptanceLabel?: InputMaybe; + ActionReference?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + ExternalId?: InputMaybe; + Id?: InputMaybe; + ImageId?: InputMaybe; + IsActionActive?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Network?: InputMaybe; + NetworkId?: InputMaybe; + RecommendationKey?: InputMaybe; + RejectionLabel?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type RecordAction_Filter = { + ActionDefinition?: InputMaybe; + ActionType?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + FlowDefinition?: InputMaybe; + FlowInterview?: InputMaybe; + FlowInterviewId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsMandatory?: InputMaybe; + IsUiRemoveHidden?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Order?: InputMaybe; + Pinned?: InputMaybe; + Record?: InputMaybe; + RecordId?: InputMaybe; + Status?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type RecordAction_Record_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + AssociatedLocation?: InputMaybe; + Campaign?: InputMaybe; + CampaignMember?: InputMaybe; + Case?: InputMaybe; + Contact?: InputMaybe; + ContactRequest?: InputMaybe; + Contract?: InputMaybe; + EnhancedLetterhead?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + Payment__c?: InputMaybe; + Pricebook2?: InputMaybe; + PricebookEntry?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Scorecard?: InputMaybe; + SocialPersona?: InputMaybe; + SocialPost?: InputMaybe; + Tenant__c?: InputMaybe; + User?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type RecordType_Filter = { + BusinessProcessId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + SobjectType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type RecordType_OrderBy = { + BusinessProcessId?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + SobjectType?: InputMaybe; + SystemModstamp?: InputMaybe; +}; + +export type ReportHierarchyObjectField_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + HierarchyApiName?: InputMaybe; + HierarchyField?: InputMaybe; + HierarchyType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Object?: InputMaybe; + ObjectType?: InputMaybe; + Report?: InputMaybe; + ReportId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Report_Filter = { + BlockReportId?: InputMaybe; + BooleanFilter?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Currency?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + Division?: InputMaybe; + Drill?: InputMaybe; + DrillRoleId?: InputMaybe; + DrillUserId?: InputMaybe; + FolderName?: InputMaybe; + Format?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + JoinType?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastRunDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + NumSubscriptions?: InputMaybe; + OptionsFlagCurrentSnapshotDate?: InputMaybe; + OptionsFlagHasStackedSummaries?: InputMaybe; + OptionsFlagIsSmartTotalDisabled?: InputMaybe; + OptionsFlagShowCommonRowsOnly?: InputMaybe; + OptionsFlagShowGrandTotal?: InputMaybe; + OptionsFlagShowSubtotals?: InputMaybe; + OptionsFlagSideBySide?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + ReportTypeEnumOrId?: InputMaybe; + Scope?: InputMaybe; + ShowDetails?: InputMaybe; + SortAsc?: InputMaybe; + SortCol?: InputMaybe; + SystemModstamp?: InputMaybe; + TopRows?: InputMaybe; + Version?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Report_Owner_Filters = { + Name?: InputMaybe; + Organization?: InputMaybe; + User?: InputMaybe; +}; + +export const ResultOrder = { + Asc: "ASC", + Desc: "DESC", +} as const; +export type ResultOrder = (typeof ResultOrder)[keyof typeof ResultOrder]; + +export const ResultsOrder = { + Asc: "ASC", + Desc: "DESC", +} as const; +export type ResultsOrder = (typeof ResultsOrder)[keyof typeof ResultsOrder]; + +export type ScorecardAssociation_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Scorecard?: InputMaybe; + ScorecardId?: InputMaybe; + SystemModstamp?: InputMaybe; + TargetEntity?: InputMaybe; + TargetEntityId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ScorecardMetric_Filter = { + Category?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Report?: InputMaybe; + ReportId?: InputMaybe; + Scorecard?: InputMaybe; + ScorecardId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Scorecard_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + TargetEntity?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Scorecard_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type SecurityHealthCheckAlertRecipient_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsAdminNotifyEnabled?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + NotificationType?: InputMaybe; + RecipientEmails?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SecurityHealthCheckResult_Filter = { + BaselineApiName?: InputMaybe; + BaselineName?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + ProcessedTime?: InputMaybe; + ResultDetails?: InputMaybe; + Score?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SelfSvcPortalTopic_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + DeveloperName?: InputMaybe; + DisplayOrder?: InputMaybe; + IconResource?: InputMaybe; + IconResourceId?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + IsDeleted?: InputMaybe; + IsHomePage?: InputMaybe; + IsLeftNav?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MasterLabel?: InputMaybe; + Network?: InputMaybe; + NetworkId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SellerHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Seller?: InputMaybe; + SellerId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Seller_Filter = { + ActiveFromDate?: InputMaybe; + ActiveToDate?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Party?: InputMaybe; + PartyId?: InputMaybe; + SalesAmount?: InputMaybe; + SellerTier?: InputMaybe; + SellerType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Seller_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type SetupAssistantStep_Filter = { + AssistantType?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsComplete?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SiteHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + SiteId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SocialPersonaHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + SocialPersona?: InputMaybe; + SocialPersonaId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SocialPersona_Filter = { + AreWeFollowing?: InputMaybe; + AuthorLabels?: InputMaybe; + AvatarUrl?: InputMaybe; + Bio?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + ExternalId?: InputMaybe; + ExternalPictureURL?: InputMaybe; + Followers?: InputMaybe; + Following?: InputMaybe; + Id?: InputMaybe; + InfluencerScore?: InputMaybe; + IsBlacklisted?: InputMaybe; + IsDefault?: InputMaybe; + IsDeleted?: InputMaybe; + IsFollowingUs?: InputMaybe; + IsVerified?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + ListedCount?: InputMaybe; + MediaProvider?: InputMaybe; + MediaType?: InputMaybe; + Name?: InputMaybe; + NumberOfFriends?: InputMaybe; + NumberOfTweets?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + ProfileType?: InputMaybe; + ProfileUrl?: InputMaybe; + Provider?: InputMaybe; + R6SourceId?: InputMaybe; + RealName?: InputMaybe; + SourceApp?: InputMaybe; + SystemModstamp?: InputMaybe; + TopicType?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SocialPersona_Parent_Filters = { + Account?: InputMaybe; + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; + SocialPost?: InputMaybe; +}; + +export type SocialPostHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + SocialPost?: InputMaybe; + SocialPostId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SocialPost_Filter = { + AnalyzerScore?: InputMaybe; + AssignedTo?: InputMaybe; + AttachmentType?: InputMaybe; + AttachmentUrl?: InputMaybe; + Classification?: InputMaybe; + CommentCount?: InputMaybe; + Content?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DeletedBy?: InputMaybe; + DeletedById?: InputMaybe; + EngagementLevel?: InputMaybe; + ExternalPostId?: InputMaybe; + Handle?: InputMaybe; + HarvestDate?: InputMaybe; + Headline?: InputMaybe; + HiddenBy?: InputMaybe; + HiddenById?: InputMaybe; + Id?: InputMaybe; + InboundLinkCount?: InputMaybe; + IsDeleted?: InputMaybe; + IsOutbound?: InputMaybe; + KeywordGroupName?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + LikedBy?: InputMaybe; + LikesAndVotes?: InputMaybe; + MediaProvider?: InputMaybe; + MediaType?: InputMaybe; + MessageType?: InputMaybe; + Name?: InputMaybe; + Notes?: InputMaybe; + OutboundSocialAccountId?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + Persona?: InputMaybe; + PersonaId?: InputMaybe; + PostPriority?: InputMaybe; + PostTags?: InputMaybe; + PostUrl?: InputMaybe; + Posted?: InputMaybe; + Provider?: InputMaybe; + R6PostId?: InputMaybe; + R6SourceId?: InputMaybe; + R6TopicId?: InputMaybe; + Recipient?: InputMaybe; + RecipientType?: InputMaybe; + ReplyTo?: InputMaybe; + ReplyToId?: InputMaybe; + ResponseContextExternalId?: InputMaybe; + ReviewScale?: InputMaybe; + ReviewScore?: InputMaybe; + ReviewedStatus?: InputMaybe; + Sentiment?: InputMaybe; + Shares?: InputMaybe; + SourceTags?: InputMaybe; + SpamRating?: InputMaybe; + Status?: InputMaybe; + StatusMessage?: InputMaybe; + SystemModstamp?: InputMaybe; + ThreadSize?: InputMaybe; + TopicProfileName?: InputMaybe; + TopicType?: InputMaybe; + TruncatedContent?: InputMaybe; + UniqueCommentors?: InputMaybe; + ViewCount?: InputMaybe; + Who?: InputMaybe; + WhoId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type SocialPost_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type SocialPost_Who_Filters = { + Account?: InputMaybe; + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; +}; + +export type SolutionHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + SolutionId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type StaticResource_Filter = { + BodyLength?: InputMaybe; + CacheControl?: InputMaybe; + ContentType?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + NamespacePrefix?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type StreamingChannel_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + IsDynamic?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type StreamingChannel_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type StringOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export const TabOrder = { + LeftRight: "LEFT_RIGHT", + TopDown: "TOP_DOWN", +} as const; +export type TabOrder = (typeof TabOrder)[keyof typeof TabOrder]; + +export type TableauHostMapping_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + HostType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SiteLuid?: InputMaybe; + SystemModstamp?: InputMaybe; + UrlMatch?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type TableauHostMapping_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Task_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + ActivityDate?: InputMaybe; + ActivityOriginType?: InputMaybe; + CallDisposition?: InputMaybe; + CallDurationInSeconds?: InputMaybe; + CallObject?: InputMaybe; + CallType?: InputMaybe; + CompletedDateTime?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + IsArchived?: InputMaybe; + IsClosed?: InputMaybe; + IsDeleted?: InputMaybe; + IsHighPriority?: InputMaybe; + IsRecurrence?: InputMaybe; + IsReminderSet?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Priority?: InputMaybe; + RecurrenceActivityId?: InputMaybe; + RecurrenceDayOfMonth?: InputMaybe; + RecurrenceDayOfWeekMask?: InputMaybe; + RecurrenceEndDateOnly?: InputMaybe; + RecurrenceInstance?: InputMaybe; + RecurrenceInterval?: InputMaybe; + RecurrenceMonthOfYear?: InputMaybe; + RecurrenceRegeneratedType?: InputMaybe; + RecurrenceStartDateOnly?: InputMaybe; + RecurrenceTimeZoneSidKey?: InputMaybe; + RecurrenceType?: InputMaybe; + ReminderDateTime?: InputMaybe; + Status?: InputMaybe; + Subject?: InputMaybe; + SystemModstamp?: InputMaybe; + TaskSubtype?: InputMaybe; + What?: InputMaybe; + WhatId?: InputMaybe; + Who?: InputMaybe; + WhoId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Task_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type Task_What_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + ApprovalSubmission?: InputMaybe; + ApprovalSubmissionDetail?: InputMaybe; + ApprovalWorkItem?: InputMaybe; + Asset?: InputMaybe; + AssetRelationship?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + CommSubscriptionConsent?: InputMaybe; + ContactRequest?: InputMaybe; + Contract?: InputMaybe; + DelegatedAccount?: InputMaybe; + DevopsEnvironment?: InputMaybe; + DevopsRequestInfo?: InputMaybe; + Image?: InputMaybe; + Lease__c?: InputMaybe; + ListEmail?: InputMaybe; + Location?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + PartyConsent?: InputMaybe; + Payment__c?: InputMaybe; + ProcessException?: InputMaybe; + Product2?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type Task_Who_Filters = { + Contact?: InputMaybe; + Lead?: InputMaybe; + Name?: InputMaybe; +}; + +export type Tenant__History_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + Parent?: InputMaybe; + ParentId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Tenant__C_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + End_Date__c?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastActivityDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + Property__c?: InputMaybe; + Property__r?: InputMaybe; + Start_Date__c?: InputMaybe; + Status__c?: InputMaybe; + SystemModstamp?: InputMaybe; + User_Status__c?: InputMaybe; + User__c?: InputMaybe; + User__r?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Tenant__C_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type TextAreaOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type TimeOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export type TopicAssignment_Entity_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + Asset?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + Contact?: InputMaybe; + ContentDocument?: InputMaybe; + Contract?: InputMaybe; + Event?: InputMaybe; + FeedItem?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Order?: InputMaybe; + Payment__c?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Task?: InputMaybe; + Tenant__c?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderLineItem?: InputMaybe; +}; + +export type TopicAssignment_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Entity?: InputMaybe; + EntityId?: InputMaybe; + EntityKeyPrefix?: InputMaybe; + EntityType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NetworkId?: InputMaybe; + SystemModstamp?: InputMaybe; + Topic?: InputMaybe; + TopicId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Topic_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Id?: InputMaybe; + ManagedTopicType?: InputMaybe; + Name?: InputMaybe; + NetworkId?: InputMaybe; + SystemModstamp?: InputMaybe; + TalkingAbout?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type Translation_Filter = { + CanManage?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsActive?: InputMaybe; + Language?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UrlOperators = { + eq?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + like?: InputMaybe; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nin?: InputMaybe>>; +}; + +export const UiBehavior = { + Edit: "EDIT", + Readonly: "READONLY", + Required: "REQUIRED", +} as const; +export type UiBehavior = (typeof UiBehavior)[keyof typeof UiBehavior]; + +export const Unit = { + Km: "KM", + Mi: "MI", +} as const; +export type Unit = (typeof Unit)[keyof typeof Unit]; + +export type UnstructuredStorageSpace_Filter = { + ApplicationName?: InputMaybe; + Attribute1?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DerivedFolderLocation?: InputMaybe; + ExpirationPolicyType?: InputMaybe; + Folder?: InputMaybe; + FolderId?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SpaceName?: InputMaybe; + SpaceType?: InputMaybe; + StorageLocation?: InputMaybe; + StorageReference?: InputMaybe; + StorageTierType?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UnstructuredStorageSpace_Folder_Filters = { + Name?: InputMaybe; + Organization?: InputMaybe; + User?: InputMaybe; +}; + +export type UnstructuredStorageSpace_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type UserAppMenuItem_Filter = { + AppMenuItemId?: InputMaybe; + ApplicationId?: InputMaybe; + Description?: InputMaybe; + FormFactors?: InputMaybe; + IconUrl?: InputMaybe; + Id?: InputMaybe; + InfoUrl?: InputMaybe; + IsUsingAdminAuthorization?: InputMaybe; + IsVisible?: InputMaybe; + Label?: InputMaybe; + LogoUrl?: InputMaybe; + MobileStartUrl?: InputMaybe; + Name?: InputMaybe; + SortOrder?: InputMaybe; + StartUrl?: InputMaybe; + Type?: InputMaybe; + UiType?: InputMaybe; + UserSortOrder?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UserDefinedLabelAssignment_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + EntityType?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + Item?: InputMaybe; + ItemId?: InputMaybe; + Label?: InputMaybe; + LabelId?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SortOrder?: InputMaybe; + SubjectOrName?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UserDefinedLabelAssignment_Item_Filters = { + Account?: InputMaybe; + Agent__c?: InputMaybe; + Application__c?: InputMaybe; + Campaign?: InputMaybe; + Case?: InputMaybe; + Contact?: InputMaybe; + EmailTemplate?: InputMaybe; + FlowOrchestrationWorkItem?: InputMaybe; + KPI_Snapshot__c?: InputMaybe; + Lead?: InputMaybe; + Lease__c?: InputMaybe; + Maintenance_Request__c?: InputMaybe; + Maintenance_Worker__c?: InputMaybe; + Name?: InputMaybe; + Notification__c?: InputMaybe; + Opportunity?: InputMaybe; + Payment__c?: InputMaybe; + Property_Cost__c?: InputMaybe; + Property_Feature__c?: InputMaybe; + Property_Image__c?: InputMaybe; + Property_Listing__c?: InputMaybe; + Property_Management_Company__c?: InputMaybe; + Property_Owner__c?: InputMaybe; + Property_Sale__c?: InputMaybe; + Property__c?: InputMaybe; + Task?: InputMaybe; + Tenant__c?: InputMaybe; +}; + +export type UserDefinedLabelAssignment_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type UserDefinedLabel_Filter = { + Color?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Name?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalAssignments?: InputMaybe; + Type?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UserDefinedLabel_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type UserHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + User?: InputMaybe; + UserId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UserLocalWebServerIdentity_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LocalWebServerIdentityToken?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UserLocalWebServerIdentity_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type UserRole_Filter = { + CaseAccessForAccountOwner?: InputMaybe; + ContactAccessForAccountOwner?: InputMaybe; + DeveloperName?: InputMaybe; + ForecastUserId?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MayForecastManagerShare?: InputMaybe; + Name?: InputMaybe; + OpportunityAccessForAccountOwner?: InputMaybe; + ParentRole?: InputMaybe; + ParentRoleId?: InputMaybe; + PortalAccountId?: InputMaybe; + PortalAccountOwnerId?: InputMaybe; + PortalType?: InputMaybe; + RollupDescription?: InputMaybe; + SystemModstamp?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type UserRole_OrderBy = { + CaseAccessForAccountOwner?: InputMaybe; + ContactAccessForAccountOwner?: InputMaybe; + DeveloperName?: InputMaybe; + ForecastUserId?: InputMaybe; + Id?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + MayForecastManagerShare?: InputMaybe; + Name?: InputMaybe; + OpportunityAccessForAccountOwner?: InputMaybe; + ParentRole?: InputMaybe; + ParentRoleId?: InputMaybe; + PortalAccountId?: InputMaybe; + PortalAccountOwnerId?: InputMaybe; + PortalType?: InputMaybe; + RollupDescription?: InputMaybe; + SystemModstamp?: InputMaybe; +}; + +export type UserSharedFeature_Filter = { + FeatureName?: InputMaybe; + Id?: InputMaybe; + User?: InputMaybe; + UserId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type User_Filter = { + AboutMe?: InputMaybe; + Account?: InputMaybe; + AccountId?: InputMaybe; + Alias?: InputMaybe; + BadgeText?: InputMaybe; + BannerPhotoId?: InputMaybe; + BannerPhotoUrl?: InputMaybe; + CallCenterId?: InputMaybe; + City?: InputMaybe; + CommunityNickname?: InputMaybe; + CompanyName?: InputMaybe; + Contact?: InputMaybe; + ContactId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultGroupNotificationFrequency?: InputMaybe; + DelegatedApproverId?: InputMaybe; + Department?: InputMaybe; + DigestFrequency?: InputMaybe; + Division?: InputMaybe; + Email?: InputMaybe; + EmailEncodingKey?: InputMaybe; + EmailPreferencesAutoBcc?: InputMaybe; + EmailPreferencesAutoBccStayInTouch?: InputMaybe; + EmailPreferencesStayInTouchReminder?: InputMaybe; + EmployeeNumber?: InputMaybe; + EndDay?: InputMaybe; + Extension?: InputMaybe; + Fax?: InputMaybe; + FederationIdentifier?: InputMaybe; + FirstName?: InputMaybe; + ForecastEnabled?: InputMaybe; + FullPhotoUrl?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + HasUserVerifiedEmail?: InputMaybe; + HasUserVerifiedPhone?: InputMaybe; + Id?: InputMaybe; + Individual?: InputMaybe; + IndividualId?: InputMaybe; + IsActive?: InputMaybe; + IsExtIndicatorVisible?: InputMaybe; + IsProfilePhotoActive?: InputMaybe; + LanguageLocaleKey?: InputMaybe; + LastLoginDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastPasswordChangeDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + LocaleSidKey?: InputMaybe; + Longitude?: InputMaybe; + Manager?: InputMaybe; + ManagerId?: InputMaybe; + MediumBannerPhotoUrl?: InputMaybe; + MediumPhotoUrl?: InputMaybe; + MobilePhone?: InputMaybe; + Name?: InputMaybe; + NumberOfFailedLogins?: InputMaybe; + OfflinePdaTrialExpirationDate?: InputMaybe; + OfflineTrialExpirationDate?: InputMaybe; + OutOfOfficeMessage?: InputMaybe; + PasswordExpirationDate?: InputMaybe; + Phone?: InputMaybe; + PostalCode?: InputMaybe; + Profile?: InputMaybe; + ProfileId?: InputMaybe; + ProfilePhotoId?: InputMaybe; + ReceivesAdminInfoEmails?: InputMaybe; + ReceivesInfoEmails?: InputMaybe; + SenderEmail?: InputMaybe; + SenderName?: InputMaybe; + Signature?: InputMaybe; + SmallBannerPhotoUrl?: InputMaybe; + SmallPhotoUrl?: InputMaybe; + StartDay?: InputMaybe; + State?: InputMaybe; + StayInTouchNote?: InputMaybe; + StayInTouchSignature?: InputMaybe; + StayInTouchSubject?: InputMaybe; + Street?: InputMaybe; + SuAccessExpirationDate?: InputMaybe; + SystemModstamp?: InputMaybe; + TimeZoneSidKey?: InputMaybe; + Title?: InputMaybe; + UserPermissionsAvantgoUser?: InputMaybe; + UserPermissionsCallCenterAutoLogin?: InputMaybe; + UserPermissionsInteractionUser?: InputMaybe; + UserPermissionsMarketingUser?: InputMaybe; + UserPermissionsOfflineUser?: InputMaybe; + UserPermissionsSFContentUser?: InputMaybe; + UserPreferencesActionLauncherEinsteinGptConsent?: InputMaybe; + UserPreferencesActivityRemindersPopup?: InputMaybe; + UserPreferencesApexPagesDeveloperMode?: InputMaybe; + UserPreferencesAssistiveActionsEnabledInActionLauncher?: InputMaybe; + UserPreferencesCacheDiagnostics?: InputMaybe; + UserPreferencesContentEmailAsAndWhen?: InputMaybe; + UserPreferencesContentNoEmail?: InputMaybe; + UserPreferencesCreateLEXAppsWTShown?: InputMaybe; + UserPreferencesDedupeStorageMigrationComplete?: InputMaybe; + UserPreferencesDisCommentAfterLikeEmail?: InputMaybe; + UserPreferencesDisMentionsCommentEmail?: InputMaybe; + UserPreferencesDisProfPostCommentEmail?: InputMaybe; + UserPreferencesDisableAllFeedsEmail?: InputMaybe; + UserPreferencesDisableBookmarkEmail?: InputMaybe; + UserPreferencesDisableChangeCommentEmail?: InputMaybe; + UserPreferencesDisableEndorsementEmail?: InputMaybe; + UserPreferencesDisableFileShareNotificationsForApi?: InputMaybe; + UserPreferencesDisableFollowersEmail?: InputMaybe; + UserPreferencesDisableLaterCommentEmail?: InputMaybe; + UserPreferencesDisableLikeEmail?: InputMaybe; + UserPreferencesDisableMentionsPostEmail?: InputMaybe; + UserPreferencesDisableMessageEmail?: InputMaybe; + UserPreferencesDisableProfilePostEmail?: InputMaybe; + UserPreferencesDisableSharePostEmail?: InputMaybe; + UserPreferencesDismissPersonalSpaceLegalMessage?: InputMaybe; + UserPreferencesDismissRecordChannelsSuggestedObjects?: InputMaybe; + UserPreferencesDismissReuseUpdateReminderModal?: InputMaybe; + UserPreferencesEnableAutoSubForFeeds?: InputMaybe; + UserPreferencesEnableLwrLexPilot?: InputMaybe; + UserPreferencesEventRemindersCheckboxDefault?: InputMaybe; + UserPreferencesExcludeMailAppAttachments?: InputMaybe; + UserPreferencesFavoritesShowTopFavorites?: InputMaybe; + UserPreferencesFavoritesWTShown?: InputMaybe; + UserPreferencesFirstTimeInLightning?: InputMaybe; + UserPreferencesGlobalNavBarWTShown?: InputMaybe; + UserPreferencesGlobalNavGridMenuWTShown?: InputMaybe; + UserPreferencesHasCelebrationBadge?: InputMaybe; + UserPreferencesHasSentWarningEmail?: InputMaybe; + UserPreferencesHasSentWarningEmail238?: InputMaybe; + UserPreferencesHasSentWarningEmail240?: InputMaybe; + UserPreferencesHeavyPagePromptEnabled?: InputMaybe; + UserPreferencesHideBiggerPhotoCallout?: InputMaybe; + UserPreferencesHideBrowseProductRedirectConfirmation?: InputMaybe; + UserPreferencesHideCSNDesktopTask?: InputMaybe; + UserPreferencesHideCSNGetChatterMobileTask?: InputMaybe; + UserPreferencesHideChatterOnboardingSplash?: InputMaybe; + UserPreferencesHideEndUserOnboardingAssistantModal?: InputMaybe; + UserPreferencesHideEventCalendar?: InputMaybe; + UserPreferencesHideFLSNotification?: InputMaybe; + UserPreferencesHideLearningPathModal?: InputMaybe; + UserPreferencesHideLightningMigrationModal?: InputMaybe; + UserPreferencesHideMailAppEAPUserGuidance?: InputMaybe; + UserPreferencesHideMailAppWelcomeMat?: InputMaybe; + UserPreferencesHideManagedEcaMobilePubModal?: InputMaybe; + UserPreferencesHideOnlineSalesAppTabVisibilityRequirementsModal?: InputMaybe; + UserPreferencesHideOnlineSalesAppWelcomeMat?: InputMaybe; + UserPreferencesHideS1BrowserUI?: InputMaybe; + UserPreferencesHideSecondChatterOnboardingSplash?: InputMaybe; + UserPreferencesHideSfxWelcomeMat?: InputMaybe; + UserPreferencesHideTaskListViewsPopover?: InputMaybe; + UserPreferencesHideTrialsCelebration?: InputMaybe; + UserPreferencesHideTrialsWelcomeMat?: InputMaybe; + UserPreferencesLightningExperiencePreferred?: InputMaybe; + UserPreferencesLiveAgentMiawSetupDeflection?: InputMaybe; + UserPreferencesLtngPromoReserved10UserPref?: InputMaybe; + UserPreferencesLtngPromoReserved16UserPref?: InputMaybe; + UserPreferencesLtngPromoReserved19UserPref?: InputMaybe; + UserPreferencesNativeEmailClient?: InputMaybe; + UserPreferencesNewLightningReportRunPageEnabled?: InputMaybe; + UserPreferencesPathAssistantCollapsed?: InputMaybe; + UserPreferencesPreviewCustomTheme?: InputMaybe; + UserPreferencesPreviewLightning?: InputMaybe; + UserPreferencesReadReceiptLastToggleValue?: InputMaybe; + UserPreferencesReceiveNoNotificationsAsApprover?: InputMaybe; + UserPreferencesReceiveNotificationsAsDelegatedApprover?: InputMaybe; + UserPreferencesRecordHomeReservedWTShown?: InputMaybe; + UserPreferencesRecordHomeSectionCollapseWTShown?: InputMaybe; + UserPreferencesReminderSoundOff?: InputMaybe; + UserPreferencesReverseOpenActivitiesView?: InputMaybe; + UserPreferencesSRHOverrideActivities?: InputMaybe; + UserPreferencesSalesEssentialsSetupAssistantCompleted?: InputMaybe; + UserPreferencesSetupAssistantUserPref1?: InputMaybe; + UserPreferencesShowCityToExternalUsers?: InputMaybe; + UserPreferencesShowCityToGuestUsers?: InputMaybe; + UserPreferencesShowCountryToExternalUsers?: InputMaybe; + UserPreferencesShowCountryToGuestUsers?: InputMaybe; + UserPreferencesShowEmailToExternalUsers?: InputMaybe; + UserPreferencesShowEmailToGuestUsers?: InputMaybe; + UserPreferencesShowFaxToExternalUsers?: InputMaybe; + UserPreferencesShowFaxToGuestUsers?: InputMaybe; + UserPreferencesShowForecastingChangeSignals?: InputMaybe; + UserPreferencesShowForecastingRoundedAmounts?: InputMaybe; + UserPreferencesShowManagerToExternalUsers?: InputMaybe; + UserPreferencesShowManagerToGuestUsers?: InputMaybe; + UserPreferencesShowMobilePhoneToExternalUsers?: InputMaybe; + UserPreferencesShowMobilePhoneToGuestUsers?: InputMaybe; + UserPreferencesShowPostalCodeToExternalUsers?: InputMaybe; + UserPreferencesShowPostalCodeToGuestUsers?: InputMaybe; + UserPreferencesShowProfilePicToGuestUsers?: InputMaybe; + UserPreferencesShowStateToExternalUsers?: InputMaybe; + UserPreferencesShowStateToGuestUsers?: InputMaybe; + UserPreferencesShowStreetAddressToExternalUsers?: InputMaybe; + UserPreferencesShowStreetAddressToGuestUsers?: InputMaybe; + UserPreferencesShowTitleToExternalUsers?: InputMaybe; + UserPreferencesShowTitleToGuestUsers?: InputMaybe; + UserPreferencesShowWorkPhoneToExternalUsers?: InputMaybe; + UserPreferencesShowWorkPhoneToGuestUsers?: InputMaybe; + UserPreferencesSortFeedByComment?: InputMaybe; + UserPreferencesSuppressEventSFXReminders?: InputMaybe; + UserPreferencesSuppressTaskSFXReminders?: InputMaybe; + UserPreferencesTaskRemindersCheckboxDefault?: InputMaybe; + UserPreferencesTodayGettingStarted?: InputMaybe; + UserPreferencesTrailheadBadgeCreated?: InputMaybe; + UserPreferencesUserDebugModePref?: InputMaybe; + UserPreferencesUserHasCollapsedGoogleEmbedded?: InputMaybe; + UserPreferencesUserHasLaunchedSidePanel?: InputMaybe; + UserPreferencesUserHasOptedInToSidePanel?: InputMaybe; + UserPreferencesUserHasRemovedGoogleEmbedded?: InputMaybe; + UserRole?: InputMaybe; + UserRoleId?: InputMaybe; + UserType?: InputMaybe; + Username?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type User_OrderBy = { + AboutMe?: InputMaybe; + Account?: InputMaybe; + AccountId?: InputMaybe; + Alias?: InputMaybe; + BadgeText?: InputMaybe; + BannerPhotoId?: InputMaybe; + BannerPhotoUrl?: InputMaybe; + CallCenterId?: InputMaybe; + City?: InputMaybe; + CommunityNickname?: InputMaybe; + CompanyName?: InputMaybe; + Contact?: InputMaybe; + ContactId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DefaultGroupNotificationFrequency?: InputMaybe; + DelegatedApproverId?: InputMaybe; + Department?: InputMaybe; + DigestFrequency?: InputMaybe; + Division?: InputMaybe; + Email?: InputMaybe; + EmailEncodingKey?: InputMaybe; + EmailPreferencesAutoBcc?: InputMaybe; + EmailPreferencesAutoBccStayInTouch?: InputMaybe; + EmailPreferencesStayInTouchReminder?: InputMaybe; + EmployeeNumber?: InputMaybe; + EndDay?: InputMaybe; + Extension?: InputMaybe; + Fax?: InputMaybe; + FederationIdentifier?: InputMaybe; + FirstName?: InputMaybe; + ForecastEnabled?: InputMaybe; + FullPhotoUrl?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + HasUserVerifiedEmail?: InputMaybe; + HasUserVerifiedPhone?: InputMaybe; + Id?: InputMaybe; + Individual?: InputMaybe; + IndividualId?: InputMaybe; + IsActive?: InputMaybe; + IsExtIndicatorVisible?: InputMaybe; + IsProfilePhotoActive?: InputMaybe; + LanguageLocaleKey?: InputMaybe; + LastLoginDate?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastName?: InputMaybe; + LastPasswordChangeDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + LocaleSidKey?: InputMaybe; + Longitude?: InputMaybe; + Manager?: InputMaybe; + ManagerId?: InputMaybe; + MediumBannerPhotoUrl?: InputMaybe; + MediumPhotoUrl?: InputMaybe; + MobilePhone?: InputMaybe; + Name?: InputMaybe; + NumberOfFailedLogins?: InputMaybe; + OfflinePdaTrialExpirationDate?: InputMaybe; + OfflineTrialExpirationDate?: InputMaybe; + OutOfOfficeMessage?: InputMaybe; + PasswordExpirationDate?: InputMaybe; + Phone?: InputMaybe; + PostalCode?: InputMaybe; + Profile?: InputMaybe; + ProfileId?: InputMaybe; + ProfilePhotoId?: InputMaybe; + ReceivesAdminInfoEmails?: InputMaybe; + ReceivesInfoEmails?: InputMaybe; + SenderEmail?: InputMaybe; + SenderName?: InputMaybe; + Signature?: InputMaybe; + SmallBannerPhotoUrl?: InputMaybe; + SmallPhotoUrl?: InputMaybe; + StartDay?: InputMaybe; + State?: InputMaybe; + StayInTouchNote?: InputMaybe; + StayInTouchSignature?: InputMaybe; + StayInTouchSubject?: InputMaybe; + Street?: InputMaybe; + SuAccessExpirationDate?: InputMaybe; + SystemModstamp?: InputMaybe; + TimeZoneSidKey?: InputMaybe; + Title?: InputMaybe; + UserPermissionsAvantgoUser?: InputMaybe; + UserPermissionsCallCenterAutoLogin?: InputMaybe; + UserPermissionsInteractionUser?: InputMaybe; + UserPermissionsMarketingUser?: InputMaybe; + UserPermissionsOfflineUser?: InputMaybe; + UserPermissionsSFContentUser?: InputMaybe; + UserPreferencesActionLauncherEinsteinGptConsent?: InputMaybe; + UserPreferencesActivityRemindersPopup?: InputMaybe; + UserPreferencesApexPagesDeveloperMode?: InputMaybe; + UserPreferencesAssistiveActionsEnabledInActionLauncher?: InputMaybe; + UserPreferencesCacheDiagnostics?: InputMaybe; + UserPreferencesContentEmailAsAndWhen?: InputMaybe; + UserPreferencesContentNoEmail?: InputMaybe; + UserPreferencesCreateLEXAppsWTShown?: InputMaybe; + UserPreferencesDedupeStorageMigrationComplete?: InputMaybe; + UserPreferencesDisCommentAfterLikeEmail?: InputMaybe; + UserPreferencesDisMentionsCommentEmail?: InputMaybe; + UserPreferencesDisProfPostCommentEmail?: InputMaybe; + UserPreferencesDisableAllFeedsEmail?: InputMaybe; + UserPreferencesDisableBookmarkEmail?: InputMaybe; + UserPreferencesDisableChangeCommentEmail?: InputMaybe; + UserPreferencesDisableEndorsementEmail?: InputMaybe; + UserPreferencesDisableFileShareNotificationsForApi?: InputMaybe; + UserPreferencesDisableFollowersEmail?: InputMaybe; + UserPreferencesDisableLaterCommentEmail?: InputMaybe; + UserPreferencesDisableLikeEmail?: InputMaybe; + UserPreferencesDisableMentionsPostEmail?: InputMaybe; + UserPreferencesDisableMessageEmail?: InputMaybe; + UserPreferencesDisableProfilePostEmail?: InputMaybe; + UserPreferencesDisableSharePostEmail?: InputMaybe; + UserPreferencesDismissPersonalSpaceLegalMessage?: InputMaybe; + UserPreferencesDismissRecordChannelsSuggestedObjects?: InputMaybe; + UserPreferencesDismissReuseUpdateReminderModal?: InputMaybe; + UserPreferencesEnableAutoSubForFeeds?: InputMaybe; + UserPreferencesEnableLwrLexPilot?: InputMaybe; + UserPreferencesEventRemindersCheckboxDefault?: InputMaybe; + UserPreferencesExcludeMailAppAttachments?: InputMaybe; + UserPreferencesFavoritesShowTopFavorites?: InputMaybe; + UserPreferencesFavoritesWTShown?: InputMaybe; + UserPreferencesFirstTimeInLightning?: InputMaybe; + UserPreferencesGlobalNavBarWTShown?: InputMaybe; + UserPreferencesGlobalNavGridMenuWTShown?: InputMaybe; + UserPreferencesHasCelebrationBadge?: InputMaybe; + UserPreferencesHasSentWarningEmail?: InputMaybe; + UserPreferencesHasSentWarningEmail238?: InputMaybe; + UserPreferencesHasSentWarningEmail240?: InputMaybe; + UserPreferencesHeavyPagePromptEnabled?: InputMaybe; + UserPreferencesHideBiggerPhotoCallout?: InputMaybe; + UserPreferencesHideBrowseProductRedirectConfirmation?: InputMaybe; + UserPreferencesHideCSNDesktopTask?: InputMaybe; + UserPreferencesHideCSNGetChatterMobileTask?: InputMaybe; + UserPreferencesHideChatterOnboardingSplash?: InputMaybe; + UserPreferencesHideEndUserOnboardingAssistantModal?: InputMaybe; + UserPreferencesHideEventCalendar?: InputMaybe; + UserPreferencesHideFLSNotification?: InputMaybe; + UserPreferencesHideLearningPathModal?: InputMaybe; + UserPreferencesHideLightningMigrationModal?: InputMaybe; + UserPreferencesHideMailAppEAPUserGuidance?: InputMaybe; + UserPreferencesHideMailAppWelcomeMat?: InputMaybe; + UserPreferencesHideManagedEcaMobilePubModal?: InputMaybe; + UserPreferencesHideOnlineSalesAppTabVisibilityRequirementsModal?: InputMaybe; + UserPreferencesHideOnlineSalesAppWelcomeMat?: InputMaybe; + UserPreferencesHideS1BrowserUI?: InputMaybe; + UserPreferencesHideSecondChatterOnboardingSplash?: InputMaybe; + UserPreferencesHideSfxWelcomeMat?: InputMaybe; + UserPreferencesHideTaskListViewsPopover?: InputMaybe; + UserPreferencesHideTrialsCelebration?: InputMaybe; + UserPreferencesHideTrialsWelcomeMat?: InputMaybe; + UserPreferencesLightningExperiencePreferred?: InputMaybe; + UserPreferencesLiveAgentMiawSetupDeflection?: InputMaybe; + UserPreferencesLtngPromoReserved10UserPref?: InputMaybe; + UserPreferencesLtngPromoReserved16UserPref?: InputMaybe; + UserPreferencesLtngPromoReserved19UserPref?: InputMaybe; + UserPreferencesNativeEmailClient?: InputMaybe; + UserPreferencesNewLightningReportRunPageEnabled?: InputMaybe; + UserPreferencesPathAssistantCollapsed?: InputMaybe; + UserPreferencesPreviewCustomTheme?: InputMaybe; + UserPreferencesPreviewLightning?: InputMaybe; + UserPreferencesReadReceiptLastToggleValue?: InputMaybe; + UserPreferencesReceiveNoNotificationsAsApprover?: InputMaybe; + UserPreferencesReceiveNotificationsAsDelegatedApprover?: InputMaybe; + UserPreferencesRecordHomeReservedWTShown?: InputMaybe; + UserPreferencesRecordHomeSectionCollapseWTShown?: InputMaybe; + UserPreferencesReminderSoundOff?: InputMaybe; + UserPreferencesReverseOpenActivitiesView?: InputMaybe; + UserPreferencesSRHOverrideActivities?: InputMaybe; + UserPreferencesSalesEssentialsSetupAssistantCompleted?: InputMaybe; + UserPreferencesSetupAssistantUserPref1?: InputMaybe; + UserPreferencesShowCityToExternalUsers?: InputMaybe; + UserPreferencesShowCityToGuestUsers?: InputMaybe; + UserPreferencesShowCountryToExternalUsers?: InputMaybe; + UserPreferencesShowCountryToGuestUsers?: InputMaybe; + UserPreferencesShowEmailToExternalUsers?: InputMaybe; + UserPreferencesShowEmailToGuestUsers?: InputMaybe; + UserPreferencesShowFaxToExternalUsers?: InputMaybe; + UserPreferencesShowFaxToGuestUsers?: InputMaybe; + UserPreferencesShowForecastingChangeSignals?: InputMaybe; + UserPreferencesShowForecastingRoundedAmounts?: InputMaybe; + UserPreferencesShowManagerToExternalUsers?: InputMaybe; + UserPreferencesShowManagerToGuestUsers?: InputMaybe; + UserPreferencesShowMobilePhoneToExternalUsers?: InputMaybe; + UserPreferencesShowMobilePhoneToGuestUsers?: InputMaybe; + UserPreferencesShowPostalCodeToExternalUsers?: InputMaybe; + UserPreferencesShowPostalCodeToGuestUsers?: InputMaybe; + UserPreferencesShowProfilePicToGuestUsers?: InputMaybe; + UserPreferencesShowStateToExternalUsers?: InputMaybe; + UserPreferencesShowStateToGuestUsers?: InputMaybe; + UserPreferencesShowStreetAddressToExternalUsers?: InputMaybe; + UserPreferencesShowStreetAddressToGuestUsers?: InputMaybe; + UserPreferencesShowTitleToExternalUsers?: InputMaybe; + UserPreferencesShowTitleToGuestUsers?: InputMaybe; + UserPreferencesShowWorkPhoneToExternalUsers?: InputMaybe; + UserPreferencesShowWorkPhoneToGuestUsers?: InputMaybe; + UserPreferencesSortFeedByComment?: InputMaybe; + UserPreferencesSuppressEventSFXReminders?: InputMaybe; + UserPreferencesSuppressTaskSFXReminders?: InputMaybe; + UserPreferencesTaskRemindersCheckboxDefault?: InputMaybe; + UserPreferencesTodayGettingStarted?: InputMaybe; + UserPreferencesTrailheadBadgeCreated?: InputMaybe; + UserPreferencesUserDebugModePref?: InputMaybe; + UserPreferencesUserHasCollapsedGoogleEmbedded?: InputMaybe; + UserPreferencesUserHasLaunchedSidePanel?: InputMaybe; + UserPreferencesUserHasOptedInToSidePanel?: InputMaybe; + UserPreferencesUserHasRemovedGoogleEmbedded?: InputMaybe; + UserRole?: InputMaybe; + UserRoleId?: InputMaybe; + UserType?: InputMaybe; + Username?: InputMaybe; +}; + +export type WorkBadgeDefinitionHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + WorkBadgeDefinitionId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type WorkOrderHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type WorkOrderLineItemHistory_Filter = { + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + DataType?: InputMaybe; + Field?: InputMaybe; + Id?: InputMaybe; + IsDeleted?: InputMaybe; + NewvalNumber?: InputMaybe; + NewvalString?: InputMaybe; + OldvalNumber?: InputMaybe; + OldvalString?: InputMaybe; + WorkOrderLineItem?: InputMaybe; + WorkOrderLineItemId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type WorkOrderLineItem_Filter = { + Asset?: InputMaybe; + AssetId?: InputMaybe; + City?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Discount?: InputMaybe; + Duration?: InputMaybe; + DurationInMinutes?: InputMaybe; + DurationType?: InputMaybe; + EndDate?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + Id?: InputMaybe; + IsClosed?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + LineItemNumber?: InputMaybe; + ListPrice?: InputMaybe; + Location?: InputMaybe; + LocationId?: InputMaybe; + Longitude?: InputMaybe; + Order?: InputMaybe; + OrderId?: InputMaybe; + ParentWorkOrderLineItem?: InputMaybe; + ParentWorkOrderLineItemId?: InputMaybe; + PostalCode?: InputMaybe; + PricebookEntry?: InputMaybe; + PricebookEntryId?: InputMaybe; + Priority?: InputMaybe; + Product2?: InputMaybe; + Product2Id?: InputMaybe; + Quantity?: InputMaybe; + RootWorkOrderLineItem?: InputMaybe; + RootWorkOrderLineItemId?: InputMaybe; + ServiceAppointmentCount?: InputMaybe; + StartDate?: InputMaybe; + State?: InputMaybe; + Status?: InputMaybe; + StatusCategory?: InputMaybe; + Street?: InputMaybe; + Subject?: InputMaybe; + Subtotal?: InputMaybe; + SystemModstamp?: InputMaybe; + TotalPrice?: InputMaybe; + UnitPrice?: InputMaybe; + WorkOrder?: InputMaybe; + WorkOrderId?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type WorkOrder_Filter = { + Account?: InputMaybe; + AccountId?: InputMaybe; + Asset?: InputMaybe; + AssetId?: InputMaybe; + BusinessHours?: InputMaybe; + BusinessHoursId?: InputMaybe; + Case?: InputMaybe; + CaseId?: InputMaybe; + City?: InputMaybe; + Contact?: InputMaybe; + ContactId?: InputMaybe; + Country?: InputMaybe; + CreatedBy?: InputMaybe; + CreatedById?: InputMaybe; + CreatedDate?: InputMaybe; + Description?: InputMaybe; + Discount?: InputMaybe; + Duration?: InputMaybe; + DurationInMinutes?: InputMaybe; + DurationType?: InputMaybe; + EndDate?: InputMaybe; + GeocodeAccuracy?: InputMaybe; + GrandTotal?: InputMaybe; + Id?: InputMaybe; + IsClosed?: InputMaybe; + IsDeleted?: InputMaybe; + LastModifiedBy?: InputMaybe; + LastModifiedById?: InputMaybe; + LastModifiedDate?: InputMaybe; + LastReferencedDate?: InputMaybe; + LastViewedDate?: InputMaybe; + Latitude?: InputMaybe; + LineItemCount?: InputMaybe; + Location?: InputMaybe; + LocationId?: InputMaybe; + Longitude?: InputMaybe; + Owner?: InputMaybe; + OwnerId?: InputMaybe; + ParentWorkOrder?: InputMaybe; + ParentWorkOrderId?: InputMaybe; + PostalCode?: InputMaybe; + Pricebook2?: InputMaybe; + Pricebook2Id?: InputMaybe; + Priority?: InputMaybe; + RootWorkOrder?: InputMaybe; + RootWorkOrderId?: InputMaybe; + ServiceAppointmentCount?: InputMaybe; + StartDate?: InputMaybe; + State?: InputMaybe; + Status?: InputMaybe; + StatusCategory?: InputMaybe; + Street?: InputMaybe; + Subject?: InputMaybe; + Subtotal?: InputMaybe; + SystemModstamp?: InputMaybe; + Tax?: InputMaybe; + TotalPrice?: InputMaybe; + WorkOrderNumber?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type WorkOrder_Owner_Filters = { + Group?: InputMaybe; + Name?: InputMaybe; + User?: InputMaybe; +}; + +export type MaintenanceRequestsQueryVariables = Exact<{ + first: Scalars["Int"]["input"]; + after?: InputMaybe; +}>; + +export type MaintenanceRequestsQuery = { + uiapi: { + query: { + Maintenance_Request__c?: { + edges?: Array<{ + cursor: string; + node?: { + Id: string; + ApiName: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Description__c?: { value?: string | null; displayValue?: string | null } | null; + Type__c?: { value?: string | null; displayValue?: string | null } | null; + Priority__c?: { value?: string | null; displayValue?: string | null } | null; + Status__c?: { value?: string | null; displayValue?: string | null } | null; + Scheduled__c?: { value?: string | null; displayValue?: string | null } | null; + User__r?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + } | null; + Property__r?: { + Address__c?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null; + } | null> | null; + pageInfo: { hasNextPage: boolean; endCursor?: string | null }; + } | null; + }; + }; +}; + +export type ListingByIdQueryVariables = Exact<{ + listingId: Scalars["ID"]["input"]; +}>; + +export type ListingByIdQuery = { + uiapi: { + query: { + Property_Listing__c?: { + edges?: Array<{ + node?: { + Id: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Listing_Price__c?: { value?: number | null; displayValue?: string | null } | null; + Listing_Status__c?: { value?: string | null; displayValue?: string | null } | null; + Property__c?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type PropertyByIdQueryVariables = Exact<{ + propertyId: Scalars["ID"]["input"]; +}>; + +export type PropertyByIdQuery = { + uiapi: { + query: { + Property__c?: { + edges?: Array<{ + node?: { + Id: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Address__c?: { value?: string | null; displayValue?: string | null } | null; + Coordinates__Latitude__s?: { + value?: number | null; + displayValue?: string | null; + } | null; + Coordinates__Longitude__s?: { + value?: number | null; + displayValue?: string | null; + } | null; + Type__c?: { value?: string | null; displayValue?: string | null } | null; + Monthly_Rent__c?: { value?: number | null; displayValue?: string | null } | null; + Bedrooms__c?: { value?: number | null; displayValue?: string | null } | null; + Bathrooms__c?: { value?: number | null; displayValue?: string | null } | null; + Sq_Ft__c?: { value?: number | null; displayValue?: string | null } | null; + Description__c?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type PropertyImagesQueryVariables = Exact<{ + propertyId: Scalars["ID"]["input"]; +}>; + +export type PropertyImagesQuery = { + uiapi: { + query: { + Property_Image__c?: { + edges?: Array<{ + node?: { + Id: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Image_URL__c?: { value?: string | null; displayValue?: string | null } | null; + Image_Type__c?: { value?: string | null; displayValue?: string | null } | null; + Display_Order__c?: { value?: number | null; displayValue?: string | null } | null; + Alt_Text__c?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type PropertyCostsQueryVariables = Exact<{ + propertyId: Scalars["ID"]["input"]; +}>; + +export type PropertyCostsQuery = { + uiapi: { + query: { + Property_Cost__c?: { + edges?: Array<{ + node?: { + Id: string; + Cost_Category__c?: { value?: string | null; displayValue?: string | null } | null; + Cost_Amount__c?: { value?: number | null; displayValue?: string | null } | null; + Cost_Date__c?: { value?: string | null; displayValue?: string | null } | null; + Description__c?: { value?: string | null; displayValue?: string | null } | null; + Vendor__c?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type PropertyFeaturesQueryVariables = Exact<{ + propertyId: Scalars["ID"]["input"]; +}>; + +export type PropertyFeaturesQuery = { + uiapi: { + query: { + Property_Feature__c?: { + edges?: Array<{ + node?: { + Id: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Feature_Category__c?: { value?: string | null; displayValue?: string | null } | null; + Description__c?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type PropertyListingsQueryVariables = Exact<{ + where?: InputMaybe; + first: Scalars["Int"]["input"]; + after?: InputMaybe; + orderBy?: InputMaybe; +}>; + +export type PropertyListingsQuery = { + uiapi: { + query: { + Property_Listing__c?: { + totalCount: number; + edges?: Array<{ + cursor: string; + node?: { + Id: string; + ApiName: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Listing_Price__c?: { value?: number | null; displayValue?: string | null } | null; + Listing_Status__c?: { value?: string | null; displayValue?: string | null } | null; + Property__c?: { value?: string | null; displayValue?: string | null } | null; + Property__r?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + Address__c?: { value?: string | null; displayValue?: string | null } | null; + Coordinates__Latitude__s?: { + value?: number | null; + displayValue?: string | null; + } | null; + Coordinates__Longitude__s?: { + value?: number | null; + displayValue?: string | null; + } | null; + Bedrooms__c?: { value?: number | null; displayValue?: string | null } | null; + } | null; + } | null; + } | null> | null; + pageInfo: { + hasNextPage: boolean; + hasPreviousPage: boolean; + startCursor?: string | null; + endCursor?: string | null; + }; + } | null; + }; + }; +}; + +export type DistinctAccountIndustriesQueryVariables = Exact<{ [key: string]: never }>; + +export type DistinctAccountIndustriesQuery = { + uiapi: { + aggregate: { + Account?: { + edges?: Array<{ + node?: { + aggregate?: { + Industry?: { + value?: string | null; + displayValue?: string | null; + label?: string | null; + } | null; + } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type DistinctAccountTypesQueryVariables = Exact<{ [key: string]: never }>; + +export type DistinctAccountTypesQuery = { + uiapi: { + aggregate: { + Account?: { + edges?: Array<{ + node?: { + aggregate?: { + Type?: { + value?: string | null; + displayValue?: string | null; + label?: string | null; + } | null; + } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type GetAccountDetailQueryVariables = Exact<{ + id: Scalars["ID"]["input"]; +}>; + +export type GetAccountDetailQuery = { + uiapi: { + query: { + Account?: { + edges?: Array<{ + node?: { + Id: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Owner?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + } | null; + Phone?: { value?: string | null; displayValue?: string | null } | null; + Fax?: { value?: string | null; displayValue?: string | null } | null; + Parent?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + } | null; + Website?: { value?: string | null; displayValue?: string | null } | null; + Type?: { value?: string | null; displayValue?: string | null } | null; + NumberOfEmployees?: { value?: number | null; displayValue?: string | null } | null; + Industry?: { value?: string | null; displayValue?: string | null } | null; + AnnualRevenue?: { value?: number | null; displayValue?: string | null } | null; + Description?: { value?: string | null; displayValue?: string | null } | null; + BillingStreet?: { value?: string | null; displayValue?: string | null } | null; + BillingCity?: { value?: string | null; displayValue?: string | null } | null; + BillingState?: { value?: string | null; displayValue?: string | null } | null; + BillingPostalCode?: { value?: string | null; displayValue?: string | null } | null; + BillingCountry?: { value?: string | null; displayValue?: string | null } | null; + ShippingStreet?: { value?: string | null; displayValue?: string | null } | null; + ShippingCity?: { value?: string | null; displayValue?: string | null } | null; + ShippingState?: { value?: string | null; displayValue?: string | null } | null; + ShippingPostalCode?: { value?: string | null; displayValue?: string | null } | null; + ShippingCountry?: { value?: string | null; displayValue?: string | null } | null; + CreatedBy?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + } | null; + CreatedDate?: { value?: string | null; displayValue?: string | null } | null; + LastModifiedBy?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + } | null; + LastModifiedDate?: { value?: string | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + } | null; + }; + }; +}; + +export type SearchAccountsQueryVariables = Exact<{ + first?: InputMaybe; + after?: InputMaybe; + where?: InputMaybe; + orderBy?: InputMaybe; +}>; + +export type SearchAccountsQuery = { + uiapi: { + query: { + Account?: { + totalCount: number; + edges?: Array<{ + node?: { + Id: string; + Name?: { value?: string | null; displayValue?: string | null } | null; + Industry?: { value?: string | null; displayValue?: string | null } | null; + Type?: { value?: string | null; displayValue?: string | null } | null; + Phone?: { value?: string | null; displayValue?: string | null } | null; + Owner?: { + Name?: { value?: string | null; displayValue?: string | null } | null; + } | null; + AnnualRevenue?: { value?: number | null; displayValue?: string | null } | null; + } | null; + } | null> | null; + pageInfo: { + hasNextPage: boolean; + hasPreviousPage: boolean; + endCursor?: string | null; + startCursor?: string | null; + }; + } | null; + }; + }; +}; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/graphqlClient.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/graphqlClient.ts new file mode 100644 index 0000000..be4c26e --- /dev/null +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/graphqlClient.ts @@ -0,0 +1,25 @@ +/** + * Thin GraphQL client: createDataSDK + data.graphql with centralized error handling. + * Use with gql-tagged queries and generated operation types for type-safe calls. + */ +import { createDataSDK } from '@salesforce/sdk-data'; + +export async function executeGraphQL( + query: string, + variables?: TVariables +): Promise { + const data = await createDataSDK(); + // SDK types graphql() first param as string; at runtime it may accept gql DocumentNode too + const response = await data.graphql?.(query, variables); + + if (!response) { + throw new Error('GraphQL response is undefined'); + } + + if (response?.errors?.length) { + const msg = response.errors.map(e => e.message).join('; '); + throw new Error(`GraphQL Error: ${msg}`); + } + + return response.data; +} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/leadApi.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/leadApi.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/leadApi.ts rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/leadApi.ts diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/maintenanceRequestApi.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/maintenanceRequests/maintenanceRequestApi.ts similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/maintenanceRequestApi.ts rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/maintenanceRequests/maintenanceRequestApi.ts diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/propertyDetailGraphQL.ts b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/properties/propertyDetailGraphQL.ts similarity index 92% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/propertyDetailGraphQL.ts rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/properties/propertyDetailGraphQL.ts index 0e721f2..61bea52 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/api/propertyDetailGraphQL.ts +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/api/properties/propertyDetailGraphQL.ts @@ -101,6 +101,14 @@ const PROPERTY_QUERY = gql` value displayValue } + Coordinates__Latitude__s @optional { + value + displayValue + } + Coordinates__Longitude__s @optional { + value + displayValue + } Type__c @optional { value displayValue @@ -143,6 +151,10 @@ export interface PropertyDetail { bathrooms: number | string | null; squareFootage: number | string | null; description: string | null; + coordinates: { + lat: number | null; + lng: number | null; + } | null; } export async function fetchPropertyById(propertyId: string): Promise { @@ -178,6 +190,23 @@ export async function fetchPropertyById(propertyId: string): Promise - - - + , ); diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/appLayout.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/appLayout.tsx similarity index 74% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/appLayout.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/appLayout.tsx index c544914..3da4d09 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/appLayout.tsx +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/appLayout.tsx @@ -1,13 +1,15 @@ import { useState } from "react"; import { Outlet } from "react-router"; -import { TopBar } from "@/components/TopBar"; -import { NavMenu } from "@/components/NavMenu"; +import { TopBar } from "@/components/layout/TopBar"; +import { NavMenu } from "@/components/layout/VerticalNav"; +import { Toaster } from "@/components/ui/sonner"; export default function AppLayout() { const [isNavOpen, setIsNavOpen] = useState(false); return (
+ setIsNavOpen(true)} />
diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/appliances.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/appliances.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/appliances.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/appliances.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/book.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/book.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/book.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/book.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/copy.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/copy.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/copy.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/copy.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/electrical.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/electrical.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/electrical.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/electrical.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/hvac.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/hvac.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/hvac.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/hvac.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/pest.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/pest.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/pest.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/pest.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/plumbing.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/plumbing.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/plumbing.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/plumbing.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/rocket.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/rocket.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/rocket.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/rocket.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/star.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/star.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/star.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/star.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/zen-logo.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/zen-logo.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/icons/zen-logo.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/icons/zen-logo.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/codey-1.png b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/codey-1.png similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/codey-1.png rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/codey-1.png diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/codey-2.png b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/codey-2.png similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/codey-2.png rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/codey-2.png diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/codey-3.png b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/codey-3.png similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/codey-3.png rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/codey-3.png diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/vibe-codey.svg b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/vibe-codey.svg similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/assets/images/vibe-codey.svg rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/assets/images/vibe-codey.svg diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/SkeletonPrimitives.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/SkeletonPrimitives.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/SkeletonPrimitives.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/SkeletonPrimitives.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/alerts/status-alert.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/alerts/status-alert.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/alerts/status-alert.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/alerts/status-alert.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/WeatherWidget.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/dashboard/WeatherWidget.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/WeatherWidget.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/dashboard/WeatherWidget.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/TopBar.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layout/TopBar.tsx similarity index 96% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/TopBar.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layout/TopBar.tsx index 10c9485..47a293f 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/TopBar.tsx +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layout/TopBar.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; import { ChevronDown, Menu, UserPen, LogOut, User, Loader2 } from "lucide-react"; import { Link } from "react-router"; -import { useAuth } from "../features/authentication/context/AuthContext"; -import { ROUTES } from "../features/authentication/authenticationConfig"; +import { useAuth } from "@/features/authentication/context/AuthContext"; +import { ROUTES } from "@/features/authentication/authenticationConfig"; import zenLogo from "@/assets/icons/zen-logo.svg"; export interface TopBarProps { diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/NavMenu.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layout/VerticalNav.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/NavMenu.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layout/VerticalNav.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/layouts/card-layout.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layouts/card-layout.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/layouts/card-layout.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/layouts/card-layout.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestIcon.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestIcon.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestIcon.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestIcon.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestList.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestList.tsx similarity index 80% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestList.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestList.tsx index 3b6f984..97ded26 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestList.tsx +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestList.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; -import type { MaintenanceRequestSummary } from "@/api/maintenanceRequestApi"; -import MaintenanceRequestListItem from "@/components/MaintenanceRequestListItem"; -import MaintenanceDetailsModal from "@/components/MaintenanceDetailsModal"; +import type { MaintenanceRequestSummary } from "@/api/maintenanceRequests/maintenanceRequestApi"; +import MaintenanceRequestListItem from "@/components/maintenanceRequests/MaintenanceRequestListItem"; +import MaintenanceSummaryDetailsModal from "@/components/maintenanceRequests/MaintenanceSummaryDetailsModal"; import { SkeletonListRows } from "@/components/SkeletonPrimitives"; interface MaintenanceRequestListProps { @@ -22,7 +22,7 @@ export default function MaintenanceRequestList({ return ( <> {selectedRequest && ( - setSelectedRequest(null)} /> diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestListItem.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestListItem.tsx similarity index 91% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestListItem.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestListItem.tsx index 5389b9a..e785975 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/MaintenanceRequestListItem.tsx +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceRequestListItem.tsx @@ -2,9 +2,9 @@ * Single maintenance request row: icon (teal) | Type & address + title | tenant (gray circle) [| status]. */ import { useCallback } from "react"; -import type { MaintenanceRequestSummary } from "@/api/maintenanceRequestApi"; -import { MaintenanceRequestIcon } from "@/components/MaintenanceRequestIcon"; -import { StatusBadge } from "@/components/StatusBadge"; +import type { MaintenanceRequestSummary } from "@/api/maintenanceRequests/maintenanceRequestApi"; +import { MaintenanceRequestIcon } from "@/components/maintenanceRequests/MaintenanceRequestIcon"; +import { StatusBadge } from "@/components/maintenanceRequests/StatusBadge"; export interface MaintenanceRequestListItemProps { request: MaintenanceRequestSummary; diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceSummaryDetailsModal.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceSummaryDetailsModal.tsx new file mode 100644 index 0000000..9a60bf2 --- /dev/null +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/MaintenanceSummaryDetailsModal.tsx @@ -0,0 +1,87 @@ +/** + * Read-only maintenance details for B2C Maintenance page (summary rows from maintenanceRequestApi). + */ +import { useEffect } from "react"; +import { X } from "lucide-react"; +import { StatusBadge } from "@/components/maintenanceRequests/StatusBadge"; +import type { MaintenanceRequestSummary } from "@/api/maintenanceRequests/maintenanceRequestApi"; + +export interface MaintenanceSummaryDetailsModalProps { + request: MaintenanceRequestSummary; + onClose: () => void; +} + +function formatDate(value: string | null): string { + if (!value?.trim()) return "β€”"; + try { + const d = new Date(value); + return d.toLocaleDateString("en-US", { + month: "short", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "2-digit", + hour12: true, + }); + } catch { + return value; + } +} + +export default function MaintenanceSummaryDetailsModal({ + request, + onClose, +}: MaintenanceSummaryDetailsModalProps) { + useEffect(() => { + const handleEscape = (e: KeyboardEvent) => { + if (e.key === "Escape") onClose(); + }; + document.addEventListener("keydown", handleEscape); + return () => document.removeEventListener("keydown", handleEscape); + }, [onClose]); + + return ( +
+
+
+
+

{request.title ?? request.name ?? "Request"}

+ +
+
+ {request.description &&

{request.description}

} +
+ {request.type && ( + {request.type} + )} + {request.priority && ( + {request.priority} + )} + {request.status && } +
+ {request.propertyAddress && ( +

+ Property: {request.propertyAddress} +

+ )} + {request.tenantName && ( +

+ Tenant: {request.tenantName} +

+ )} + {request.dateRequested && ( +

+ Requested: {formatDate(request.dateRequested)} +

+ )} +
+
+
+ ); +} diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/StatusBadge.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/StatusBadge.tsx similarity index 100% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/StatusBadge.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/maintenanceRequests/StatusBadge.tsx diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/PropertyListingCard.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/properties/PropertyListingCard.tsx similarity index 98% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/PropertyListingCard.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/properties/PropertyListingCard.tsx index b54f1be..262f4b8 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/components/PropertyListingCard.tsx +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/properties/PropertyListingCard.tsx @@ -6,7 +6,7 @@ import { useNavigate } from "react-router"; import { useCallback, type MouseEvent } from "react"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; -import type { SearchResultRecordData } from "@/features/global-search/types/search/searchResults.js"; +import type { SearchResultRecordData } from "@/types/searchResults.js"; function fieldDisplay( fields: Record | undefined, diff --git a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchPagination.tsx b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/properties/PropertyListingSearchPagination.tsx similarity index 65% rename from samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchPagination.tsx rename to samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/properties/PropertyListingSearchPagination.tsx index 0cf4f8b..75693ef 100644 --- a/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/appreactsampleb2x/src/features/global-search/components/search/SearchPagination.tsx +++ b/samples/webapp-template-app-react-sample-b2x-experimental/force-app/main/default/webapplications/propertyrentalapp/src/components/properties/PropertyListingSearchPagination.tsx @@ -1,39 +1,35 @@ /** - * SearchPagination Component - * - * Displays pagination controls for search results. - * Previous/Next are disabled using hasPreviousPage/hasNextPage from the API so no request is made when there is no page. - * - * @remarks - * - Layout: page size selector on the left, prev/page/next controls on the right (corners). - * - Previous disabled when !hasPreviousPage (cursor stack enables prev when pageIndex > 0). - * - Next disabled when !hasNextPage or nextPageToken is null. + * Pagination controls for Property_Listing__c consumer search (token-based). + * Replaces feature-react-global-search SearchPagination without pulling in that feature. */ -import { Button } from "../../../../components/ui/button"; +import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from "../../../../components/ui/select"; -import { Label } from "../../../../components/ui/label"; -import { PAGE_SIZE_OPTIONS, getValidPageSize, isValidPageSize } from "../../utils/paginationUtils"; +} from "@/components/ui/select"; +import { Label } from "@/components/ui/label"; +import { + PAGE_SIZE_OPTIONS, + getValidPageSize, + isValidPageSize, +} from "@/utils/propertyListingPaginationUtils"; import { ChevronLeft, ChevronRight } from "lucide-react"; -interface SearchPaginationProps { +interface PropertyListingSearchPaginationProps { currentPageToken: string; nextPageToken: string | null; previousPageToken: string | null; hasNextPage?: boolean; hasPreviousPage?: boolean; pageSize: number; - /** direction: 'prev' | 'next' | 'first'. When 'first' (e.g. page size change), parent typically resets pagination; token may be '' for prev when going to page 0. */ onPageChange: (newPageToken: string, direction?: "next" | "prev" | "first") => void; onPageSizeChange: (newPageSize: number) => void; } -export default function SearchPagination({ +export default function PropertyListingSearchPagination({ currentPageToken, nextPageToken, previousPageToken, @@ -42,7 +38,7 @@ export default function SearchPagination({ pageSize, onPageChange, onPageSizeChange, -}: SearchPaginationProps) { +}: PropertyListingSearchPaginationProps) { const validPageSize = getValidPageSize(pageSize); const currentPageTokenNum = parseInt(currentPageToken, 10) || 0; @@ -73,23 +69,19 @@ export default function SearchPagination({ return (