@pega/sdk 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +287 -1
- package/package.json +1 -1
- package/templates/angular-sdk-reference/package.json +12 -12
- package/templates/angular-sdk-reference/tsconfig.json +1 -1
- package/templates/react-native-sdk-reference/expo-env.d.ts +3 -0
- package/templates/react-sdk-reference/{.github/agents/implementation-expert.agent.md → .ai-common/agents/implementation-expert.md} +23 -26
- package/templates/react-sdk-reference/{.github/copilot-instructions.md → .ai-common/global/ai-agent-instructions.md} +7 -7
- package/templates/react-sdk-reference/{.github/instructions/component-map.instructions.md → .ai-common/instructions/component-map.md} +8 -1
- package/templates/react-sdk-reference/{.github/instructions/dse-component.instructions.md → .ai-common/instructions/dse-component.md} +1 -1
- package/templates/react-sdk-reference/{.github/instructions/field-component.instructions.md → .ai-common/instructions/field-component.md} +2 -1
- package/templates/react-sdk-reference/{.github/instructions/template-component.instructions.md → .ai-common/instructions/template-component.md} +1 -1
- package/templates/react-sdk-reference/{.github/instructions/widget-component.instructions.md → .ai-common/instructions/widget-component.md} +1 -1
- package/templates/react-sdk-reference/{.github/prompts/add-component.prompt.md → .ai-common/prompts/add-component.md} +45 -18
- package/templates/react-sdk-reference/{.cursor/rules → .ai-common}/prompts/component-manifest.json +8 -2
- package/templates/react-sdk-reference/{.github/prompts/generate-all-components.prompt.md → .ai-common/prompts/generate-all-components.md} +195 -78
- package/templates/react-sdk-reference/{.github/prompts/generate-dse-components.prompt.md → .ai-common/prompts/generate-dse-components.md} +28 -17
- package/templates/react-sdk-reference/{.github/prompts/generate-field-components.prompt.md → .ai-common/prompts/generate-field-components.md} +32 -16
- package/templates/react-sdk-reference/{.github/prompts/generate-template-components.prompt.md → .ai-common/prompts/generate-template-components.md} +76 -22
- package/templates/react-sdk-reference/{.github/prompts/generate-widget-components.prompt.md → .ai-common/prompts/generate-widget-components.md} +44 -30
- package/templates/react-sdk-reference/{.claude → .ai-common}/prompts/identify-components.md +4 -0
- package/templates/react-sdk-reference/{.cursor/rules/prompts/replace-design-system.mdrules → .ai-common/prompts/replace-design-system.md} +2 -3
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/AlertBanner.md +50 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Banner.md +44 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/CaseSummaryFields.md +54 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/DetailsFields.md +49 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldGroup.md +44 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/FieldGroupList.md +43 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/FieldValueList.md +46 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Operator.md +67 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/Pulse.md +20 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/RichTextEditor.md +58 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension-skills/WssQuickCreate.md +31 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/design-system-extension.md +1 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-components.md +18 -1
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +298 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/CancelAlert.md +132 -3
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +358 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +230 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +221 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +213 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Decimal.md +112 -13
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Dropdown.md +127 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Email.md +68 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Group.md +51 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Integer.md +81 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Location.md +105 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Multiselect.md +70 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ObjectReference.md +74 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Percentage.md +84 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Phone.md +81 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RadioButtons.md +93 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/RichText.md +85 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/ScalarList.md +54 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SelectableCard.md +55 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/SemanticLink.md +64 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextArea.md +66 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/TextContent.md +28 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/TextInput.md +67 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/Time.md +67 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/URL.md +59 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/UserReference.md +90 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-components.md +83 -52
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/AdvancedSearch.md +77 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +273 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/BannerPage.md +39 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/CaseSummary.md +79 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +399 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +282 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/Confirmation.md +89 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DataReference.md +50 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultForm.md +117 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DefaultPage.md +49 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/Details.md +59 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsSubTabs.md +60 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DetailsThreeColumn.md +12 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DetailsTwoColumn.md +12 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DynamicTabs.md +67 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/FieldGroupTemplate.md +119 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/HierarchicalForm.md +45 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboard.md +41 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/InlineDashboardPage.md +56 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/ListPage.md +18 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +419 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/MultiReferenceReadOnly.md +40 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/NarrowWide.md +66 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/OneColumn.md +34 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/PromotedFilters.md +92 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/SelfServiceCaseView.md +56 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SimpleTable.md +59 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SingleReferenceReadOnly.md +52 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/SubTabs.md +47 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/TwoColumn.md +49 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WssNavBar.md +71 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-components.md +1 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/AppAnnouncement.md +38 -1
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Attachment.md +58 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/CaseHistory.md +63 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/FileUtility.md +81 -14
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Followers.md +20 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/QuickCreate.md +48 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/SummaryItem.md +66 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +492 -0
- package/templates/react-sdk-reference/package.minimal.json +29 -0
- package/templates/react-sdk-reference/src/AppProviders.tsx +17 -0
- package/templates/react-sdk-reference/src/MashupApp.tsx +8 -19
- package/templates/react-sdk-reference/src/PortalApp.tsx +6 -17
- package/templates/react-sdk-reference/.claude/instructions/component-map.md +0 -38
- package/templates/react-sdk-reference/.claude/instructions/dse-component.md +0 -75
- package/templates/react-sdk-reference/.claude/instructions/field-component.md +0 -75
- package/templates/react-sdk-reference/.claude/instructions/template-component.md +0 -93
- package/templates/react-sdk-reference/.claude/instructions/widget-component.md +0 -88
- package/templates/react-sdk-reference/.claude/prompts/add-component.md +0 -152
- package/templates/react-sdk-reference/.claude/prompts/component-manifest.json +0 -193
- package/templates/react-sdk-reference/.claude/prompts/generate-all-components.md +0 -158
- package/templates/react-sdk-reference/.claude/prompts/generate-dse-components.md +0 -140
- package/templates/react-sdk-reference/.claude/prompts/generate-field-components.md +0 -153
- package/templates/react-sdk-reference/.claude/prompts/generate-template-components.md +0 -165
- package/templates/react-sdk-reference/.claude/prompts/generate-widget-components.md +0 -138
- package/templates/react-sdk-reference/.claude/prompts/replace-design-system.md +0 -519
- package/templates/react-sdk-reference/.claude/skills/component-contracts.md +0 -140
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/AlertBanner.md +0 -137
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldGroup.md +0 -134
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/FieldValueList.md +0 -118
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/Pulse.md +0 -85
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/RichTextEditor.md +0 -232
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/WssQuickCreate.md +0 -137
- package/templates/react-sdk-reference/.claude/skills/design-system-extension.md +0 -291
- package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -113
- package/templates/react-sdk-reference/.claude/skills/field-skills/Checkbox.md +0 -175
- package/templates/react-sdk-reference/.claude/skills/field-skills/Currency.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/field-skills/Date.md +0 -101
- package/templates/react-sdk-reference/.claude/skills/field-skills/DateTime.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -88
- package/templates/react-sdk-reference/.claude/skills/field-skills/Multiselect.md +0 -188
- package/templates/react-sdk-reference/.claude/skills/field-skills/ObjectReference.md +0 -173
- package/templates/react-sdk-reference/.claude/skills/field-skills/Percentage.md +0 -93
- package/templates/react-sdk-reference/.claude/skills/field-skills/Phone.md +0 -129
- package/templates/react-sdk-reference/.claude/skills/field-skills/RadioButtons.md +0 -167
- package/templates/react-sdk-reference/.claude/skills/field-skills/RichText.md +0 -149
- package/templates/react-sdk-reference/.claude/skills/field-skills/ScalarList.md +0 -134
- package/templates/react-sdk-reference/.claude/skills/field-skills/SelectableCard.md +0 -231
- package/templates/react-sdk-reference/.claude/skills/field-skills/SemanticLink.md +0 -155
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextInput.md +0 -107
- package/templates/react-sdk-reference/.claude/skills/field-skills/Time.md +0 -89
- package/templates/react-sdk-reference/.claude/skills/field-skills/URL.md +0 -86
- package/templates/react-sdk-reference/.claude/skills/template-components.md +0 -321
- package/templates/react-sdk-reference/.claude/skills/template-skills/AdvancedSearch.md +0 -150
- package/templates/react-sdk-reference/.claude/skills/template-skills/AppShell.md +0 -124
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseSummary.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseView.md +0 -137
- package/templates/react-sdk-reference/.claude/skills/template-skills/CaseViewActionsMenu.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/template-skills/Confirmation.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -97
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/ListPage.md +0 -70
- package/templates/react-sdk-reference/.claude/skills/template-skills/ListView.md +0 -142
- package/templates/react-sdk-reference/.claude/skills/template-skills/MultiReferenceReadOnly.md +0 -82
- package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -114
- package/templates/react-sdk-reference/.claude/skills/template-skills/SimpleTable.md +0 -131
- package/templates/react-sdk-reference/.claude/skills/template-skills/SingleReferenceReadOnly.md +0 -108
- package/templates/react-sdk-reference/.claude/skills/template-skills/SubTabs.md +0 -82
- package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -206
- package/templates/react-sdk-reference/.claude/skills/widget-skills/QuickCreate.md +0 -118
- package/templates/react-sdk-reference/.claude/skills/widget-skills/ToDo.md +0 -198
- package/templates/react-sdk-reference/.cursor/rules/component-map.mdrules +0 -41
- package/templates/react-sdk-reference/.cursor/rules/dse-component.mdrules +0 -78
- package/templates/react-sdk-reference/.cursor/rules/field-component.mdrules +0 -74
- package/templates/react-sdk-reference/.cursor/rules/pega-sdk.mdrules +0 -247
- package/templates/react-sdk-reference/.cursor/rules/prompts/add-component.mdrules +0 -149
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-all-components.mdrules +0 -154
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-dse-components.mdrules +0 -131
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-field-components.mdrules +0 -144
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-template-components.mdrules +0 -156
- package/templates/react-sdk-reference/.cursor/rules/prompts/generate-widget-components.mdrules +0 -129
- package/templates/react-sdk-reference/.cursor/rules/prompts/identify-components.mdrules +0 -110
- package/templates/react-sdk-reference/.cursor/rules/skills/component-contracts.mdrules +0 -145
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/AlertBanner.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Banner.mdrules +0 -154
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/CaseSummaryFields.mdrules +0 -159
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/DetailsFields.mdrules +0 -149
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroup.mdrules +0 -136
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldGroupList.mdrules +0 -116
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/FieldValueList.mdrules +0 -120
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Operator.mdrules +0 -154
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/Pulse.mdrules +0 -88
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/RichTextEditor.mdrules +0 -211
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension-skills/WssQuickCreate.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/design-system-extension.mdrules +0 -294
- package/templates/react-sdk-reference/.cursor/rules/skills/field-components.mdrules +0 -299
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/AutoComplete.mdrules +0 -117
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/CancelAlert.mdrules +0 -208
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Checkbox.mdrules +0 -163
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Currency.mdrules +0 -111
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Date.mdrules +0 -104
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/DateTime.mdrules +0 -108
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Decimal.mdrules +0 -103
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Dropdown.mdrules +0 -119
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Email.mdrules +0 -112
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Group.mdrules +0 -95
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Integer.mdrules +0 -92
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Location.mdrules +0 -141
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Multiselect.mdrules +0 -169
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ObjectReference.mdrules +0 -169
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Percentage.mdrules +0 -97
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Phone.mdrules +0 -115
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RadioButtons.mdrules +0 -151
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/RichText.mdrules +0 -143
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/ScalarList.mdrules +0 -129
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SelectableCard.mdrules +0 -221
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/SemanticLink.mdrules +0 -153
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextArea.mdrules +0 -101
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextContent.mdrules +0 -106
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/TextInput.mdrules +0 -109
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/Time.mdrules +0 -93
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/URL.mdrules +0 -90
- package/templates/react-sdk-reference/.cursor/rules/skills/field-skills/UserReference.mdrules +0 -185
- package/templates/react-sdk-reference/.cursor/rules/skills/run-and-verify.mdrules +0 -73
- package/templates/react-sdk-reference/.cursor/rules/skills/template-components.mdrules +0 -327
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AdvancedSearch.mdrules +0 -149
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/AppShell.mdrules +0 -127
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/BannerPage.mdrules +0 -88
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseSummary.mdrules +0 -105
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseView.mdrules +0 -136
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/CaseViewActionsMenu.mdrules +0 -131
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Confirmation.mdrules +0 -112
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DataReference.mdrules +0 -125
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultForm.mdrules +0 -107
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DefaultPage.mdrules +0 -115
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/Details.mdrules +0 -93
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsSubTabs.mdrules +0 -100
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsThreeColumn.mdrules +0 -83
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DetailsTwoColumn.mdrules +0 -83
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/DynamicTabs.mdrules +0 -106
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/FieldGroupTemplate.mdrules +0 -114
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/HierarchicalForm.mdrules +0 -118
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboard.mdrules +0 -109
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/InlineDashboardPage.mdrules +0 -90
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListPage.mdrules +0 -73
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/ListView.mdrules +0 -144
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/MultiReferenceReadOnly.mdrules +0 -85
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/NarrowWide.mdrules +0 -146
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/OneColumn.mdrules +0 -114
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/PromotedFilters.mdrules +0 -129
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SelfServiceCaseView.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SimpleTable.mdrules +0 -132
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SingleReferenceReadOnly.mdrules +0 -108
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/SubTabs.mdrules +0 -84
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/TwoColumn.mdrules +0 -136
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WideNarrow.mdrules +0 -155
- package/templates/react-sdk-reference/.cursor/rules/skills/template-skills/WssNavBar.mdrules +0 -140
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-components.mdrules +0 -276
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/AppAnnouncement.mdrules +0 -87
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Attachment.mdrules +0 -151
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/CaseHistory.mdrules +0 -112
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/FileUtility.mdrules +0 -205
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/Followers.mdrules +0 -104
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/QuickCreate.mdrules +0 -119
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/SummaryItem.mdrules +0 -172
- package/templates/react-sdk-reference/.cursor/rules/skills/widget-skills/ToDo.mdrules +0 -195
- package/templates/react-sdk-reference/.cursor/rules/template-component.mdrules +0 -95
- package/templates/react-sdk-reference/.cursor/rules/widget-component.mdrules +0 -90
- package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -193
- package/templates/react-sdk-reference/.github/prompts/identify-components.prompt.md +0 -110
- package/templates/react-sdk-reference/.github/prompts/replace-design-system.prompt.md +0 -524
- package/templates/react-sdk-reference/.github/skills/component-contracts.md +0 -140
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Banner.md +0 -152
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/CaseSummaryFields.md +0 -159
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/DetailsFields.md +0 -148
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/FieldGroupList.md +0 -113
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -155
- package/templates/react-sdk-reference/.github/skills/field-components.md +0 -295
- package/templates/react-sdk-reference/.github/skills/field-skills/AutoComplete.md +0 -113
- package/templates/react-sdk-reference/.github/skills/field-skills/CancelAlert.md +0 -211
- package/templates/react-sdk-reference/.github/skills/field-skills/Checkbox.md +0 -175
- package/templates/react-sdk-reference/.github/skills/field-skills/Currency.md +0 -109
- package/templates/react-sdk-reference/.github/skills/field-skills/Date.md +0 -101
- package/templates/react-sdk-reference/.github/skills/field-skills/DateTime.md +0 -106
- package/templates/react-sdk-reference/.github/skills/field-skills/Decimal.md +0 -99
- package/templates/react-sdk-reference/.github/skills/field-skills/Dropdown.md +0 -134
- package/templates/react-sdk-reference/.github/skills/field-skills/Email.md +0 -109
- package/templates/react-sdk-reference/.github/skills/field-skills/Group.md +0 -96
- package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -145
- package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -98
- package/templates/react-sdk-reference/.github/skills/field-skills/TextContent.md +0 -117
- package/templates/react-sdk-reference/.github/skills/field-skills/UserReference.md +0 -203
- package/templates/react-sdk-reference/.github/skills/run-and-verify.md +0 -70
- package/templates/react-sdk-reference/.github/skills/template-skills/AppShell.md +0 -124
- package/templates/react-sdk-reference/.github/skills/template-skills/BannerPage.md +0 -86
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseView.md +0 -137
- package/templates/react-sdk-reference/.github/skills/template-skills/CaseViewActionsMenu.md +0 -131
- package/templates/react-sdk-reference/.github/skills/template-skills/DataReference.md +0 -124
- package/templates/react-sdk-reference/.github/skills/template-skills/DefaultForm.md +0 -104
- package/templates/react-sdk-reference/.github/skills/template-skills/DefaultPage.md +0 -112
- package/templates/react-sdk-reference/.github/skills/template-skills/Details.md +0 -90
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -80
- package/templates/react-sdk-reference/.github/skills/template-skills/DynamicTabs.md +0 -106
- package/templates/react-sdk-reference/.github/skills/template-skills/FieldGroupTemplate.md +0 -112
- package/templates/react-sdk-reference/.github/skills/template-skills/HierarchicalForm.md +0 -116
- package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboard.md +0 -108
- package/templates/react-sdk-reference/.github/skills/template-skills/InlineDashboardPage.md +0 -82
- package/templates/react-sdk-reference/.github/skills/template-skills/ListView.md +0 -142
- package/templates/react-sdk-reference/.github/skills/template-skills/NarrowWide.md +0 -143
- package/templates/react-sdk-reference/.github/skills/template-skills/PromotedFilters.md +0 -130
- package/templates/react-sdk-reference/.github/skills/template-skills/SelfServiceCaseView.md +0 -142
- package/templates/react-sdk-reference/.github/skills/template-skills/TwoColumn.md +0 -133
- package/templates/react-sdk-reference/.github/skills/template-skills/WideNarrow.md +0 -152
- package/templates/react-sdk-reference/.github/skills/template-skills/WssNavBar.md +0 -139
- package/templates/react-sdk-reference/.github/skills/widget-components.md +0 -260
- package/templates/react-sdk-reference/.github/skills/widget-skills/AppAnnouncement.md +0 -84
- package/templates/react-sdk-reference/.github/skills/widget-skills/Attachment.md +0 -151
- package/templates/react-sdk-reference/.github/skills/widget-skills/CaseHistory.md +0 -110
- package/templates/react-sdk-reference/.github/skills/widget-skills/Followers.md +0 -103
- package/templates/react-sdk-reference/.github/skills/widget-skills/SummaryItem.md +0 -169
- package/templates/react-sdk-reference/.github/skills/widget-skills/ToDo.md +0 -198
- package/templates/react-sdk-reference/AGENTS.md +0 -246
- /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/run-and-verify.md +0 -0
- /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WideNarrow.md +0 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Skill: AutoComplete
|
|
2
|
+
|
|
3
|
+
Typeahead / autocomplete search field that fetches options from a data page or associated list, binds to a Pega case property.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`field-components.md`](../field-components.md) — covers architecture, props interface, display modes, event handling, and registration patterns common to ALL field components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a typeahead input that shows a dropdown of matching options as the user types. Options are loaded from a Pega data page or associated list. The stored value is always the **key** of the selected option, while the displayed text is the resolved **value** (label). Delegates read-only to `TextInput` with the resolved label.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Pega Name:** `AutoComplete`
|
|
16
|
+
- **Type / Subtype:** `Field` / `Picklist`
|
|
17
|
+
- **Registration key:** `AutoComplete` (in `component-map.ts`)
|
|
18
|
+
|
|
19
|
+
## Props (component-specific)
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Description |
|
|
22
|
+
| -------------------- | -------------------- | -------------------------------------------------------------- |
|
|
23
|
+
| `listType` | `string` | `'associated'` or `'datapage'` |
|
|
24
|
+
| `datasource` | `any` | Datasource (array for associated, string name for datapage) |
|
|
25
|
+
| `columns` | `any[]` | Column config for extracting key/value from datasource records |
|
|
26
|
+
| `parameters` | `any` (optional) | Query parameters for data page calls |
|
|
27
|
+
| `deferDatasource` | `boolean` (optional) | If true, transform `datasourceMetadata` into datapage config |
|
|
28
|
+
| `datasourceMetadata` | `any` (optional) | Metadata for deferred datasource |
|
|
29
|
+
| `onRecordChange` | `any` (optional) | Callback fired on selection change |
|
|
30
|
+
| `additionalProps` | `object` (optional) | Extra props passed through to the autocomplete |
|
|
31
|
+
|
|
32
|
+
## Component Skeleton
|
|
33
|
+
|
|
34
|
+
Follow this exact structure when implementing. Replace `<AutocompleteWidget>` with the equivalent from your chosen design system.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { useEffect, useState } from 'react';
|
|
38
|
+
import isDeepEqual from 'fast-deep-equal/react';
|
|
39
|
+
|
|
40
|
+
import Utils from '../../helpers/utils';
|
|
41
|
+
import { getDataPage } from '../../helpers/data_page';
|
|
42
|
+
import handleEvent from '../../helpers/event-utils';
|
|
43
|
+
import { getComponentFromRegistry } from '@pega/sdk-react';
|
|
44
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
45
|
+
|
|
46
|
+
// ── Option type ──────────────────────────────────────────────
|
|
47
|
+
interface IOption {
|
|
48
|
+
key: string;
|
|
49
|
+
value: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ── Helper functions (top-level, outside component) ──────────
|
|
53
|
+
// preProcessColumns → see Helper Functions section
|
|
54
|
+
// getDisplayFieldsMetaData → see Helper Functions section
|
|
55
|
+
// flattenParameters → see Helper Functions section
|
|
56
|
+
|
|
57
|
+
// ── Props interface ──────────────────────────────────────────
|
|
58
|
+
interface AutoCompleteProps extends PConnFieldProps {
|
|
59
|
+
displayMode?: string;
|
|
60
|
+
deferDatasource?: boolean;
|
|
61
|
+
datasourceMetadata?: any;
|
|
62
|
+
status?: string;
|
|
63
|
+
onRecordChange?: any;
|
|
64
|
+
additionalProps?: object;
|
|
65
|
+
listType: string;
|
|
66
|
+
parameters?: any;
|
|
67
|
+
datasource: any;
|
|
68
|
+
columns: any[];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// ── Component ────────────────────────────────────────────────
|
|
72
|
+
export default function AutoComplete(props: AutoCompleteProps) {
|
|
73
|
+
// 1. Registry lookups
|
|
74
|
+
const TextInput = getComponentFromRegistry('TextInput');
|
|
75
|
+
const FieldValueList = getComponentFromRegistry('FieldValueList');
|
|
76
|
+
|
|
77
|
+
// 2. Destructure props
|
|
78
|
+
const {
|
|
79
|
+
getPConnect, label, required, placeholder, value = '',
|
|
80
|
+
validatemessage, readOnly, testId, displayMode,
|
|
81
|
+
deferDatasource, datasourceMetadata, status,
|
|
82
|
+
helperText, hideLabel, onRecordChange,
|
|
83
|
+
} = props;
|
|
84
|
+
|
|
85
|
+
// 3. PConnect setup
|
|
86
|
+
const pConn = getPConnect();
|
|
87
|
+
const context = pConn.getContextName();
|
|
88
|
+
const actionsApi = pConn.getActionsApi();
|
|
89
|
+
const propName = (pConn.getStateProps() as any).value;
|
|
90
|
+
|
|
91
|
+
// 4. Props that may be reassigned (use let)
|
|
92
|
+
let { listType, parameters, datasource = [], columns = [] } = props;
|
|
93
|
+
|
|
94
|
+
// 5. State
|
|
95
|
+
const [inputValue, setInputValue] = useState('');
|
|
96
|
+
const [options, setOptions] = useState<IOption[]>([]);
|
|
97
|
+
const [theDatasource, setDatasource] = useState(null);
|
|
98
|
+
|
|
99
|
+
// 6. Derived values
|
|
100
|
+
let selectedValue: any = '';
|
|
101
|
+
const helperTextToDisplay = validatemessage || helperText;
|
|
102
|
+
|
|
103
|
+
// 7. Render-time datasource comparison (NOT in useEffect)
|
|
104
|
+
if (!isDeepEqual(datasource, theDatasource)) {
|
|
105
|
+
setDatasource(datasource);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// 8. Deferred datasource transformation (reassigns let vars)
|
|
109
|
+
// → see Behavioral Contract #5
|
|
110
|
+
|
|
111
|
+
// 9. Column preprocessing
|
|
112
|
+
columns = preProcessColumns(columns);
|
|
113
|
+
|
|
114
|
+
// 10. useEffect: load associated options — deps: [theDatasource]
|
|
115
|
+
// → see Behavioral Contract #7
|
|
116
|
+
|
|
117
|
+
// 11. useEffect: load datapage options — deps: [] (mount only)
|
|
118
|
+
// Guard: skip if displayMode is set OR listType === 'associated'
|
|
119
|
+
// → see Behavioral Contract #8
|
|
120
|
+
|
|
121
|
+
// 12. Display mode returns (MUST come before main render)
|
|
122
|
+
if (displayMode === 'DISPLAY_ONLY') {
|
|
123
|
+
return <FieldValueList name={hideLabel ? '' : label} value={value} />;
|
|
124
|
+
}
|
|
125
|
+
if (displayMode === 'STACKED_LARGE_VAL') {
|
|
126
|
+
return <FieldValueList name={hideLabel ? '' : label} value={value} variant="stacked" />;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// 13. Resolve selectedValue from options
|
|
130
|
+
// → see Behavioral Contract #9
|
|
131
|
+
|
|
132
|
+
// 14. Event handlers: handleChange, handleInputValue
|
|
133
|
+
// → see Behavioral Contract #10, #11
|
|
134
|
+
|
|
135
|
+
// 15. Read-only return
|
|
136
|
+
if (readOnly) {
|
|
137
|
+
const theValAsString = options?.find(opt => opt.key === value)?.value;
|
|
138
|
+
return <TextInput {...props} value={theValAsString} />;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// 16. Main editable render — use your design system's autocomplete widget
|
|
142
|
+
// Pass: options, getOptionLabel, value, inputValue, onChange, onInputChange,
|
|
143
|
+
// label, placeholder, required, error state, helperTextToDisplay, testId
|
|
144
|
+
return <AutocompleteWidget ... />;
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Behavioral Contract
|
|
149
|
+
|
|
150
|
+
1. **Options state:** Maintain `options` as `Array<{key: string, value: string}>`.
|
|
151
|
+
2. **Input value state:** Maintain `inputValue` (string) — the typed text in the input box. `selectedValue` is a **local variable** (not React state) recalculated on every render from `options` and `value`.
|
|
152
|
+
3. **Helper text:** Compute `helperTextToDisplay = validatemessage || helperText` — use this wherever helper/error text is rendered.
|
|
153
|
+
4. **Datasource change detection:** During render (not in an effect), use `isDeepEqual` to compare incoming `datasource` with cached `theDatasource`. If different, call `setDatasource(datasource)` to trigger the associated-list `useEffect`.
|
|
154
|
+
5. **Deferred datasource transformation:** If `deferDatasource && datasourceMetadata?.datasource?.name`:
|
|
155
|
+
- `listType`, `parameters`, `datasource`, `columns` must be declared with **`let`** (not `const`) because this block reassigns them.
|
|
156
|
+
- Set `listType = 'datapage'`, `datasource = datasourceMetadata.datasource.name`.
|
|
157
|
+
- Flatten `parameters` using `flattenParameters()` (see Helper Functions).
|
|
158
|
+
- Strip the `@P` prefix from property paths: `propertyForDisplayText.startsWith('@P') ? propertyForDisplayText.substring(3) : propertyForDisplayText` (same for `propertyForValue`).
|
|
159
|
+
- Build `columns` as:
|
|
160
|
+
```
|
|
161
|
+
[
|
|
162
|
+
{ key: 'true', setProperty: 'Associated property', value: valueProp },
|
|
163
|
+
{ display: 'true', primary: 'true', useForSearch: true, value: displayProp }
|
|
164
|
+
]
|
|
165
|
+
```
|
|
166
|
+
6. **Column preprocessing:** Apply `preProcessColumns(columns)` (see Helper Functions) — strips leading `.` from each column's `value` field.
|
|
167
|
+
7. **Loading options (`associated`):** `useEffect` with dependency array **`[theDatasource]`** — call `Utils.getOptionList(props, pConn.getDataObject(''))` and `setOptions(result)`.
|
|
168
|
+
8. **Loading options (`datapage`):** `useEffect` with dependency array **`[]`** (mount only, skipped when `displayMode` is set OR `listType === 'associated'`) — call `getDataPage(datasource, parameters, context)`. Map results:
|
|
169
|
+
```
|
|
170
|
+
const displayColumn = getDisplayFieldsMetaData(columns);
|
|
171
|
+
results.forEach(element => {
|
|
172
|
+
optionsData.push({
|
|
173
|
+
key: element[displayColumn.key] || element.pyGUID,
|
|
174
|
+
value: element[displayColumn.primary]?.toString()
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
setOptions(optionsData);
|
|
178
|
+
```
|
|
179
|
+
9. **Selected value resolution:** On render, find `selectedValue` by matching `value` (stored key) against `options`:
|
|
180
|
+
```
|
|
181
|
+
index = options.findIndex(el => el.key === value)
|
|
182
|
+
selectedValue = index > -1 ? options[index].value : value
|
|
183
|
+
```
|
|
184
|
+
10. **On selection change:**
|
|
185
|
+
|
|
186
|
+
- `val = newValue ? newValue.key : ''`
|
|
187
|
+
- Commit via `handleEvent(actionsApi, 'changeNblur', propName, val)`.
|
|
188
|
+
- If `onRecordChange`, call it with the event.
|
|
189
|
+
|
|
190
|
+
11. **On input change:** Update `inputValue` state (typed text, does NOT commit to store).
|
|
191
|
+
12. **Read-only:** Resolve the option label (`options.find(opt => opt.key === value)?.value`), delegate to `TextInput` with resolved label: `return <TextInput {...props} value={theValAsString} />`.
|
|
192
|
+
|
|
193
|
+
## Helper Functions
|
|
194
|
+
|
|
195
|
+
These are **top-level pure functions** defined outside the component (design-system independent).
|
|
196
|
+
|
|
197
|
+
### `preProcessColumns(columnList)`
|
|
198
|
+
|
|
199
|
+
Returns a new array where each column object's `.value` has a leading `.` stripped:
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
columnList.map(col => {
|
|
203
|
+
const temp = { ...col };
|
|
204
|
+
temp.value = col.value?.startsWith('.') ? col.value.substring(1) : col.value;
|
|
205
|
+
return temp;
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### `getDisplayFieldsMetaData(columnList)`
|
|
210
|
+
|
|
211
|
+
Extracts key, primary display, and secondary display field names from column config:
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
const displayColumns = columnList.filter(col => col.display === 'true');
|
|
215
|
+
const keyCol = columnList.filter(col => col.key === 'true');
|
|
216
|
+
const metaData = { key: '', primary: '', secondary: [] };
|
|
217
|
+
metaData.key = keyCol.length > 0 ? keyCol[0].value : 'auto';
|
|
218
|
+
for (const dc of displayColumns) {
|
|
219
|
+
if (dc.primary === 'true') metaData.primary = dc.value;
|
|
220
|
+
else metaData.secondary.push(dc.value);
|
|
221
|
+
}
|
|
222
|
+
return metaData;
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Return type: `{ key: string, primary: string, secondary: string[] }`.
|
|
226
|
+
|
|
227
|
+
### `flattenParameters(params)`
|
|
228
|
+
|
|
229
|
+
Converts Pega's nested parameter format to a flat key-value map:
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
const flat = {};
|
|
233
|
+
Object.keys(params).forEach(key => {
|
|
234
|
+
const { name, value } = params[key];
|
|
235
|
+
flat[name] = value;
|
|
236
|
+
});
|
|
237
|
+
return flat;
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Display Mode Rendering
|
|
241
|
+
|
|
242
|
+
- **`DISPLAY_ONLY`:** `<FieldValueList name={hideLabel ? '' : label} value={value} />` — raw stored value (key string).
|
|
243
|
+
- **`STACKED_LARGE_VAL`:** `<FieldValueList name={hideLabel ? '' : label} value={value} variant='stacked' />`.
|
|
244
|
+
|
|
245
|
+
## Read-Only Rendering
|
|
246
|
+
|
|
247
|
+
Resolve the display label from options and delegate: `return <TextInput {...props} value={theValAsString} />`.
|
|
248
|
+
|
|
249
|
+
## Visual Specifications
|
|
250
|
+
|
|
251
|
+
| Property | Value |
|
|
252
|
+
| -------------- | ----------------------------------------------------------- |
|
|
253
|
+
| Width | 100% |
|
|
254
|
+
| Size | Small |
|
|
255
|
+
| Variant | Outlined |
|
|
256
|
+
| Dropdown popup | Opens below input, shows filtered options |
|
|
257
|
+
| Input | Combobox pattern — types to filter, click arrow to open all |
|
|
258
|
+
| Error state | Red border + red helper text |
|
|
259
|
+
| Label | Floating label |
|
|
260
|
+
| Placeholder | From `placeholder` prop |
|
|
261
|
+
|
|
262
|
+
**Autocomplete behavior:**
|
|
263
|
+
|
|
264
|
+
- The controlled `value` is the selected option object (or `selectedValue` string).
|
|
265
|
+
- The controlled `inputValue` is the typed text.
|
|
266
|
+
- `getOptionLabel` returns `option.value` (the display label).
|
|
267
|
+
- `isOptionEqualToValue` returns `option.value` (used for selection matching).
|
|
268
|
+
|
|
269
|
+
## Edge Cases & Special Logic
|
|
270
|
+
|
|
271
|
+
- `inputValue || selectedValue` — the input displays `inputValue` when typing, `selectedValue` when a selection has been made and nothing is typed.
|
|
272
|
+
- When `value` is a key that does not yet exist in `options` (e.g., options still loading), display `value` directly as `selectedValue`.
|
|
273
|
+
- Options array uses `{key, value}` — `key` = stored value, `value` = display label.
|
|
274
|
+
- `context` is obtained from `pConn.getContextName()` and passed to `getDataPage`.
|
|
275
|
+
- **Render ordering matters:** display mode checks → `selectedValue` resolution → define event handlers → readOnly check → main editable render. Do not reorder.
|
|
276
|
+
|
|
277
|
+
## Dependencies
|
|
278
|
+
|
|
279
|
+
- `isDeepEqual` from `fast-deep-equal/react`.
|
|
280
|
+
- `Utils.getOptionList()` from `../../helpers/utils`.
|
|
281
|
+
- `getDataPage()` from `../../helpers/data_page`.
|
|
282
|
+
- `handleEvent` from `../../helpers/event-utils`.
|
|
283
|
+
- `getComponentFromRegistry('TextInput')` for read-only.
|
|
284
|
+
- `getComponentFromRegistry('FieldValueList')` for display modes.
|
|
285
|
+
- Typeahead/autocomplete UI widget.
|
|
286
|
+
|
|
287
|
+
## Design System Mapping
|
|
288
|
+
|
|
289
|
+
**UI control type:** Combobox / typeahead autocomplete input.
|
|
290
|
+
|
|
291
|
+
Listed design systems are examples only.
|
|
292
|
+
|
|
293
|
+
| Design System | Recommended Component |
|
|
294
|
+
| ------------------ | ------------------------------------------------------- |
|
|
295
|
+
| Default (CSS only) | `<input>` + custom dropdown list with filtering |
|
|
296
|
+
| MUI | `<Autocomplete>` with `renderInput` using `<TextField>` |
|
|
297
|
+
| Ant Design | `<AutoComplete>` or `<Select showSearch>` |
|
|
298
|
+
| Chakra UI | `<Combobox>` (Downshift) or third-party |
|
package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/CancelAlert.md
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Cancel confirmation dialog that offers the user a choice between going back or discarding/deleting the current case/action.
|
|
4
4
|
|
|
5
|
-
> **
|
|
5
|
+
> **Note:** This component extends `PConnFieldProps` for registry compatibility but does **not** use standard field patterns (no `displayMode`, no `handleEvent`, no value binding). It is an internal modal dialog.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -28,24 +28,153 @@ Renders a full-screen modal overlay with a confirmation dialog. Presents two act
|
|
|
28
28
|
| `skipReleaseLockRequest` | `any` | Whether to skip lock release when removing container item |
|
|
29
29
|
| `dismiss` | `Function` | Callback to close/dismiss this dialog (called with `true` to indicate confirmed dismiss) |
|
|
30
30
|
|
|
31
|
+
## Component Skeleton
|
|
32
|
+
|
|
33
|
+
Follow this exact structure when implementing. Replace modal/button/snackbar components with equivalents from your chosen design system.
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { useState } from 'react';
|
|
37
|
+
import type { PConnFieldProps } from '@pega/sdk-react';
|
|
38
|
+
import './CancelAlert.css';
|
|
39
|
+
|
|
40
|
+
// ── Props interface ──────────────────────────────────────────
|
|
41
|
+
interface CancelAlertProps extends PConnFieldProps {
|
|
42
|
+
heading: string;
|
|
43
|
+
content: string;
|
|
44
|
+
itemKey: string;
|
|
45
|
+
hideDelete: boolean;
|
|
46
|
+
isDataObject: boolean;
|
|
47
|
+
skipReleaseLockRequest: any;
|
|
48
|
+
dismiss: Function;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ── Component ────────────────────────────────────────────────
|
|
52
|
+
export default function CancelAlert(props: CancelAlertProps) {
|
|
53
|
+
// 1. Destructure props (note: itemKey aliased to containerItemID)
|
|
54
|
+
const {
|
|
55
|
+
heading, content, getPConnect,
|
|
56
|
+
itemKey: containerItemID,
|
|
57
|
+
hideDelete, isDataObject, skipReleaseLockRequest, dismiss,
|
|
58
|
+
} = props;
|
|
59
|
+
|
|
60
|
+
// 2. PConnect APIs
|
|
61
|
+
const actionsAPI = getPConnect().getActionsApi();
|
|
62
|
+
const containerManagerAPI = getPConnect().getContainerManager();
|
|
63
|
+
const isLocalAction = getPConnect().getValue(
|
|
64
|
+
PCore.getConstants().CASE_INFO.IS_LOCAL_ACTION
|
|
65
|
+
);
|
|
66
|
+
// @ts-ignore - Property 'options' is private
|
|
67
|
+
const isBulkAction = getPConnect()?.options?.isBulkAction;
|
|
68
|
+
|
|
69
|
+
// 3. Localization setup
|
|
70
|
+
const localizedVal = PCore.getLocaleUtils().getLocaleValue;
|
|
71
|
+
const localeCategory = 'ModalContainer';
|
|
72
|
+
|
|
73
|
+
// 4. Coexistence setup
|
|
74
|
+
const broadCastUtils: any = PCore.getCoexistenceManager().getBroadcastUtils();
|
|
75
|
+
const isReverseCoexistence = broadCastUtils.isReverseCoexistenceCaseLoaded();
|
|
76
|
+
|
|
77
|
+
// 5. Button ID constants
|
|
78
|
+
const btnIds = {
|
|
79
|
+
SAVE_AND_CLOSE: 'saveAndClose',
|
|
80
|
+
CONTINUE_WORKING: 'continueWorking',
|
|
81
|
+
DELETE: 'delete',
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// 6. State
|
|
85
|
+
const [buttonsState, setButtonsState] = useState({
|
|
86
|
+
[btnIds.SAVE_AND_CLOSE]: false,
|
|
87
|
+
[btnIds.DELETE]: false,
|
|
88
|
+
});
|
|
89
|
+
const [showSnackbar, setShowSnackbar] = useState(false);
|
|
90
|
+
const [snackbarMessage, setSnackbarMessage] = useState('');
|
|
91
|
+
|
|
92
|
+
// 7. Button enable/disable helpers
|
|
93
|
+
function disableButton(id) {
|
|
94
|
+
setButtonsState(prev => ({ ...prev, [id]: true }));
|
|
95
|
+
}
|
|
96
|
+
function enableButton(id) {
|
|
97
|
+
setButtonsState(prev => ({ ...prev, [id]: false }));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// 8. cancelHandler — see Behavioral Contract "Discard" section
|
|
101
|
+
function cancelHandler() { /* decision tree */ }
|
|
102
|
+
|
|
103
|
+
// 9. handleSnackbarClose — see Behavioral Contract
|
|
104
|
+
function handleSnackbarClose(event, reason?) {
|
|
105
|
+
if (reason === 'clickaway') return;
|
|
106
|
+
setShowSnackbar(false);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 10. Build leftButton ("Go back") and rightButton ("Discard") JSX
|
|
110
|
+
// leftButton: onClick → dismiss(), plus reverse coexistence cleanup
|
|
111
|
+
// rightButton: onClick → cancelHandler(), disabled={buttonsState[btnIds.DELETE]}
|
|
112
|
+
// All button text wrapped in localizedVal(text, localeCategory)
|
|
113
|
+
|
|
114
|
+
// 11. Return: overlay div + dialog box + snackbar
|
|
115
|
+
// See Visual Specifications for layout and CSS classes
|
|
116
|
+
return (
|
|
117
|
+
<>
|
|
118
|
+
<div className="cancel-alert-background">
|
|
119
|
+
<div className="cancel-alert-top">
|
|
120
|
+
<h3>{localizedVal(heading, localeCategory)}</h3>
|
|
121
|
+
<div><p>{localizedVal(content, localeCategory)}</p></div>
|
|
122
|
+
<div className="action-controls">
|
|
123
|
+
{/* Two buttons: Go back (secondary) | Discard (primary) */}
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
{/* Snackbar: open={showSnackbar}, autoHideDuration=3000, message={snackbarMessage} */}
|
|
128
|
+
</>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
31
133
|
## Behavioral Contract
|
|
32
134
|
|
|
33
135
|
### Setup
|
|
34
136
|
|
|
35
137
|
```typescript
|
|
138
|
+
// PConnect APIs
|
|
36
139
|
const actionsAPI = getPConnect().getActionsApi();
|
|
37
140
|
const containerManagerAPI = getPConnect().getContainerManager();
|
|
38
141
|
const isLocalAction = getPConnect().getValue(PCore.getConstants().CASE_INFO.IS_LOCAL_ACTION);
|
|
142
|
+
// @ts-ignore - Property 'options' is private and only accessible within class 'C11nEnv'
|
|
39
143
|
const isBulkAction = getPConnect()?.options?.isBulkAction;
|
|
40
|
-
|
|
144
|
+
|
|
145
|
+
// Localization
|
|
146
|
+
const localizedVal = PCore.getLocaleUtils().getLocaleValue;
|
|
147
|
+
const localeCategory = 'ModalContainer';
|
|
148
|
+
|
|
149
|
+
// Coexistence (store broadCastUtils — reused in Go back handler)
|
|
150
|
+
const broadCastUtils: any = PCore.getCoexistenceManager().getBroadcastUtils();
|
|
151
|
+
const isReverseCoexistence = broadCastUtils.isReverseCoexistenceCaseLoaded();
|
|
152
|
+
|
|
153
|
+
// Button IDs (used as keys in buttonsState)
|
|
154
|
+
const btnIds = {
|
|
155
|
+
SAVE_AND_CLOSE: 'saveAndClose',
|
|
156
|
+
CONTINUE_WORKING: 'continueWorking',
|
|
157
|
+
DELETE: 'delete',
|
|
158
|
+
};
|
|
41
159
|
```
|
|
42
160
|
|
|
43
161
|
### State
|
|
44
162
|
|
|
45
|
-
- `buttonsState`: tracks disabled state per button: `{
|
|
163
|
+
- `buttonsState`: tracks disabled state per button: `{ [btnIds.SAVE_AND_CLOSE]: false, [btnIds.DELETE]: false }`
|
|
46
164
|
- `showSnackbar`: boolean — whether to show the failure snackbar
|
|
47
165
|
- `snackbarMessage`: string — error message text
|
|
48
166
|
|
|
167
|
+
### Helper Functions
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
function disableButton(id) {
|
|
171
|
+
setButtonsState((prev) => ({ ...prev, [id]: true }));
|
|
172
|
+
}
|
|
173
|
+
function enableButton(id) {
|
|
174
|
+
setButtonsState((prev) => ({ ...prev, [id]: false }));
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
49
178
|
### "Go back" button (`leftButton`)
|
|
50
179
|
|
|
51
180
|
Always calls `dismiss()` (no argument = don't confirm). If `isReverseCoexistence`:
|