@pega/sdk 0.0.4 → 0.0.6
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/README.md +10 -3
- package/dist/index.js +977 -92
- 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/.claude/settings.json +5 -0
- package/templates/react-native-sdk-reference/.prettierignore +17 -0
- package/templates/react-native-sdk-reference/.vscode/extensions.json +1 -0
- package/templates/react-native-sdk-reference/.vscode/settings.json +7 -0
- package/templates/react-native-sdk-reference/AGENTS.md +3 -0
- package/templates/react-native-sdk-reference/CLAUDE.md +1 -0
- package/templates/react-native-sdk-reference/README.md +56 -0
- package/templates/react-native-sdk-reference/app.json +40 -5
- package/templates/react-native-sdk-reference/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
- package/templates/react-native-sdk-reference/assets/expo.icon/Assets/grid.png +0 -0
- package/templates/react-native-sdk-reference/assets/expo.icon/icon.json +35 -0
- package/templates/react-native-sdk-reference/assets/icons/bell.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/clock.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/cross.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/donut.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/gear.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/globe.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/internet.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/music.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/right-arrow.png +0 -0
- package/templates/react-native-sdk-reference/assets/icons/speed.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/MediaCo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/adaptive-icon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/android-icon-background.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/android-icon-foreground.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/android-icon-monochrome.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/expo-badge-white.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/expo-badge.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/expo-logo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/favicon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/icon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/logo-glow.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/partial-react-logo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/react-logo.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/react-logo@2x.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/react-logo@3x.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/splash-icon.png +0 -0
- package/templates/react-native-sdk-reference/assets/images/tutorial-web.png +0 -0
- package/templates/react-native-sdk-reference/eslint.config.mjs +68 -0
- package/templates/react-native-sdk-reference/package.json +59 -14
- package/templates/react-native-sdk-reference/pega-constellationjs-0.26.3.tgz +0 -0
- package/templates/react-native-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
- package/templates/react-native-sdk-reference/pega-sdk-types-0.1.0.tgz +0 -0
- package/templates/react-native-sdk-reference/sdk-config.json +31 -9
- package/templates/react-native-sdk-reference/src/app/_layout.tsx +38 -0
- package/templates/react-native-sdk-reference/src/app/home/_layout.tsx +39 -0
- package/templates/react-native-sdk-reference/src/app/home/contact.tsx +11 -0
- package/templates/react-native-sdk-reference/src/app/home/index.tsx +36 -0
- package/templates/react-native-sdk-reference/src/app/home/shop.tsx +11 -0
- package/templates/react-native-sdk-reference/src/app/home/your-services.tsx +11 -0
- package/templates/react-native-sdk-reference/src/app/index.tsx +72 -0
- package/templates/react-native-sdk-reference/src/app/workarea.tsx +135 -0
- package/templates/react-native-sdk-reference/src/bridge/Context/StoreContext.ts +4 -0
- package/templates/react-native-sdk-reference/src/bridge/RootComponent.tsx +12 -0
- package/templates/react-native-sdk-reference/src/bridge/react_pconnect.jsx +334 -0
- package/templates/react-native-sdk-reference/src/components/common/DisplayField.tsx +29 -0
- package/templates/react-native-sdk-reference/src/components/common/FormFieldWrapper.tsx +5 -0
- package/templates/react-native-sdk-reference/src/components/common/HelperText.tsx +11 -0
- package/templates/react-native-sdk-reference/src/components/common/LabelText.tsx +22 -0
- package/templates/react-native-sdk-reference/src/components/common/inputTheme.ts +17 -0
- package/templates/react-native-sdk-reference/src/components/design-system/AutoComplete.tsx +126 -0
- package/templates/react-native-sdk-reference/src/components/design-system/FieldGroup.tsx +72 -0
- package/templates/react-native-sdk-reference/src/components/design-system/Radio.tsx +61 -0
- package/templates/react-native-sdk-reference/src/components/field/AutoComplete/AutoComplete.tsx +196 -0
- package/templates/react-native-sdk-reference/src/components/field/AutoComplete/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Checkbox/Checkbox.tsx +89 -0
- package/templates/react-native-sdk-reference/src/components/field/Checkbox/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Currency/Currency.tsx +84 -0
- package/templates/react-native-sdk-reference/src/components/field/Currency/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Date/Date.tsx +94 -0
- package/templates/react-native-sdk-reference/src/components/field/Date/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Dropdown/Dropdown.tsx +211 -0
- package/templates/react-native-sdk-reference/src/components/field/Dropdown/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Email/Email.tsx +81 -0
- package/templates/react-native-sdk-reference/src/components/field/Email/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Group/Group.tsx +47 -0
- package/templates/react-native-sdk-reference/src/components/field/Group/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Integer/Integer.tsx +84 -0
- package/templates/react-native-sdk-reference/src/components/field/Integer/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/Phone/Phone.tsx +85 -0
- package/templates/react-native-sdk-reference/src/components/field/Phone/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/field/RadioButtons/RadioButtons.tsx +118 -0
- package/templates/react-native-sdk-reference/src/components/field/RadioButtons/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/field/TextArea/TextArea.tsx +86 -0
- package/templates/react-native-sdk-reference/src/components/field/TextArea/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/TextInput/TextInput.tsx +84 -0
- package/templates/react-native-sdk-reference/src/components/field/TextInput/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/field/URL/URL.tsx +86 -0
- package/templates/react-native-sdk-reference/src/components/field/URL/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/helpers/data_page.ts +20 -0
- package/templates/react-native-sdk-reference/src/components/helpers/event-utils.ts +20 -0
- package/templates/react-native-sdk-reference/src/components/helpers/instructions-utils.ts +57 -0
- package/templates/react-native-sdk-reference/src/components/helpers/state-utils.tsx +46 -0
- package/templates/react-native-sdk-reference/src/components/helpers/template-utils.ts +75 -0
- package/templates/react-native-sdk-reference/src/components/helpers/utils.ts +339 -0
- package/templates/react-native-sdk-reference/src/components/infra/ActionButtons/ActionButtons.tsx +63 -0
- package/templates/react-native-sdk-reference/src/components/infra/ActionButtons/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Assignment/Assignment.tsx +348 -0
- package/templates/react-native-sdk-reference/src/components/infra/Assignment/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/AssignmentCard/AssignmentCard.tsx +56 -0
- package/templates/react-native-sdk-reference/src/components/infra/AssignmentCard/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/FlowContainer/FlowContainer.tsx +57 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/FlowContainer/helpers.ts +137 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/FlowContainer/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/RootContainer/RootContainer.tsx +52 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/RootContainer/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/SimpleView/helper.ts +128 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/SimpleView/index.tsx +59 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/ViewContainer/ViewContainer.tsx +31 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/ViewContainer/helper.ts +39 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/ViewContainer/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Containers/helper.ts +9 -0
- package/templates/react-native-sdk-reference/src/components/infra/ErrorBoundary/ErrorBoundary.tsx +53 -0
- package/templates/react-native-sdk-reference/src/components/infra/ErrorBoundary/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/MultiStep/MultiStep.tsx +24 -0
- package/templates/react-native-sdk-reference/src/components/infra/MultiStep/index.ts +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Reference/Reference.tsx +68 -0
- package/templates/react-native-sdk-reference/src/components/infra/Reference/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/Reference/utils.ts +16 -0
- package/templates/react-native-sdk-reference/src/components/infra/Region/Region.tsx +10 -0
- package/templates/react-native-sdk-reference/src/components/infra/Region/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/infra/View/View.tsx +49 -0
- package/templates/react-native-sdk-reference/src/components/template/DefaultForm/DefaultForm.tsx +38 -0
- package/templates/react-native-sdk-reference/src/components/template/DefaultForm/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/template/DefaultForm/utils/index.ts +28 -0
- package/templates/react-native-sdk-reference/src/components/template/Details/Details.tsx +82 -0
- package/templates/react-native-sdk-reference/src/components/template/Details/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/components/template/OneColumn/OneColumn.tsx +29 -0
- package/templates/react-native-sdk-reference/src/components/template/OneColumn/index.tsx +1 -0
- package/templates/react-native-sdk-reference/src/context/LoaderContext.tsx +42 -0
- package/templates/react-native-sdk-reference/src/mediaco/AdvBanner.tsx +62 -0
- package/templates/react-native-sdk-reference/src/mediaco/Header.tsx +60 -0
- package/templates/react-native-sdk-reference/src/mediaco/HomeScreen.tsx +78 -0
- package/templates/react-native-sdk-reference/src/mediaco/QuickActions.tsx +68 -0
- package/templates/react-native-sdk-reference/src/mediaco/ResolutionScreen.tsx +48 -0
- package/templates/react-native-sdk-reference/src/mediaco/SafeArea.tsx +11 -0
- package/templates/react-native-sdk-reference/src/mediaco/TabBar.tsx +102 -0
- package/templates/react-native-sdk-reference/src/mediaco/YourServices.tsx +90 -0
- package/templates/react-native-sdk-reference/src/sdk-pega-component-map.ts +64 -0
- package/templates/react-native-sdk-reference/src/types/PConnProps.d.ts +41 -0
- package/templates/react-native-sdk-reference/src/utils/auth.ts +62 -0
- package/templates/react-native-sdk-reference/src/utils/init-pcore.ts +37 -0
- package/templates/react-native-sdk-reference/src/utils/pcore-polyfills.ts +66 -0
- package/templates/react-native-sdk-reference/tsconfig.json +9 -8
- package/templates/react-sdk-reference/.ai-common/agents/embedded-flow-expert.md +171 -0
- package/templates/react-sdk-reference/{.github/agents/implementation-expert.agent.md → .ai-common/agents/implementation-expert.md} +44 -48
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions-embedded.md +119 -0
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions.md +192 -0
- package/templates/react-sdk-reference/.ai-common/instructions/component-map.md +35 -0
- package/templates/react-sdk-reference/.ai-common/instructions/dse-component.md +47 -0
- package/templates/react-sdk-reference/.ai-common/instructions/embedded-component.md +134 -0
- package/templates/react-sdk-reference/.ai-common/instructions/field-component.md +50 -0
- package/templates/react-sdk-reference/.ai-common/instructions/template-component.md +43 -0
- package/templates/react-sdk-reference/.ai-common/instructions/widget-component.md +45 -0
- package/templates/react-sdk-reference/.ai-common/prompts/add-component.md +193 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/prompts/component-manifest.json +106 -2
- package/templates/react-sdk-reference/.ai-common/prompts/embedded-component-manifest.md +155 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-all-components.md +358 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-dse-components.md +165 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-embedded-components.md +315 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-field-components.md +190 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-template-components.md +227 -0
- package/templates/react-sdk-reference/.ai-common/prompts/generate-widget-components.md +172 -0
- 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 +61 -25
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Banner.md +176 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/CaseSummaryFields.md +180 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/DetailsFields.md +180 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/FieldGroup.md +153 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/FieldGroupList.md +136 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/FieldValueList.md +140 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/Operator.md +85 -41
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Pulse.md +97 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/RichTextEditor.md +226 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/design-system-extension-skills/WssQuickCreate.md +35 -20
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension.md +169 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/analyze-customer-repo.md +130 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/authenticate.md +311 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/run-and-verify-integration.md +156 -0
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/wire-integration.md +476 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-components.md +190 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +157 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/CancelAlert.md +178 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Checkbox.md +189 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Currency.md +136 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Date.md +126 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/DateTime.md +115 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Decimal.md +119 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Dropdown.md +136 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Email.md +99 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Group.md +88 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Integer.md +102 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Location.md +142 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/Multiselect.md +42 -53
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/ObjectReference.md +36 -60
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Percentage.md +113 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Phone.md +100 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/RadioButtons.md +153 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/RichText.md +117 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/ScalarList.md +95 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/SelectableCard.md +155 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/SemanticLink.md +35 -57
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/TextArea.md +109 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/field-skills/TextContent.md +27 -52
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/TextInput.md +112 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/Time.md +102 -0
- package/templates/react-sdk-reference/.ai-common/skills/field-skills/URL.md +96 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/field-skills/UserReference.md +41 -78
- package/templates/react-sdk-reference/.ai-common/skills/infra-components.md +165 -0
- package/templates/react-sdk-reference/.ai-common/skills/infra-skills/ActionButtons.md +122 -0
- package/templates/react-sdk-reference/.ai-common/skills/infra-skills/MultiStep.md +178 -0
- package/templates/react-sdk-reference/.ai-common/skills/infra-skills/Stages.md +140 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-components.md +198 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AdvancedSearch.md +126 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/AppShell.md +160 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/BannerPage.md +90 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseSummary.md +129 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseView.md +196 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/CaseViewActionsMenu.md +157 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/Confirmation.md +149 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/DataReference.md +46 -31
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DefaultForm.md +141 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/DefaultPage.md +40 -34
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/Details.md +96 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DetailsSubTabs.md +103 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DetailsThreeColumn.md +85 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DetailsTwoColumn.md +77 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/DynamicTabs.md +103 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/FieldGroupTemplate.md +130 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/HierarchicalForm.md +200 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/InlineDashboard.md +110 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/InlineDashboardPage.md +105 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/ListPage.md +21 -16
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +234 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/MultiReferenceReadOnly.md +18 -23
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/NarrowWide.md +161 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/OneColumn.md +114 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/PromotedFilters.md +132 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SelfServiceCaseView.md +173 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/SimpleTable.md +44 -24
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SingleReferenceReadOnly.md +103 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/SubTabs.md +89 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-skills/TwoColumn.md +133 -0
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/template-skills/WideNarrow.md +36 -43
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/WssNavBar.md +26 -45
- package/templates/react-sdk-reference/.ai-common/skills/widget-components.md +124 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/AppAnnouncement.md +94 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/Attachment.md +163 -0
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/CaseHistory.md +90 -0
- package/templates/react-sdk-reference/{.github → .ai-common}/skills/widget-skills/FileUtility.md +68 -62
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/Followers.md +24 -19
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/QuickCreate.md +27 -44
- package/templates/react-sdk-reference/{.claude → .ai-common}/skills/widget-skills/SummaryItem.md +35 -61
- package/templates/react-sdk-reference/.ai-common/skills/widget-skills/ToDo.md +261 -0
- package/templates/react-sdk-reference/package.json +1 -1
- package/templates/react-sdk-reference/package.minimal.json +29 -0
- package/templates/react-sdk-reference/pega-auth-0.2.44.tgz +0 -0
- package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -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/src/components/helpers/formatters/index.ts +13 -3
- package/templates/react-native-sdk-reference/.github/AGENTS.md +0 -23
- package/templates/react-native-sdk-reference/.github/copilot-instructions.md +0 -40
- package/templates/react-native-sdk-reference/.github/skills/pega-sdk-component.md +0 -48
- package/templates/react-native-sdk-reference/App.tsx +0 -49
- 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/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/Banner.md +0 -152
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/CaseSummaryFields.md +0 -159
- package/templates/react-sdk-reference/.claude/skills/design-system-extension-skills/DetailsFields.md +0 -148
- 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/FieldGroupList.md +0 -113
- 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.md +0 -291
- package/templates/react-sdk-reference/.claude/skills/field-components.md +0 -295
- package/templates/react-sdk-reference/.claude/skills/field-skills/AutoComplete.md +0 -113
- package/templates/react-sdk-reference/.claude/skills/field-skills/CancelAlert.md +0 -211
- 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/Decimal.md +0 -99
- package/templates/react-sdk-reference/.claude/skills/field-skills/Dropdown.md +0 -134
- package/templates/react-sdk-reference/.claude/skills/field-skills/Email.md +0 -109
- package/templates/react-sdk-reference/.claude/skills/field-skills/Group.md +0 -96
- package/templates/react-sdk-reference/.claude/skills/field-skills/Integer.md +0 -88
- package/templates/react-sdk-reference/.claude/skills/field-skills/Location.md +0 -145
- 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/TextArea.md +0 -98
- package/templates/react-sdk-reference/.claude/skills/field-skills/TextContent.md +0 -117
- 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/BannerPage.md +0 -86
- 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/DefaultForm.md +0 -104
- package/templates/react-sdk-reference/.claude/skills/template-skills/DefaultPage.md +0 -112
- package/templates/react-sdk-reference/.claude/skills/template-skills/Details.md +0 -90
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsSubTabs.md +0 -97
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsThreeColumn.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/DetailsTwoColumn.md +0 -80
- package/templates/react-sdk-reference/.claude/skills/template-skills/DynamicTabs.md +0 -106
- package/templates/react-sdk-reference/.claude/skills/template-skills/FieldGroupTemplate.md +0 -112
- package/templates/react-sdk-reference/.claude/skills/template-skills/HierarchicalForm.md +0 -116
- package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboard.md +0 -108
- package/templates/react-sdk-reference/.claude/skills/template-skills/InlineDashboardPage.md +0 -82
- 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/NarrowWide.md +0 -143
- package/templates/react-sdk-reference/.claude/skills/template-skills/OneColumn.md +0 -114
- package/templates/react-sdk-reference/.claude/skills/template-skills/PromotedFilters.md +0 -130
- package/templates/react-sdk-reference/.claude/skills/template-skills/SelfServiceCaseView.md +0 -142
- 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/template-skills/TwoColumn.md +0 -133
- package/templates/react-sdk-reference/.claude/skills/template-skills/WssNavBar.md +0 -139
- package/templates/react-sdk-reference/.claude/skills/widget-components.md +0 -260
- package/templates/react-sdk-reference/.claude/skills/widget-skills/AppAnnouncement.md +0 -84
- package/templates/react-sdk-reference/.claude/skills/widget-skills/Attachment.md +0 -151
- package/templates/react-sdk-reference/.claude/skills/widget-skills/CaseHistory.md +0 -110
- package/templates/react-sdk-reference/.claude/skills/widget-skills/FileUtility.md +0 -206
- 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/component-manifest.json +0 -193
- 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/copilot-instructions.md +0 -243
- package/templates/react-sdk-reference/.github/instructions/component-map.instructions.md +0 -40
- package/templates/react-sdk-reference/.github/instructions/dse-component.instructions.md +0 -77
- package/templates/react-sdk-reference/.github/instructions/field-component.instructions.md +0 -77
- package/templates/react-sdk-reference/.github/instructions/template-component.instructions.md +0 -95
- package/templates/react-sdk-reference/.github/instructions/widget-component.instructions.md +0 -90
- package/templates/react-sdk-reference/.github/prompts/add-component.prompt.md +0 -192
- package/templates/react-sdk-reference/.github/prompts/component-manifest.json +0 -193
- package/templates/react-sdk-reference/.github/prompts/generate-all-components.prompt.md +0 -411
- package/templates/react-sdk-reference/.github/prompts/generate-dse-components.prompt.md +0 -205
- package/templates/react-sdk-reference/.github/prompts/generate-field-components.prompt.md +0 -223
- package/templates/react-sdk-reference/.github/prompts/generate-template-components.prompt.md +0 -229
- package/templates/react-sdk-reference/.github/prompts/generate-widget-components.prompt.md +0 -208
- 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/FieldGroup.md +0 -134
- 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/FieldValueList.md +0 -118
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Operator.md +0 -155
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/Pulse.md +0 -85
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/RichTextEditor.md +0 -232
- package/templates/react-sdk-reference/.github/skills/design-system-extension-skills/WssQuickCreate.md +0 -137
- package/templates/react-sdk-reference/.github/skills/design-system-extension.md +0 -291
- 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/Integer.md +0 -88
- package/templates/react-sdk-reference/.github/skills/field-skills/Location.md +0 -145
- package/templates/react-sdk-reference/.github/skills/field-skills/Multiselect.md +0 -188
- package/templates/react-sdk-reference/.github/skills/field-skills/ObjectReference.md +0 -173
- package/templates/react-sdk-reference/.github/skills/field-skills/Percentage.md +0 -93
- package/templates/react-sdk-reference/.github/skills/field-skills/Phone.md +0 -129
- package/templates/react-sdk-reference/.github/skills/field-skills/RadioButtons.md +0 -167
- package/templates/react-sdk-reference/.github/skills/field-skills/RichText.md +0 -149
- package/templates/react-sdk-reference/.github/skills/field-skills/ScalarList.md +0 -134
- package/templates/react-sdk-reference/.github/skills/field-skills/SelectableCard.md +0 -231
- package/templates/react-sdk-reference/.github/skills/field-skills/SemanticLink.md +0 -155
- package/templates/react-sdk-reference/.github/skills/field-skills/TextArea.md +0 -98
- package/templates/react-sdk-reference/.github/skills/field-skills/TextInput.md +0 -107
- package/templates/react-sdk-reference/.github/skills/field-skills/Time.md +0 -89
- package/templates/react-sdk-reference/.github/skills/field-skills/URL.md +0 -86
- 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-components.md +0 -321
- package/templates/react-sdk-reference/.github/skills/template-skills/AdvancedSearch.md +0 -150
- 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/CaseSummary.md +0 -106
- 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/Confirmation.md +0 -109
- 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/Details.md +0 -90
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsSubTabs.md +0 -97
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsThreeColumn.md +0 -80
- package/templates/react-sdk-reference/.github/skills/template-skills/DetailsTwoColumn.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/ListPage.md +0 -70
- 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/OneColumn.md +0 -114
- 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/SimpleTable.md +0 -131
- package/templates/react-sdk-reference/.github/skills/template-skills/SingleReferenceReadOnly.md +0 -108
- package/templates/react-sdk-reference/.github/skills/template-skills/SubTabs.md +0 -82
- 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/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/QuickCreate.md +0 -118
- 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/pega-auth-0.2.42.tgz +0 -0
- /package/templates/react-sdk-reference/{.claude → .ai-common}/skills/run-and-verify.md +0 -0
package/templates/react-sdk-reference/{.github → .ai-common}/skills/template-skills/WssNavBar.md
RENAMED
|
@@ -12,13 +12,13 @@ Provides the top navigation bar for WSS (Web Self-Service) portals. Responsive:
|
|
|
12
12
|
|
|
13
13
|
## Pega Metadata
|
|
14
14
|
|
|
15
|
-
- **Registration key:** `WssNavBar` (in
|
|
15
|
+
- **Registration key:** `WssNavBar` (in the project's component map)
|
|
16
16
|
- **Category:** Navigation template — WSS portal
|
|
17
|
-
- **Extends:**
|
|
17
|
+
- **Extends:** the project's base component interface
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Inputs
|
|
20
20
|
|
|
21
|
-
|
|
|
21
|
+
| Input | Type | Required | Description |
|
|
22
22
|
| ------------------- | ---------- | -------- | ----------------------------------------------------- |
|
|
23
23
|
| `links` | `array` | Yes | Array of `{ label, url, id }` navigation link objects |
|
|
24
24
|
| `navDisplayOptions` | `object` | No | `{ alignment: 'left' | 'right' | 'center', position: 'inline' | 'below' }` |
|
|
@@ -26,14 +26,26 @@ Provides the top navigation bar for WSS (Web Self-Service) portals. Responsive:
|
|
|
26
26
|
| `operatorInfo` | `object` | No | `{ displayName: string }` — for avatar initials |
|
|
27
27
|
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
28
28
|
|
|
29
|
+
## Implementation Structure
|
|
30
|
+
|
|
31
|
+
**Module Setup:** Use the project's base component interface for typing. Import the `logout` function from the SDK auth manager (`@pega/auth/lib/sdk-auth-manager`). Include a companion styles file for layout. Register the component under its key in the project's component map.
|
|
32
|
+
|
|
33
|
+
**Main Component Logic** — steps in order:
|
|
34
|
+
|
|
35
|
+
1. Receive inputs: `appInfo`, `navLinks`, `operator`, and `navDisplayOptions`; further destructure `alignment` and `position` from `navDisplayOptions`.
|
|
36
|
+
2. Declare local state for menu anchoring: one for the mobile hamburger menu, one for the user/avatar menu (both initialized to `null`). Bind `localizedVal` to `PCore.getLocaleUtils().getLocaleValue`.
|
|
37
|
+
3. Build a reusable `navLinksContent` element — a container hidden on mobile and shown as a flex row on desktop (justified per `alignment`), containing one button per nav link that invokes the link's `onClick`.
|
|
38
|
+
4. Render an app bar with static position, containing a toolbar with, in order: the app logo/name button (invoking `appInfo.onClick`, showing `appInfo.imageSrc` and `appInfo.appName`); a hamburger icon button shown only on mobile that opens the mobile menu; a mobile dropdown menu (anchored to the hamburger state, open when set, closing by resetting to `null`) listing each nav link as a menu item; the `navLinksContent` block rendered inline when `position === 'inline'`; and an avatar showing `operator.currentUserInitials` that opens a user menu containing a "Log off" menu item (localized via `localizedVal('Log off', 'AppShell')`) wired to the imported `logout` function.
|
|
39
|
+
5. When `position === 'below'`, render the `navLinksContent` block again below the toolbar, still inside the app bar.
|
|
40
|
+
|
|
29
41
|
## Behavioral Contract
|
|
30
42
|
|
|
31
43
|
### Responsive Layout
|
|
32
44
|
|
|
33
|
-
- **Mobile (
|
|
34
|
-
- On click: opens a
|
|
35
|
-
- CSS
|
|
36
|
-
- **Desktop (
|
|
45
|
+
- **Mobile (narrow viewport):** Hamburger menu button shown; nav links hidden.
|
|
46
|
+
- On click: opens a dropdown or drawer with nav links.
|
|
47
|
+
- CSS approach: hide nav links at narrow breakpoint, show hamburger; reverse at wide breakpoint.
|
|
48
|
+
- **Desktop (wide viewport):** Nav links shown inline; hamburger hidden.
|
|
37
49
|
|
|
38
50
|
### Navigation Position
|
|
39
51
|
|
|
@@ -47,7 +59,7 @@ From `navDisplayOptions.position`:
|
|
|
47
59
|
From `navDisplayOptions.alignment`:
|
|
48
60
|
|
|
49
61
|
- `'left'` — links flush left.
|
|
50
|
-
- `'right'` — links pushed to the right (flex with
|
|
62
|
+
- `'right'` — links pushed to the right (e.g., flex with auto-margin on left side).
|
|
51
63
|
- `'center'` — links centered.
|
|
52
64
|
|
|
53
65
|
### Operator Avatar
|
|
@@ -55,7 +67,7 @@ From `navDisplayOptions.alignment`:
|
|
|
55
67
|
- Extract initials from `operatorInfo.displayName`:
|
|
56
68
|
- Split by space, take first letter of first and last word.
|
|
57
69
|
- E.g. `"John Smith"` → `"JS"`.
|
|
58
|
-
- Render as
|
|
70
|
+
- Render as a circular avatar element with initials text.
|
|
59
71
|
- Clicking avatar opens a menu with a Logout option.
|
|
60
72
|
|
|
61
73
|
### Logout
|
|
@@ -65,27 +77,7 @@ From `navDisplayOptions.alignment`:
|
|
|
65
77
|
|
|
66
78
|
### Render Structure
|
|
67
79
|
|
|
68
|
-
|
|
69
|
-
<AppBar position='static'>
|
|
70
|
-
<Toolbar>
|
|
71
|
-
{/* Logo */}
|
|
72
|
-
{portalLogoUrl && <img src={portalLogoUrl} alt='logo' />}
|
|
73
|
-
|
|
74
|
-
{/* Hamburger (mobile) */}
|
|
75
|
-
<IconButton sx={{ display: { xs: 'flex', md: 'none' } }} onClick={openMobileMenu}>
|
|
76
|
-
<MenuIcon />
|
|
77
|
-
</IconButton>
|
|
78
|
-
|
|
79
|
-
{/* Nav links (desktop) */}
|
|
80
|
-
<Box sx={{ display: { xs: 'none', md: 'flex' }, ...alignmentStyles }}>
|
|
81
|
-
{links.map(link => <Button key={link.id} href={link.url}>{link.label}</Button>)}
|
|
82
|
-
</Box>
|
|
83
|
-
|
|
84
|
-
{/* Operator avatar */}
|
|
85
|
-
<Avatar onClick={openUserMenu}>{initials}</Avatar>
|
|
86
|
-
</Toolbar>
|
|
87
|
-
</AppBar>
|
|
88
|
-
```
|
|
80
|
+
An app bar (static position) containing a toolbar with, in order: the portal logo image (when `portalLogoUrl` is set); a hamburger icon button hidden on desktop that opens the mobile menu; a nav-links container hidden on mobile / shown on desktop applying the alignment styles, with one button per link (using `link.url` as the href and `link.label` as the text); and an avatar showing the operator initials that opens the user menu.
|
|
89
81
|
|
|
90
82
|
## Visual Specifications
|
|
91
83
|
|
|
@@ -110,29 +102,18 @@ From `navDisplayOptions.alignment`:
|
|
|
110
102
|
- `portalLogoUrl` is async — show fallback text until resolved.
|
|
111
103
|
- `operatorInfo.displayName` may be undefined — guard and show a default avatar (single letter or icon).
|
|
112
104
|
- `navDisplayOptions` may be absent — default to `{ alignment: 'left', position: 'inline' }`.
|
|
113
|
-
- Mobile
|
|
105
|
+
- Mobile menu state must be managed separately from the user menu state.
|
|
114
106
|
|
|
115
107
|
## Dependencies
|
|
116
108
|
|
|
117
109
|
- `logout` from `@pega/auth/lib/sdk-auth-manager` — logout handler
|
|
118
|
-
-
|
|
119
|
-
- MUI Icons: `<MenuIcon>`
|
|
110
|
+
- The project's design system components for app bar, toolbar, icon button, avatar, menu, and button elements
|
|
120
111
|
|
|
121
112
|
## Design System Mapping
|
|
122
113
|
|
|
123
114
|
**UI control type:** Responsive application navigation bar with avatar and logout.
|
|
124
115
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
| Design System | App Bar | Avatar | Mobile Menu |
|
|
128
|
-
| ------------------ | ------------------------ | ---------------------- | ------------------------ |
|
|
129
|
-
| Default (CSS only) | `<header>` + CSS | `<div class='avatar'>` | CSS hamburger + dropdown |
|
|
130
|
-
| MUI | `<AppBar>` + `<Toolbar>` | `<Avatar>` | `<Drawer>` or `<Menu>` |
|
|
131
|
-
| Ant Design | `<Layout.Header>` | `<Avatar>` | `<Drawer>` |
|
|
132
|
-
| Chakra UI | `<Box as='header'>` | `<Avatar>` | `<Drawer>` |
|
|
133
|
-
| Shadcn/ui | Custom `<header>` | Custom initials avatar | `<Sheet>` (drawer) |
|
|
134
|
-
|
|
135
|
-
When implementing in a specific design system:
|
|
116
|
+
When implementing, choose the design system's app bar, avatar, and mobile menu (drawer or dropdown) components that match the project's chosen library. All design systems must preserve:
|
|
136
117
|
|
|
137
118
|
- `logout` from `@pega/auth/lib/sdk-auth-manager` is mandatory — always call the SDK logout, not a custom one
|
|
138
119
|
- Responsive breakpoints for hamburger/nav visibility must be implemented
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Skill: Widget Components
|
|
2
|
+
|
|
3
|
+
Create or replace widget components in the project. Widgets are self-contained UI blocks that fetch their own data from Pega APIs (data pages, case info) and render interactive features (ToDo lists, attachments, case history, etc.).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Architecture Overview
|
|
8
|
+
|
|
9
|
+
Each widget lives in its own folder under the project's widget components directory, named after the component. The folder typically contains: the component implementation file; optionally a re-export module; optionally a companion stylesheet; optionally a widget-specific utilities module; optionally a types definition module; and optionally a metadata file.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Input Contract
|
|
14
|
+
|
|
15
|
+
Widget components extend the project's **base component interface** (which provides `getPConnect`). A typical widget input contract adds widget-specific inputs provided by the platform, such as `datasource`, `headerText`, and `context`.
|
|
16
|
+
|
|
17
|
+
Some widgets extend the project's **field input contract** when they behave like form fields (e.g., Attachment): the Attachment input contract overrides `value` to be `any` (an attachment list rather than a string), and adds `allowMultiple` and `extensions`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Implementation Pattern
|
|
22
|
+
|
|
23
|
+
### Data-Fetching Widget
|
|
24
|
+
|
|
25
|
+
Widgets typically fetch data from Pega data pages on mount. This pattern is design-system agnostic. The design-system render section must be replaced with your design system's presentation primitives (card, list, table, etc.) — see "Design System Adaptation" below.
|
|
26
|
+
|
|
27
|
+
**Module Setup:** The component depends on local state management and a lifecycle effect for data fetching, plus the design system's presentation components (card, list, etc.). Define the input contract as an extension of the project's base component interface with `datasource` and `headerText` fields.
|
|
28
|
+
|
|
29
|
+
**Main Component Logic** — steps in order:
|
|
30
|
+
|
|
31
|
+
1. Receive `getPConnect`, `datasource`, and `headerText` (default `'My Widget'`) from inputs; call `getPConnect()` into `pConn`. Declare `data` local state (array, default empty) and `loading` local state (boolean, default `true`).
|
|
32
|
+
2. **Fetch data from a Pega data page on mount** — this block is always the same regardless of design system. In a lifecycle effect that runs once on initialization: resolve `context` via `pConn.getContextName()`; call `PCore.getDataPageUtils().getDataAsync(datasource?.source, context, {}, { pageNumber: 1, pageSize: 10 }, { select: [{ field: 'pyID' }, { field: 'pyLabel' }] }, { invalidateCache: true })` — where `datasource?.source` is the data page name (e.g. `'D_WorkList'`); on success, set `data` to `response?.data` when it is an array (otherwise an empty array) and set `loading` to `false`; on failure, just set `loading` to `false`.
|
|
33
|
+
3. **Loading state** — while `loading` is true, render a simple loading placeholder (replace with the design system's loading indicator if available).
|
|
34
|
+
4. **Design-system render** — once loaded, render the design system's card/list primitives: a card with a header showing `headerText`, and inside the card content, a list where each `data` item (keyed by index) renders `item.pyLabel`. See "Design System Adaptation" below for guidance on choosing the actual DS components.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Design System Adaptation
|
|
39
|
+
|
|
40
|
+
The PCore data-fetching logic (all `PCore.*` calls) is always identical regardless of design system. Only the design-system render section changes.
|
|
41
|
+
|
|
42
|
+
**1. Check the component-specific skill file** — `{{SKILL_DIR}}/widget-skills/<ComponentName>.md` contains a **Design System Mapping** section where available. Use it as a starting point.
|
|
43
|
+
|
|
44
|
+
**2. If the chosen design system is not covered** — use the component purpose description to identify the appropriate DS primitives (card, list, table, button, badge, etc.).
|
|
45
|
+
|
|
46
|
+
**3. Discover the API from installed packages** — confirm component names and inputs from the design system's type declaration files before writing the render markup.
|
|
47
|
+
|
|
48
|
+
**4. Common widget UI primitive mapping:**
|
|
49
|
+
|
|
50
|
+
| Widget pattern | Typical DS equivalent |
|
|
51
|
+
| -------------------- | ----------------------------------------------- |
|
|
52
|
+
| Container with title | Card + header/title, or Panel, Box |
|
|
53
|
+
| Item list | List, or Table rows |
|
|
54
|
+
| Loading indicator | Spinner, Skeleton, Loading |
|
|
55
|
+
| Action button | Button with click handler |
|
|
56
|
+
| Status badge | Badge, Tag, Chip |
|
|
57
|
+
| Empty state | DS empty/placeholder component or plain element |
|
|
58
|
+
|
|
59
|
+
**5. Icons** — if the DS has a companion icon package, check its exports before using any icon name. Never guess icon names.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### Action Widget (opens assignments/cases)
|
|
64
|
+
|
|
65
|
+
Define `openAssignment(assignment)`: resolve `classname` and `ID` from `assignment`; resolve `context` via `getPConnect().getContextName()`; build `options = { containerName: 'primary', channelName: '' }`; then call `PCore.getMashupApi().openAssignment(ID, classname, options)`. Define `createCase(caseType)` to call `PCore.getMashupApi().createCase(caseType, PCore.getConstants().APP.APP)`.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Common Pega APIs Used in Widgets
|
|
70
|
+
|
|
71
|
+
### Data Pages
|
|
72
|
+
|
|
73
|
+
Fetch list data via `PCore.getDataPageUtils().getDataAsync(dataPageName, context, params, paging, query, options)`. Get a single-record page via `PCore.getDataPageUtils().getPageDataAsync(dataPageName, context, params)`.
|
|
74
|
+
|
|
75
|
+
### Case Info
|
|
76
|
+
|
|
77
|
+
Call `getPConnect()` into `pConn`, then read `pConn.getCaseInfo().getKey()` for the case key, `pConn.getCaseInfo().getID()` for the case ID, and `pConn.getCaseInfo().getName()` for the case name.
|
|
78
|
+
|
|
79
|
+
### Attachments
|
|
80
|
+
|
|
81
|
+
Use `PCore.getAttachmentUtils().prepareAttachmentData(value)` to prepare attachment data, `PCore.getAttachmentUtils().uploadAttachment(file, onProgress, errorHandler, context)` to upload, and `PCore.getAttachmentUtils().downloadAttachment(attachmentID, context)` to download.
|
|
82
|
+
|
|
83
|
+
### Actions
|
|
84
|
+
|
|
85
|
+
Resolve `actionsApi` via `pConn.getActionsApi()`, then use `actionsApi.updateFieldValue(propName, value)` to update a field's value, `actionsApi.triggerFieldChange(propName, value)` to trigger a field change event, and `actionsApi.openLocalAction(actionName, options)` to open a local action.
|
|
86
|
+
|
|
87
|
+
### Container Management
|
|
88
|
+
|
|
89
|
+
Resolve `containerManager` via `pConn.getContainerManager()`, then call `containerManager.addContainerItem({ semanticURL, key, flowName, caseViewMode, resourceType, data })` to add a container item.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Registration
|
|
94
|
+
|
|
95
|
+
Register widgets in the project's component map: import the widget's default export from its folder under the widget components directory, then add it to the object returned by the project's component registration function. The key must match the Pega component name.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Existing Widget Components
|
|
100
|
+
|
|
101
|
+
| Component | Description | Key APIs |
|
|
102
|
+
| --------------- | --------------------------- | ------------------------------------------------------------------- |
|
|
103
|
+
| AppAnnouncement | System-wide announcements | `PCore.getMessagingServiceUtils()` |
|
|
104
|
+
| Attachment | File upload/download | `PCore.getAttachmentUtils()` |
|
|
105
|
+
| CaseHistory | Case audit trail | `PCore.getDataPageUtils()` |
|
|
106
|
+
| FileUtility | File management utility | `PCore.getAttachmentUtils()` |
|
|
107
|
+
| Followers | Case followers list | `PCore.getDataPageUtils()` |
|
|
108
|
+
| QuickCreate | Quick case creation buttons | `PCore.getMashupApi().createCase()` |
|
|
109
|
+
| SummaryItem | Single summary card | Inputs from parent |
|
|
110
|
+
| SummaryList | List of summary cards | Inputs from parent |
|
|
111
|
+
| ToDo | Assignment worklist | `PCore.getDataPageUtils()`, `PCore.getMashupApi().openAssignment()` |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Key Conventions
|
|
116
|
+
|
|
117
|
+
1. **Default export** — Each component is exported as the module's default export.
|
|
118
|
+
2. **Self-contained data** — Widgets fetch their own data (don't rely on parent passing data down).
|
|
119
|
+
3. **Loading states** — Always handle loading/error states when fetching data.
|
|
120
|
+
4. **PCore globals** — Access `PCore` directly (declared globally by the Pega runtime type definitions).
|
|
121
|
+
5. **Localization** — Use `pConn.getLocalizationService()` for translated strings when available.
|
|
122
|
+
6. **Context** — Use `pConn.getContextName()` as the context parameter for data page calls.
|
|
123
|
+
7. **Card layout** — Widgets typically render inside the design system's card component with a header and content area.
|
|
124
|
+
8. **Action handling** — Use `PCore.getMashupApi()` for case/assignment operations, `actionsApi` for field updates.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Skill: AppAnnouncement
|
|
2
|
+
|
|
3
|
+
Card-based announcement widget. Displays a system-wide or application announcement with an optional bullet list of items and a "See what's new" external link button.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`widget-components.md`](../widget-components.md) — covers architecture, inputs interface, data-fetching patterns, and registration conventions common to ALL widget components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders an announcement card with a heading, description text, optional bullet list of items sourced from a `datasource` input, and an optional external link button. Styled with a left accent border to visually distinguish it from other cards.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Registration key:** `AppAnnouncement` (registered in the project's component map)
|
|
16
|
+
- **Category:** Widget — informational display
|
|
17
|
+
- **Extends:** the project's base component interface
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
| Input | Type | Required | Description |
|
|
22
|
+
| -------------- | ---------- | -------- | ---------------------------------------------------------------------- |
|
|
23
|
+
| `header` | `string` | No | Announcement card title |
|
|
24
|
+
| `description` | `string` | No | Announcement body text |
|
|
25
|
+
| `datasource` | `object` | No | Data source object — `datasource.source` is an array of item objects |
|
|
26
|
+
| `whatsnewlink` | `string` | No | URL for the "See what's new" button; if absent, button is not rendered |
|
|
27
|
+
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
28
|
+
|
|
29
|
+
## Implementation Structure
|
|
30
|
+
|
|
31
|
+
**Module Setup:** The component's inputs interface extends the project's base component interface with optional `header` (string), `description` (string), `datasource` (any), and `whatsnewlink` (string).
|
|
32
|
+
|
|
33
|
+
**Main Component Logic** — steps in order:
|
|
34
|
+
|
|
35
|
+
1. Receive `header`, `description`, `datasource`, and `whatsnewlink` from inputs, each defaulting to an empty string (`datasource` defaulting to an empty array).
|
|
36
|
+
2. Extract item names from `datasource`: map `datasource?.source` to an array of each item's `name` property, defaulting to an empty array when `datasource.source` is absent.
|
|
37
|
+
3. Render a card with a left accent border (6px solid, using the primary light color token) and vertical margin (`0.5rem 0` top/bottom) so the card has proper spacing from sibling elements — this margin is required, without it the card has no top spacing. Inside, render a card header containing the `header` text as a heading, followed by a card content block containing the `description` paragraph and one paragraph per extracted item name (prefixed with a dash). When `whatsnewlink` is non-empty, render a card actions block with a button labeled "See what's new" that opens `whatsnewlink` in a new browser tab on click.
|
|
38
|
+
|
|
39
|
+
## Behavioral Contract
|
|
40
|
+
|
|
41
|
+
1. **Item list extraction:** If `datasource` is provided and `datasource.source` is a non-empty array, extract item names and render them as a bullet list. Each array item is expected to have a `name` property.
|
|
42
|
+
2. **Button:** If `whatsnewlink` is non-empty, render a button labeled `"See what's new"` (or localized equivalent). On click, open the URL in a new browser tab (`window.open(whatsnewlink, '_blank')`).
|
|
43
|
+
3. **Description:** Render the `description` string as plain text below the header.
|
|
44
|
+
4. **No data fetching:** This widget is purely input-driven — it does not call any PCore data APIs.
|
|
45
|
+
|
|
46
|
+
## Visual Specifications
|
|
47
|
+
|
|
48
|
+
### Card Layout
|
|
49
|
+
|
|
50
|
+
| Element | Position |
|
|
51
|
+
| ----------------------- | --------------------------------------- |
|
|
52
|
+
| Left accent border | 6px solid, primary light color |
|
|
53
|
+
| Card header | `header` input as title |
|
|
54
|
+
| Card content | Description text + optional bullet list |
|
|
55
|
+
| "See what's new" button | Below description / bullet list |
|
|
56
|
+
|
|
57
|
+
**CSS-only implementation notes:**
|
|
58
|
+
|
|
59
|
+
- Card: `border-left: 6px solid var(--app-primary-light-color); border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.12); margin: 0.5rem 0` — the vertical margin ensures consistent spacing with sibling widgets (e.g., Pulse).
|
|
60
|
+
- Card header: `padding: 12px 16px; font-weight: 600`.
|
|
61
|
+
- Card content: `padding: 0 16px 16px`.
|
|
62
|
+
- Bullet list: `padding-left: 1.5rem; margin: 0.5rem 0`.
|
|
63
|
+
- "See what's new" button: `margin-top: 0.75rem; text-transform: none`.
|
|
64
|
+
|
|
65
|
+
## Edge Cases & Special Logic
|
|
66
|
+
|
|
67
|
+
- `datasource` may be `undefined` or `datasource.source` may be an empty array — in both cases, render no bullet list.
|
|
68
|
+
- `whatsnewlink` may be an empty string — treat the same as absent (no button rendered).
|
|
69
|
+
- `header` and `description` may both be absent — render the card with empty/placeholder content without crashing.
|
|
70
|
+
- Item objects in `datasource.source` are expected to have `name` — guard against items where `name` is `undefined`.
|
|
71
|
+
|
|
72
|
+
## Dependencies
|
|
73
|
+
|
|
74
|
+
- The design system's card component (with header, content, and actions regions)
|
|
75
|
+
- The design system's typography component
|
|
76
|
+
- The design system's button component
|
|
77
|
+
|
|
78
|
+
## Design System Mapping
|
|
79
|
+
|
|
80
|
+
**UI control type:** Announcement / informational card with bullet list and external link.
|
|
81
|
+
|
|
82
|
+
When implementing in a specific design system, map the following:
|
|
83
|
+
|
|
84
|
+
- **Card container:** A card component with distinct header, content, and footer/actions regions. Apply a 6px solid left accent border using the primary light color token — this is the key visual identifier.
|
|
85
|
+
- **Card header:** Renders the `header` text as a heading-level element (typically h6 weight).
|
|
86
|
+
- **Card content:** Contains the `description` as body text, followed by the optional bullet list (one item per line, prefixed with a dash or rendered as a standard unordered list).
|
|
87
|
+
- **Card actions / footer:** Contains the "See what's new" button. This button must open the URL in a new tab with appropriate security attributes.
|
|
88
|
+
- **Button:** A primary-colored text or outlined button with no text transformation (no uppercase).
|
|
89
|
+
|
|
90
|
+
Implementation notes:
|
|
91
|
+
|
|
92
|
+
- Left accent border is a key visual identifier — implement it via CSS or the design system's border utilities
|
|
93
|
+
- "See what's new" must open in a new tab with `rel='noopener noreferrer'`
|
|
94
|
+
- The widget is entirely input-driven — no data fetching needed
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Skill: Attachment
|
|
2
|
+
|
|
3
|
+
File upload/download widget for case attachments. Behaves like a form field — binds to a case attachment property, supports multiple files, validates extensions and size, tracks upload progress, and blocks form submission during active uploads.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`widget-components.md`](../widget-components.md) — covers architecture, inputs interface, data-fetching patterns, and registration conventions common to ALL widget components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a file attachment control within a Pega form. Users can upload one or multiple files, download existing attachments, and delete attachments. The widget validates file extensions and enforces a maximum size from environment config. Upload progress is shown per-file. Form submission is blocked while uploads are in progress via the action sequencer.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Registration key:** `Attachment` (registered in the project's component map)
|
|
16
|
+
- **Category:** Widget — form field (file input)
|
|
17
|
+
- **Extends:** the project's base component interface (with `value` typed as `any` instead of the standard string value)
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
| Input | Type | Required | Description |
|
|
22
|
+
| ------------------ | ------------------- | ------------------------- | ---------------------------------------------------------------------------- |
|
|
23
|
+
| `value` | `any` | Yes | Attachment list or single attachment object (from Pega property) |
|
|
24
|
+
| `allowMultiple` | `boolean \| string` | No | Whether multiple files can be attached. Default `false` |
|
|
25
|
+
| `extensions` | `string` | No | Comma-separated list of allowed file extensions (e.g., `".pdf,.doc,.jpg"`) |
|
|
26
|
+
| `editMode` | `string` | No | `"tableRows"` for inline table edit mode (special multi-attachment handling) |
|
|
27
|
+
| `isTableFormatter` | `boolean` | No | Whether this widget is used inside a table formatter |
|
|
28
|
+
| `label` | `string` | Yes (from base interface) | Field label |
|
|
29
|
+
| `required` | `boolean` | No | Whether a file is required |
|
|
30
|
+
| `disabled` | `boolean` | No | Whether the control is disabled |
|
|
31
|
+
| `displayMode` | `string` | No | `"DISPLAY_ONLY"` for read-only rendering |
|
|
32
|
+
| `validatemessage` | `string` | No | Validation error message to display |
|
|
33
|
+
| `helperText` | `string` | No | Helper text shown below the control |
|
|
34
|
+
| `getPConnect` | `function` | Yes | PConnect getter |
|
|
35
|
+
|
|
36
|
+
## Implementation Structure
|
|
37
|
+
|
|
38
|
+
This is a complex form-field widget (~400 lines). Key structural outline:
|
|
39
|
+
|
|
40
|
+
**Module Setup:** The component requires local state, lifecycle effects, cached callbacks, memoized computations, and instance references. It depends on `validateMaxSize` from the project's attachment helpers, as well as `clearFieldErrorMessages`, `deleteAttachments`, `getIconFromFileType`, `insertAttachments`, a deep-memo utility, a file-download utility, and `validateFileExtension` from the component's own utility module. The component's inputs interface extends the project's base component interface (with `value` as `any`) plus `allowMultiple` (boolean or string), `extensions` (string), `editMode` (string), and `isTableFormatter` (boolean).
|
|
41
|
+
|
|
42
|
+
**Main Component Logic** — steps in order:
|
|
43
|
+
|
|
44
|
+
1. Receive `value`, `getPConnect`, `label`, `validatemessage`, `extensions`, `displayMode`, `helperText`, `editMode`, and `isTableFormatter` from inputs; also receive `required`, `disabled`, and `allowMultiple` as mutable locals. Coerce each of `required`, `disabled`, and `allowMultiple` to a real boolean (true when the value is literally `true` or the string `'true'`), since these may arrive as string booleans.
|
|
45
|
+
2. Call `getPConnect()` into `pConn`; store `actionSequencer = PCore.getActionsSequencer()` via a memoized computation (no dependencies); resolve `contextName = pConn.getContextName()`.
|
|
46
|
+
3. **Normalize attachment data** (old vs. new format): call `PCore.getAttachmentUtils().prepareAttachmentData(value)` to get `{ attachments, isOldAttachment }`.
|
|
47
|
+
4. **Set the reference list**: read `valueRef` from `(pConn.getStateProps() as any).value`, then call `pConn.setReferenceList('.' + valueRef)`.
|
|
48
|
+
5. Declare local state: `files` (array, initialized from `attachments`) and `toggleUploadBegin` (boolean, default `false`).
|
|
49
|
+
6. Define `deleteFile`: removes the file from local state, calls `deleteAttachments`, and deregisters it from the action sequencer.
|
|
50
|
+
7. Define `onFileAdded`: validates the file's extension and size, adds it to `files`, and sets `toggleUploadBegin`.
|
|
51
|
+
8. Define `uploadFiles`: registers a blocking action via the sequencer, uploads each file via `uploadAttachment`, and calls `insertAttachments` on success.
|
|
52
|
+
9. In a lifecycle effect keyed on `toggleUploadBegin`, trigger `uploadFiles` when it changes.
|
|
53
|
+
10. In another lifecycle effect, subscribe to the `ASSIGNMENT_SUBMISSION` event for state override (block submission while uploads are pending).
|
|
54
|
+
11. **Render**: a container element with the field `label`, an upload button (hidden native file input plus a styled button), validation/helper text, and the file list — each row showing an icon, name, metadata, upload progress, and a delete button.
|
|
55
|
+
|
|
56
|
+
> **Key patterns:** Action sequencer blocking (`registerBlockingAction`/`deRegisterBlockingAction`), `prepareAttachmentData` normalization, per-file progress tracking, `insertAttachments`/`deleteAttachments` helpers for state management.
|
|
57
|
+
|
|
58
|
+
## Behavioral Contract
|
|
59
|
+
|
|
60
|
+
### Attachment Format Detection
|
|
61
|
+
|
|
62
|
+
Pega has two attachment data formats — detect which one is in use:
|
|
63
|
+
|
|
64
|
+
**Old format (annotation-based):** `value` is an object shaped like `{ pxResults: [...], pyAttachCount: N }`.
|
|
65
|
+
|
|
66
|
+
**New standard format:** `value` is an array of attachment objects, each shaped like `{ ID, name, mimeType, category, ... }`.
|
|
67
|
+
|
|
68
|
+
Call `PCore.getAttachmentUtils().prepareAttachmentData(value)` to normalize both formats into a unified `FileObject[]` array.
|
|
69
|
+
|
|
70
|
+
### File Validation
|
|
71
|
+
|
|
72
|
+
On file selection (via a file-picker control):
|
|
73
|
+
|
|
74
|
+
1. **Extension check:** Compare selected file's extension against the `extensions` input (split by comma). If not allowed, add an error to the file and do not upload.
|
|
75
|
+
2. **Size check:** Compare file size against `PCore.getEnvironmentInfo().getMaxAttachmentSize()` (in bytes). If too large, add a size error.
|
|
76
|
+
3. Valid files proceed to upload.
|
|
77
|
+
|
|
78
|
+
### Upload Flow
|
|
79
|
+
|
|
80
|
+
1. Call `PCore.getActionsSequencer().addAction('attachment_upload_' + fileId)` — blocks form submission.
|
|
81
|
+
2. Call `PCore.getAttachmentUtils().uploadAttachment(file, onProgress, onError, context)`.
|
|
82
|
+
3. On progress: update per-file `progress` value (0–100) in local state.
|
|
83
|
+
4. On success: add the returned attachment metadata to the local file list; update the Pega property via `pConn.setReferenceList(newAttachmentList)`.
|
|
84
|
+
5. Call `PCore.getActionsSequencer().removeAction('attachment_upload_' + fileId)` — unblocks form submission.
|
|
85
|
+
6. On error: set file error state; call `PCore.getMessageManager().addMessages([errorMessage])`.
|
|
86
|
+
|
|
87
|
+
### Download
|
|
88
|
+
|
|
89
|
+
Call `PCore.getAttachmentUtils().downloadAttachment(attachmentID, context)` — triggers browser file download.
|
|
90
|
+
|
|
91
|
+
### Delete
|
|
92
|
+
|
|
93
|
+
Remove the attachment from the local list and update `pConn.setReferenceList(updatedList)`. Do not call a separate delete API in the reference implementation — deletion is committed on form save.
|
|
94
|
+
|
|
95
|
+
### Pub-Sub: Assignment Submission
|
|
96
|
+
|
|
97
|
+
Subscribe to `PCore.getPubSubUtils().subscribe(BEFORE_ASSIGNMENT_SUBMIT, handleBeforeSubmit, 'Attachment')`. In `handleBeforeSubmit`, validate that no uploads are still in progress.
|
|
98
|
+
|
|
99
|
+
### Read-Only Mode (`displayMode === 'DISPLAY_ONLY'`)
|
|
100
|
+
|
|
101
|
+
Render a list of existing attachments as download links. No upload controls shown.
|
|
102
|
+
|
|
103
|
+
### Inline Table Edit Mode (`editMode === 'tableRows'`)
|
|
104
|
+
|
|
105
|
+
Compressed display for use inside a table cell. Show attachment count and a small upload button. Clicking opens a minimal upload dialog.
|
|
106
|
+
|
|
107
|
+
## Visual Specifications
|
|
108
|
+
|
|
109
|
+
| Element | Description |
|
|
110
|
+
| ------------------------- | ------------------------------------------------------------------------------------- |
|
|
111
|
+
| Label | Standard field label above the control |
|
|
112
|
+
| Drop zone / Upload button | Clickable area to select files; optionally supports drag-and-drop |
|
|
113
|
+
| File list | Each uploaded file: icon + name + size + progress bar (during upload) + delete button |
|
|
114
|
+
| Error state | Red error text below the control for invalid files or upload failures |
|
|
115
|
+
| Helper text | Secondary text below the control |
|
|
116
|
+
|
|
117
|
+
**CSS-only implementation notes:**
|
|
118
|
+
|
|
119
|
+
- Drop zone: `border: 2px dashed var(--border-color); border-radius: 4px; padding: 1rem; text-align: center; cursor: pointer`.
|
|
120
|
+
- Drop zone hover: `border-color: var(--app-primary-color); background: var(--hover-bg)`.
|
|
121
|
+
- File row: `display: flex; align-items: center; gap: 0.5rem; padding: 4px 0`.
|
|
122
|
+
- Progress bar: `height: 4px; background: var(--app-primary-color); border-radius: 2px; transition: width 0.2s`.
|
|
123
|
+
- Error text: `color: var(--error-color); font-size: 0.75rem; margin-top: 4px`.
|
|
124
|
+
- Delete button: `color: var(--error-color)`.
|
|
125
|
+
|
|
126
|
+
## Edge Cases & Special Logic
|
|
127
|
+
|
|
128
|
+
- `allowMultiple` may be a string `"true"` / `"false"` or a boolean — always coerce: `allowMultiple === true || allowMultiple === 'true'`.
|
|
129
|
+
- Upload progress: track per-file progress in a map of `fileId → number` in local state.
|
|
130
|
+
- `isTableFormatter`: when `true`, hide the label and reduce padding for compact table display.
|
|
131
|
+
- Concurrent uploads: multiple files may upload simultaneously — the sequencer action must be keyed per-file.
|
|
132
|
+
- Max size: call `PCore.getEnvironmentInfo().getMaxAttachmentSize()` at validation time (not at mount) — size config may be dynamic.
|
|
133
|
+
- `extensions` may be empty string — if empty, allow all file types.
|
|
134
|
+
|
|
135
|
+
## Dependencies
|
|
136
|
+
|
|
137
|
+
- The project's attachment utility module — `validateExtension`, `validateSize`, `getFileTypeIcon`, `buildDownloadURL`, error handling helpers
|
|
138
|
+
- The project's attachment type definitions — `FileObject`, `AttachmentLinks`, `PageInstructionOptions`
|
|
139
|
+
- `PCore.getAttachmentUtils()` — upload, download, prepareAttachmentData
|
|
140
|
+
- `PCore.getActionsSequencer()` — block/unblock form submission during upload
|
|
141
|
+
- `PCore.getEnvironmentInfo()` — max attachment size
|
|
142
|
+
- `PCore.getMessageManager()` — error message display
|
|
143
|
+
- `PCore.getPubSubUtils()` — before-submit subscription
|
|
144
|
+
- A file-download utility — browser file download trigger
|
|
145
|
+
|
|
146
|
+
## Design System Mapping
|
|
147
|
+
|
|
148
|
+
**UI control type:** File upload form field with progress tracking, validation, and attachment list.
|
|
149
|
+
|
|
150
|
+
When implementing in a specific design system, map the following:
|
|
151
|
+
|
|
152
|
+
- **File input / drop zone:** A clickable upload area (optionally supporting drag-and-drop) backed by a hidden native file input. The design system's file-picker or upload component can replace the custom drop zone, but the hidden native input pattern works universally.
|
|
153
|
+
- **Progress indicator:** A linear progress bar (determinate, 0–100) shown per-file during upload. Use the design system's linear progress component or a CSS-based bar.
|
|
154
|
+
- **File list:** A vertical list of uploaded file rows. Each row contains: a file-type icon, the file name, file size metadata, the progress indicator (during upload), and a delete action button. Use the design system's list component or simple styled rows.
|
|
155
|
+
- **Error text:** Validation or upload error messages displayed below the control in an error color.
|
|
156
|
+
- **Helper text:** Secondary descriptive text below the control.
|
|
157
|
+
|
|
158
|
+
Implementation notes:
|
|
159
|
+
|
|
160
|
+
- Action sequencer blocking (`addAction`/`removeAction`) is mandatory — do not skip it; form submission must be blocked during uploads
|
|
161
|
+
- Detect and normalize both old and new attachment formats via `prepareAttachmentData`
|
|
162
|
+
- `allowMultiple` coercion (string vs boolean) is required
|
|
163
|
+
- Extension and size validation must happen client-side before calling the upload API
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Skill: CaseHistory
|
|
2
|
+
|
|
3
|
+
Case history widget. Fetches and displays the full audit trail for the current case in a table with Date, Description, and Performer columns.
|
|
4
|
+
|
|
5
|
+
> **Prerequisite skill:** [`widget-components.md`](../widget-components.md) — covers architecture, the base component interface, data-fetching patterns, and registration conventions common to ALL widget components.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Purpose
|
|
10
|
+
|
|
11
|
+
Renders a table of case events sourced from the `D_pyWorkHistory` data page. Shows when each event happened (`pxTimeCreated`), what happened (`pyMessageKey`), and who performed it (`pyPerformer`). Uses a deep-equality utility to skip unnecessary re-renders when data has not changed.
|
|
12
|
+
|
|
13
|
+
## Pega Metadata
|
|
14
|
+
|
|
15
|
+
- **Registration key:** `CaseHistory` (in the project's component map)
|
|
16
|
+
- **Category:** Widget — case data display
|
|
17
|
+
- **Extends:** the project's base component interface
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
| Input | Type | Required | Description |
|
|
22
|
+
| ------------- | ---------- | -------- | ----------------------------------------------------- |
|
|
23
|
+
| `getPConnect` | `function` | Yes | PConnect getter — used to resolve case ID and context |
|
|
24
|
+
|
|
25
|
+
## Implementation Structure
|
|
26
|
+
|
|
27
|
+
**Module Setup:** Requires local state, an instance reference, and a lifecycle effect. Also needs a deep-equality utility and the project's SDK utility helpers for date formatting. The component interface extends the project's base component interface (no additional custom inputs).
|
|
28
|
+
|
|
29
|
+
**Main Component Logic** — steps in order:
|
|
30
|
+
|
|
31
|
+
1. Receive `getPConnect` from inputs; call it once into `thePConn`. Declare a `rowData` instance reference (initialized to an empty array) and a `waitingForData` local state boolean (default `true`).
|
|
32
|
+
2. Resolve `caseID` via `thePConn.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID, '')` and `context` via `thePConn.getContextName()`.
|
|
33
|
+
3. Build a `displayedColumns` array of three column descriptors, each with a localized `label` (via `thePConn.getLocalizedValue`), a `type`, and a `fieldName`: Date (`'DateTime'`, `pxTimeCreated`), Description (`'TextInput'`, `pyMessageKey`), and Performed by (`'TextInput'`, `pyPerformer`).
|
|
34
|
+
4. **Fetch `D_pyWorkHistory` on mount** — in a lifecycle effect that runs once on initialization, using a guard flag to prevent post-teardown state updates: call `PCore.getDataApiUtils().getData('D_pyWorkHistory', { dataViewParameters: [{ CaseInstanceKey: caseID }] }, context)`; on resolution, when still active, call `computeRowData` with `historyJSON.data.data` and set `waitingForData` to `false`. In the teardown callback, set the guard flag to `false` so the state setter is never called after the component is destroyed.
|
|
35
|
+
5. Define `computeRowData(rows)`: map each row to an array of cell values, one per `displayedColumns` entry — formatting `DateTime`-type columns through the SDK utility helper `generateDateTime(row[col.fieldName], 'DateTime-Short')` and passing other column values through as-is. Compare the resulting `theRowData` against the current `rowData` instance reference using the deep-equality utility, and only update the instance reference when the data has actually changed (this avoids unnecessary re-renders).
|
|
36
|
+
6. **Render** a table with three columns and `'---'` as the placeholder for missing or falsy cell values. The header row renders one cell per `displayedColumns` entry (using its `label`). The body renders one row per entry in the `rowData` instance reference, with one cell per value (falling back to `'---'` when the value is falsy).
|
|
37
|
+
|
|
38
|
+
No additional custom inputs. All data is fetched internally.
|
|
39
|
+
|
|
40
|
+
## Behavioral Contract
|
|
41
|
+
|
|
42
|
+
### Data Fetch
|
|
43
|
+
|
|
44
|
+
On mount, fetch history from the `D_pyWorkHistory` data page by calling `PCore.getDataApiUtils().getData('D_pyWorkHistory', { dataViewParameters: [{ CaseInstanceKey: caseID }] }, context)`.
|
|
45
|
+
|
|
46
|
+
- `caseID` = `thePConn.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID, '')`.
|
|
47
|
+
- `context` = `thePConn.getContextName()`.
|
|
48
|
+
- Store result in a `rowData` instance reference.
|
|
49
|
+
- On error or empty response, `rowData` stays as `[]`.
|
|
50
|
+
|
|
51
|
+
### Re-render Optimization
|
|
52
|
+
|
|
53
|
+
Use a deep-equality utility to compare new row data with the previous value — only update the stored data if it has actually changed. This prevents unnecessary re-renders caused by reference inequality.
|
|
54
|
+
|
|
55
|
+
### Data Transformation
|
|
56
|
+
|
|
57
|
+
For each history row, map:
|
|
58
|
+
|
|
59
|
+
- **Date column:** Format `pxTimeCreated` using the SDK date formatting utility (e.g., `generateDateTime(row.pxTimeCreated, 'DateTime-Short')`).
|
|
60
|
+
- **Description column:** `row.pyMessageKey` — the localized event description string.
|
|
61
|
+
- **Performer column:** `row.pyPerformer` — the operator who performed the action.
|
|
62
|
+
- Missing values: display `"---"` for any undefined/null field.
|
|
63
|
+
|
|
64
|
+
## Visual Specifications
|
|
65
|
+
|
|
66
|
+
### Table Layout
|
|
67
|
+
|
|
68
|
+
| Column | Field | Width |
|
|
69
|
+
| ------------ | --------------------------- | ----- |
|
|
70
|
+
| Date | `pxTimeCreated` (formatted) | ~25% |
|
|
71
|
+
| Description | `pyMessageKey` | ~50% |
|
|
72
|
+
| Performed by | `pyPerformer` | ~25% |
|
|
73
|
+
|
|
74
|
+
The table header cells should have a distinct background color, bold text, and 1px solid borders. Body cells should have 1px solid borders in a silver/neutral tone. Missing-value placeholders (`"---"`) should be visually subdued. Use the design system's table component for consistent styling. No pagination in the reference implementation — all rows are shown.
|
|
75
|
+
|
|
76
|
+
## Edge Cases & Special Logic
|
|
77
|
+
|
|
78
|
+
- `D_pyWorkHistory` may return an empty array for cases with no history events — render an empty table body (or an empty-state message like `"No history available"`).
|
|
79
|
+
- `pxTimeCreated` format varies — always run it through the SDK date formatting utility before display.
|
|
80
|
+
- `pyMessageKey` may be a locale key — resolve it via `PCore.getLocaleUtils().getLocaleValue()` if a localized string is required.
|
|
81
|
+
- The widget has no pagination — for cases with very long history, the table may become very tall. Consider adding pagination if needed.
|
|
82
|
+
- The lifecycle effect teardown callback sets a guard flag to prevent calling state setters after component destruction, avoiding framework warnings about unmounted state updates.
|
|
83
|
+
|
|
84
|
+
## Dependencies
|
|
85
|
+
|
|
86
|
+
- `PCore.getDataApiUtils().getData()` — fetches `D_pyWorkHistory` data page
|
|
87
|
+
- A deep-equality utility — prevents unnecessary re-renders by comparing row data before updating
|
|
88
|
+
- `PCore.getConstants().CASE_INFO.CASE_INFO_ID` — resolves case ID constant
|
|
89
|
+
- The project's SDK utility helpers — for date formatting (`generateDateTime`)
|
|
90
|
+
- The design system's table component (container, header, body, row, and cell elements)
|