@salesforce/templates 66.5.6 → 66.6.1
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/lib/generators/projectGenerator.d.ts +1 -1
- package/lib/generators/projectGenerator.js +3 -3
- package/lib/generators/projectGenerator.js.map +1 -1
- package/lib/templates/project/{reactb2e → reactexternalapp}/AGENT.md +6 -10
- package/lib/templates/project/{reactb2e → reactexternalapp}/CHANGELOG.md +59 -0
- package/lib/templates/project/{reactb2x → reactexternalapp}/README.md +14 -14
- package/lib/templates/project/{reactb2x/_p_/_m_/_d_/_s_/_a1_/appreacttemplateb2x1.digitalExperience-meta.xml → reactexternalapp/_p_/_m_/_d_/_s_/_a1_/reactexternalapp1.digitalExperience-meta.xml} +1 -1
- package/lib/templates/project/{reactb2x/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/appreacttemplateb2x1 → reactexternalapp/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/reactexternalapp1}/_meta.json +1 -1
- package/lib/templates/project/{reactb2x/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/appreacttemplateb2x1 → reactexternalapp/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/reactexternalapp1}/content.json +3 -3
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/README.md +2 -2
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/package.json +3 -3
- package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/appreacttemplateb2x.webapplication-meta.xml → reactexternalapp/_p_/_m_/_w_/_a_/reactexternalapp.webapplication-meta.xml} +1 -1
- package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountSearch.tsx +82 -54
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterContext.tsx +73 -0
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +109 -0
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +16 -36
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +121 -0
- package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +14 -23
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +18 -26
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +22 -39
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +37 -0
- package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +30 -34
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +74 -0
- package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +1 -0
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +1 -0
- package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +22 -0
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +25 -0
- package/lib/templates/project/{reactb2x/_p_/_m_/digitalExperienceConfigs/appreacttemplateb2x1.digitalExperienceConfig → reactexternalapp/_p_/_m_/digitalExperienceConfigs/reactexternalapp1.digitalExperienceConfig} +3 -3
- package/lib/templates/project/{reactb2x/_p_/_m_/networks/appreacttemplateb2x.network → reactexternalapp/_p_/_m_/networks/reactexternalapp.network} +4 -4
- package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/package.xml +4 -4
- package/lib/templates/project/{reactb2x/_p_/_m_/sites/appreacttemplateb2x.site → reactexternalapp/_p_/_m_/sites/reactexternalapp.site} +2 -2
- package/lib/templates/project/{reactb2e → reactexternalapp}/_r_/webapp-data.md +5 -5
- package/lib/templates/project/{reactb2x → reactexternalapp}/_r_/webapp-ui.md +2 -2
- package/lib/templates/project/{reactb2e → reactexternalapp}/package-lock.json +2 -2
- package/lib/templates/project/{reactb2e → reactexternalapp}/package.json +1 -1
- package/lib/templates/project/{reactb2x/_r_/skills/using-salesforce-data → reactexternalapp/scripts}/graphql-search.sh +73 -21
- package/lib/templates/project/{reactb2x → reactinternalapp}/AGENT.md +6 -10
- package/lib/templates/project/{reactb2x → reactinternalapp}/CHANGELOG.md +59 -0
- package/lib/templates/project/{reactb2e → reactinternalapp}/README.md +9 -9
- package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/README.md +2 -2
- package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/package.json +3 -3
- package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/appreacttemplateb2e.webapplication-meta.xml → reactinternalapp/_p_/_m_/_w_/_a_/reactinternalapp.webapplication-meta.xml} +1 -1
- package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountSearch.tsx +82 -54
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterContext.tsx +73 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +109 -0
- package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +16 -36
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +121 -0
- package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +14 -23
- package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +18 -26
- package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +22 -39
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +37 -0
- package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +30 -34
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +74 -0
- package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +1 -0
- package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +1 -0
- package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +22 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +25 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/routes.tsx +21 -0
- package/lib/templates/project/{reactb2x → reactinternalapp}/_r_/webapp-data.md +5 -5
- package/lib/templates/project/{reactb2e → reactinternalapp}/_r_/webapp-ui.md +2 -2
- package/lib/templates/project/{reactb2x → reactinternalapp}/package-lock.json +2 -2
- package/lib/templates/project/{reactb2x → reactinternalapp}/package.json +1 -1
- package/lib/templates/project/{reactb2e/_r_/skills/using-salesforce-data → reactinternalapp/scripts}/graphql-search.sh +73 -21
- package/lib/templates/webapplication/reactbasic/package.json +3 -3
- package/lib/templates/webapplication/reactbasic/src/api/graphqlClient.ts +25 -0
- package/lib/utils/template-placeholders.js +8 -1
- package/lib/utils/template-placeholders.js.map +1 -1
- package/lib/utils/types.d.ts +1 -1
- package/lib/utils/webappTemplateUtils.d.ts +12 -4
- package/lib/utils/webappTemplateUtils.js +46 -14
- package/lib/utils/webappTemplateUtils.js.map +1 -1
- package/package.json +5 -5
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +0 -127
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +0 -151
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +0 -165
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +0 -40
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +0 -77
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/pages/TestAccPage.tsx +0 -19
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/routes.tsx +0 -38
- package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/SKILL.md +0 -72
- package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +0 -316
- package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/dashboard-layout.md +0 -189
- package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/donut-chart.md +0 -181
- package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/stat-card.md +0 -150
- package/lib/templates/project/reactb2e/_r_/skills/building-react-components/SKILL.md +0 -96
- package/lib/templates/project/reactb2e/_r_/skills/building-react-components/implementation/component.md +0 -78
- package/lib/templates/project/reactb2e/_r_/skills/building-react-components/implementation/header-footer.md +0 -132
- package/lib/templates/project/reactb2e/_r_/skills/building-react-components/implementation/page.md +0 -93
- package/lib/templates/project/reactb2e/_r_/skills/configuring-csp-trusted-sites/SKILL.md +0 -90
- package/lib/templates/project/reactb2e/_r_/skills/configuring-csp-trusted-sites/implementation/metadata-format.md +0 -281
- package/lib/templates/project/reactb2e/_r_/skills/configuring-webapp-metadata/SKILL.md +0 -158
- package/lib/templates/project/reactb2e/_r_/skills/creating-webapp/SKILL.md +0 -140
- package/lib/templates/project/reactb2e/_r_/skills/deploying-to-salesforce/SKILL.md +0 -226
- package/lib/templates/project/reactb2e/_r_/skills/implementing-file-upload/SKILL.md +0 -396
- package/lib/templates/project/reactb2e/_r_/skills/installing-webapp-features/SKILL.md +0 -210
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/SKILL.md +0 -186
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +0 -134
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/examples.md +0 -132
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +0 -101
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +0 -57
- package/lib/templates/project/reactb2e/_r_/skills/using-salesforce-data/SKILL.md +0 -363
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +0 -127
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +0 -151
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +0 -165
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +0 -40
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +0 -77
- package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/SKILL.md +0 -72
- package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +0 -316
- package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/dashboard-layout.md +0 -189
- package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/donut-chart.md +0 -181
- package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/stat-card.md +0 -150
- package/lib/templates/project/reactb2x/_r_/skills/building-react-components/SKILL.md +0 -96
- package/lib/templates/project/reactb2x/_r_/skills/building-react-components/implementation/component.md +0 -78
- package/lib/templates/project/reactb2x/_r_/skills/building-react-components/implementation/header-footer.md +0 -132
- package/lib/templates/project/reactb2x/_r_/skills/building-react-components/implementation/page.md +0 -93
- package/lib/templates/project/reactb2x/_r_/skills/configuring-csp-trusted-sites/SKILL.md +0 -90
- package/lib/templates/project/reactb2x/_r_/skills/configuring-csp-trusted-sites/implementation/metadata-format.md +0 -281
- package/lib/templates/project/reactb2x/_r_/skills/configuring-webapp-metadata/SKILL.md +0 -158
- package/lib/templates/project/reactb2x/_r_/skills/creating-webapp/SKILL.md +0 -140
- package/lib/templates/project/reactb2x/_r_/skills/deploying-to-salesforce/SKILL.md +0 -226
- package/lib/templates/project/reactb2x/_r_/skills/implementing-file-upload/SKILL.md +0 -396
- package/lib/templates/project/reactb2x/_r_/skills/installing-webapp-features/SKILL.md +0 -210
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/SKILL.md +0 -186
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +0 -134
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/examples.md +0 -132
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +0 -101
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +0 -57
- package/lib/templates/project/reactb2x/_r_/skills/using-salesforce-data/SKILL.md +0 -363
- /package/lib/templates/project/{reactb2e → reactexternalapp}/.forceignore +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/.husky/pre-commit +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/.prettierignore +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/.prettierrc +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.forceignore +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.graphqlrc.yml +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.prettierignore +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.prettierrc +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/CHANGELOG.md +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/codegen.yml +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/components.json +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/e2e/app.spec.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/eslint.config.js +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/index.html +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/playwright.config.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/scripts/get-graphql-schema.mjs +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/accountSearchService.ts +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountIndustries.graphql +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountTypes.graphql +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/getAccountDetail.graphql +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/searchAccounts.graphql +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountObjectDetailPage.tsx +0 -0
- /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/Home.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/authHelpers.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/authenticationConfig.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/context/AuthContext.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/footers/footer-link.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/forms/auth-form.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/forms/submit-button.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/form.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/useCountdownTimer.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/useRetryWithBackoff.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layout/card-skeleton.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layout/centered-page-layout.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/AuthAppLayout.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/authenticationRouteLayout.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/privateRouteLayout.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ChangePassword.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ForgotPassword.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Login.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Profile.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Register.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ResetPassword.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/SessionTimeoutValidator.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/sessionTimeService.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/sessionTimeoutConfig.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/utils/helpers.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/app.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/appLayout.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/book.svg +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/copy.svg +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/rocket.svg +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/star.svg +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-1.png +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-2.png +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-3.png +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/vibe-codey.svg +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/layouts/card-layout.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/alert.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/button.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/card.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/dialog.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/field.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/index.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/label.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/pagination.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/select.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/separator.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/skeleton.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/spinner.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/table.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/tabs.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/lib/utils.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/navigationMenu.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/pages/Home.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/pages/NotFound.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/router-utils.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/routes.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/styles/global.css +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/tsconfig.json +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/tsconfig.node.json +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vite.config.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vitest-env.d.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vitest.config.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vitest.setup.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/webapplication.json +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppAuthUtils.cls +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppAuthUtils.cls-meta.xml +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppChangePassword.cls +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppChangePassword.cls-meta.xml +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppForgotPassword.cls +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppForgotPassword.cls-meta.xml +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppLogin.cls +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppLogin.cls-meta.xml +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppRegistration.cls +0 -0
- /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppRegistration.cls-meta.xml +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/config/project-scratch-def.json +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/eslint.config.js +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/jest.config.js +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/apex/hello.apex +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/prepare-import-unique-fields.js +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/setup-cli.mjs +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/sf-project-setup.mjs +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/soql/account.soql +0 -0
- /package/lib/templates/project/{reactb2e → reactexternalapp}/sfdx-project.json +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/.forceignore +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/.husky/pre-commit +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/.prettierignore +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/.prettierrc +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.forceignore +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.graphqlrc.yml +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.prettierignore +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.prettierrc +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/CHANGELOG.md +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/codegen.yml +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/components.json +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/e2e/app.spec.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/eslint.config.js +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/index.html +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/playwright.config.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/scripts/get-graphql-schema.mjs +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/accountSearchService.ts +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountIndustries.graphql +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountTypes.graphql +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/getAccountDetail.graphql +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/searchAccounts.graphql +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountObjectDetailPage.tsx +0 -0
- /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/Home.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +0 -0
- /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/app.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/appLayout.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/book.svg +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/copy.svg +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/rocket.svg +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/star.svg +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-1.png +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-2.png +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-3.png +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/vibe-codey.svg +0 -0
- /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/__inherit_AgentforceConversationClient.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/layouts/card-layout.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/alert.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/button.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/card.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/dialog.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/field.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/index.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/label.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/pagination.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/select.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/separator.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/skeleton.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/spinner.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/table.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/tabs.tsx +0 -0
- /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/index.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/lib/utils.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/navigationMenu.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/pages/Home.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/pages/NotFound.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/router-utils.tsx +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/styles/global.css +0 -0
- /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/types/conversation.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/tsconfig.json +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/tsconfig.node.json +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vite.config.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vitest-env.d.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vitest.config.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vitest.setup.ts +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/webapplication.json +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/config/project-scratch-def.json +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/eslint.config.js +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/jest.config.js +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/apex/hello.apex +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/prepare-import-unique-fields.js +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/setup-cli.mjs +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/sf-project-setup.mjs +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/soql/account.soql +0 -0
- /package/lib/templates/project/{reactb2x → reactinternalapp}/sfdx-project.json +0 -0
|
@@ -7,52 +7,46 @@ import {
|
|
|
7
7
|
} from "../../../../components/ui/select";
|
|
8
8
|
import { Label } from "../../../../components/ui/label";
|
|
9
9
|
import { cn } from "../../../../lib/utils";
|
|
10
|
-
import
|
|
10
|
+
import { useFilterField } from "../FilterContext";
|
|
11
|
+
import type { ActiveFilterValue } from "../../utils/filterUtils";
|
|
11
12
|
|
|
12
13
|
const ALL_VALUE = "__all__";
|
|
13
14
|
|
|
14
15
|
interface SelectFilterProps extends Omit<React.ComponentProps<"div">, "onChange"> {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
controlProps?: Omit<
|
|
20
|
-
React.ComponentProps<typeof SelectFilterControl>,
|
|
21
|
-
"config" | "value" | "onChange"
|
|
22
|
-
>;
|
|
23
|
-
helpTextProps?: React.ComponentProps<"p">;
|
|
16
|
+
field: string;
|
|
17
|
+
label: string;
|
|
18
|
+
options: Array<{ value: string; label: string }>;
|
|
19
|
+
helpText?: string;
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
export function SelectFilter({
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
field,
|
|
24
|
+
label,
|
|
25
|
+
options,
|
|
26
|
+
helpText,
|
|
30
27
|
className,
|
|
31
|
-
labelProps,
|
|
32
|
-
controlProps,
|
|
33
|
-
helpTextProps,
|
|
34
28
|
...props
|
|
35
29
|
}: SelectFilterProps) {
|
|
30
|
+
const { value, onChange } = useFilterField(field);
|
|
36
31
|
return (
|
|
37
32
|
<div className={cn("space-y-1.5", className)} {...props}>
|
|
38
|
-
<Label htmlFor={`filter-${
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
{helpTextProps?.children ?? config.helpText}
|
|
48
|
-
</p>
|
|
49
|
-
)}
|
|
33
|
+
<Label htmlFor={`filter-${field}`}>{label}</Label>
|
|
34
|
+
<SelectFilterControl
|
|
35
|
+
field={field}
|
|
36
|
+
label={label}
|
|
37
|
+
options={options}
|
|
38
|
+
value={value}
|
|
39
|
+
onChange={onChange}
|
|
40
|
+
/>
|
|
41
|
+
{helpText && <p className="text-xs text-muted-foreground">{helpText}</p>}
|
|
50
42
|
</div>
|
|
51
43
|
);
|
|
52
44
|
}
|
|
53
45
|
|
|
54
46
|
interface SelectFilterControlProps {
|
|
55
|
-
|
|
47
|
+
field: string;
|
|
48
|
+
label: string;
|
|
49
|
+
options: Array<{ value: string; label: string }>;
|
|
56
50
|
value: ActiveFilterValue | undefined;
|
|
57
51
|
onChange: (value: ActiveFilterValue | undefined) => void;
|
|
58
52
|
triggerProps?: React.ComponentProps<typeof SelectTrigger>;
|
|
@@ -60,7 +54,9 @@ interface SelectFilterControlProps {
|
|
|
60
54
|
}
|
|
61
55
|
|
|
62
56
|
export function SelectFilterControl({
|
|
63
|
-
|
|
57
|
+
field,
|
|
58
|
+
label,
|
|
59
|
+
options,
|
|
64
60
|
value,
|
|
65
61
|
onChange,
|
|
66
62
|
triggerProps,
|
|
@@ -73,20 +69,20 @@ export function SelectFilterControl({
|
|
|
73
69
|
if (v === ALL_VALUE) {
|
|
74
70
|
onChange(undefined);
|
|
75
71
|
} else {
|
|
76
|
-
onChange({ field
|
|
72
|
+
onChange({ field, label, type: "picklist", value: v });
|
|
77
73
|
}
|
|
78
74
|
}}
|
|
79
75
|
>
|
|
80
76
|
<SelectTrigger
|
|
81
|
-
id={`filter-${
|
|
77
|
+
id={`filter-${field}`}
|
|
82
78
|
{...triggerProps}
|
|
83
79
|
className={cn("w-full", triggerProps?.className)}
|
|
84
80
|
>
|
|
85
|
-
<SelectValue placeholder={`Select ${
|
|
81
|
+
<SelectValue placeholder={`Select ${label.toLowerCase()}`} />
|
|
86
82
|
</SelectTrigger>
|
|
87
83
|
<SelectContent {...contentProps}>
|
|
88
84
|
<SelectItem value={ALL_VALUE}>All</SelectItem>
|
|
89
|
-
{
|
|
85
|
+
{options.map((opt) => (
|
|
90
86
|
<SelectItem key={opt.value} value={opt.value}>
|
|
91
87
|
{opt.label}
|
|
92
88
|
</SelectItem>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Input } from "../../../../components/ui/input";
|
|
2
|
+
import { Label } from "../../../../components/ui/label";
|
|
3
|
+
import { cn } from "../../../../lib/utils";
|
|
4
|
+
import { useFilterField } from "../FilterContext";
|
|
5
|
+
import type { ActiveFilterValue } from "../../utils/filterUtils";
|
|
6
|
+
|
|
7
|
+
interface TextFilterProps extends Omit<React.ComponentProps<"div">, "onChange"> {
|
|
8
|
+
field: string;
|
|
9
|
+
label: string;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
helpText?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function TextFilter({
|
|
15
|
+
field,
|
|
16
|
+
label,
|
|
17
|
+
placeholder,
|
|
18
|
+
helpText,
|
|
19
|
+
className,
|
|
20
|
+
...props
|
|
21
|
+
}: TextFilterProps) {
|
|
22
|
+
const { value, onChange } = useFilterField(field);
|
|
23
|
+
return (
|
|
24
|
+
<div className={cn("space-y-1.5", className)} {...props}>
|
|
25
|
+
<Label htmlFor={`filter-${field}`}>{label}</Label>
|
|
26
|
+
<TextFilterInput
|
|
27
|
+
field={field}
|
|
28
|
+
label={label}
|
|
29
|
+
placeholder={placeholder}
|
|
30
|
+
value={value}
|
|
31
|
+
onChange={onChange}
|
|
32
|
+
/>
|
|
33
|
+
{helpText && <p className="text-xs text-muted-foreground">{helpText}</p>}
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface TextFilterInputProps extends Omit<
|
|
39
|
+
React.ComponentProps<typeof Input>,
|
|
40
|
+
"onChange" | "value"
|
|
41
|
+
> {
|
|
42
|
+
field: string;
|
|
43
|
+
label: string;
|
|
44
|
+
value: ActiveFilterValue | undefined;
|
|
45
|
+
onChange: (value: ActiveFilterValue | undefined) => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function TextFilterInput({
|
|
49
|
+
field,
|
|
50
|
+
label,
|
|
51
|
+
value,
|
|
52
|
+
onChange,
|
|
53
|
+
className,
|
|
54
|
+
...props
|
|
55
|
+
}: TextFilterInputProps) {
|
|
56
|
+
return (
|
|
57
|
+
<Input
|
|
58
|
+
id={`filter-${field}`}
|
|
59
|
+
type="text"
|
|
60
|
+
placeholder={props.placeholder ?? `Filter by ${label.toLowerCase()}...`}
|
|
61
|
+
value={value?.value ?? ""}
|
|
62
|
+
onChange={(e) => {
|
|
63
|
+
const v = e.target.value;
|
|
64
|
+
if (v) {
|
|
65
|
+
onChange({ field, label, type: "text", value: v });
|
|
66
|
+
} else {
|
|
67
|
+
onChange(undefined);
|
|
68
|
+
}
|
|
69
|
+
}}
|
|
70
|
+
className={cn(className)}
|
|
71
|
+
{...props}
|
|
72
|
+
/>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
@@ -14,6 +14,28 @@ export interface PaginationConfig {
|
|
|
14
14
|
validPageSizes: number[];
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
export interface UseObjectSearchParamsReturn<TFilter, TOrderBy> {
|
|
18
|
+
filters: {
|
|
19
|
+
active: ActiveFilterValue[];
|
|
20
|
+
set: (field: string, value: ActiveFilterValue | undefined) => void;
|
|
21
|
+
remove: (field: string) => void;
|
|
22
|
+
};
|
|
23
|
+
sort: {
|
|
24
|
+
current: SortState | null;
|
|
25
|
+
set: (sort: SortState | null) => void;
|
|
26
|
+
};
|
|
27
|
+
query: { where: TFilter; orderBy: TOrderBy };
|
|
28
|
+
pagination: {
|
|
29
|
+
pageSize: number;
|
|
30
|
+
pageIndex: number;
|
|
31
|
+
afterCursor: string | undefined;
|
|
32
|
+
setPageSize: (size: number) => void;
|
|
33
|
+
goToNextPage: (cursor: string) => void;
|
|
34
|
+
goToPreviousPage: () => void;
|
|
35
|
+
};
|
|
36
|
+
resetAll: () => void;
|
|
37
|
+
}
|
|
38
|
+
|
|
17
39
|
/**
|
|
18
40
|
* Manages filter, sort, and cursor-based pagination state for an object search page.
|
|
19
41
|
*
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin GraphQL client: createDataSDK + data.graphql with centralized error handling.
|
|
3
|
+
* Use with gql-tagged queries and generated operation types for type-safe calls.
|
|
4
|
+
*/
|
|
5
|
+
import { createDataSDK } from '@salesforce/sdk-data';
|
|
6
|
+
|
|
7
|
+
export async function executeGraphQL<TData, TVariables>(
|
|
8
|
+
query: string,
|
|
9
|
+
variables?: TVariables
|
|
10
|
+
): Promise<TData> {
|
|
11
|
+
const data = await createDataSDK();
|
|
12
|
+
// SDK types graphql() first param as string; at runtime it may accept gql DocumentNode too
|
|
13
|
+
const response = await data.graphql?.<TData, TVariables>(query, variables);
|
|
14
|
+
|
|
15
|
+
if (!response) {
|
|
16
|
+
throw new Error('GraphQL response is undefined');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (response?.errors?.length) {
|
|
20
|
+
const msg = response.errors.map(e => e.message).join('; ');
|
|
21
|
+
throw new Error(`GraphQL Error: ${msg}`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return response.data;
|
|
25
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<DigitalExperienceConfig xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
-
<label>
|
|
3
|
+
<label>reactexternalapp</label>
|
|
4
4
|
<site>
|
|
5
|
-
<urlPathPrefix>
|
|
5
|
+
<urlPathPrefix>reactexternalapp</urlPathPrefix>
|
|
6
6
|
</site>
|
|
7
|
-
<space>site/
|
|
7
|
+
<space>site/reactexternalapp1</space>
|
|
8
8
|
</DigitalExperienceConfig>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<communityRoles/>
|
|
7
7
|
<disableReputationRecordConversations>true</disableReputationRecordConversations>
|
|
8
8
|
<emailSenderAddress>trialorgfarmforu@salesforce.com.invalid.invalid</emailSenderAddress>
|
|
9
|
-
<emailSenderName>
|
|
9
|
+
<emailSenderName>reactexternalapp</emailSenderName>
|
|
10
10
|
<embeddedLoginEnabled>false</embeddedLoginEnabled>
|
|
11
11
|
<enableApexCDNCaching>true</enableApexCDNCaching>
|
|
12
12
|
<enableCustomVFErrorPageOverrides>false</enableCustomVFErrorPageOverrides>
|
|
@@ -45,16 +45,16 @@
|
|
|
45
45
|
<selfRegProfilePageOverrideSetting>Designer</selfRegProfilePageOverrideSetting>
|
|
46
46
|
</networkPageOverrides>
|
|
47
47
|
<newSenderAddress>trialorgfarmforu@salesforce.com</newSenderAddress>
|
|
48
|
-
<picassoSite>
|
|
48
|
+
<picassoSite>reactexternalapp1</picassoSite>
|
|
49
49
|
<selfRegistration>false</selfRegistration>
|
|
50
50
|
<sendWelcomeEmail>true</sendWelcomeEmail>
|
|
51
|
-
<site>
|
|
51
|
+
<site>reactexternalapp</site>
|
|
52
52
|
<siteArchiveStatus>NotArchived</siteArchiveStatus>
|
|
53
53
|
<status>Live</status>
|
|
54
54
|
<tabs>
|
|
55
55
|
<defaultTab>home</defaultTab>
|
|
56
56
|
<standardTab>Chatter</standardTab>
|
|
57
57
|
</tabs>
|
|
58
|
-
<urlPathPrefix>
|
|
58
|
+
<urlPathPrefix>reactexternalappvforcesite</urlPathPrefix>
|
|
59
59
|
<welcomeTemplate>unfiled$public/CommunityWelcomeEmailTemplate</welcomeTemplate>
|
|
60
60
|
</Network>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
3
|
<types>
|
|
4
|
-
<members>
|
|
4
|
+
<members>reactexternalapp</members>
|
|
5
5
|
<name>CustomSite</name>
|
|
6
6
|
</types>
|
|
7
7
|
<types>
|
|
8
|
-
<members>site/
|
|
8
|
+
<members>site/reactexternalapp1</members>
|
|
9
9
|
<name>DigitalExperienceBundle</name>
|
|
10
10
|
</types>
|
|
11
11
|
<types>
|
|
12
|
-
<members>
|
|
12
|
+
<members>reactexternalapp1</members>
|
|
13
13
|
<name>DigitalExperienceConfig</name>
|
|
14
14
|
</types>
|
|
15
15
|
<types>
|
|
16
|
-
<members>
|
|
16
|
+
<members>reactexternalapp</members>
|
|
17
17
|
<name>Network</name>
|
|
18
18
|
</types>
|
|
19
19
|
<version>66.0</version>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<genericErrorPage>Exception</genericErrorPage>
|
|
20
20
|
<inMaintenancePage>InMaintenance</inMaintenancePage>
|
|
21
21
|
<indexPage>CommunitiesLanding</indexPage>
|
|
22
|
-
<masterLabel>
|
|
22
|
+
<masterLabel>reactexternalapp</masterLabel>
|
|
23
23
|
<redirectToCustomDomain>false</redirectToCustomDomain>
|
|
24
24
|
<referrerPolicyOriginWhenCrossOrigin>true</referrerPolicyOriginWhenCrossOrigin>
|
|
25
25
|
<selfRegPage>CommunitiesSelfReg</selfRegPage>
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
<!-- <siteAdmin>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteAdmin> -->
|
|
28
28
|
<!-- <siteGuestRecordDefaultOwner>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteGuestRecordDefaultOwner> -->
|
|
29
29
|
<siteType>ChatterNetwork</siteType>
|
|
30
|
-
<urlPathPrefix>
|
|
30
|
+
<urlPathPrefix>reactexternalappvforcesite</urlPathPrefix>
|
|
31
31
|
</CustomSite>
|
|
@@ -74,10 +74,10 @@ Map user intent to PascalCase names ("accounts" → `Account`), then **run the s
|
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
76
|
# From project root — look up all relevant schema info for one or more entities
|
|
77
|
-
bash
|
|
77
|
+
bash scripts/graphql-search.sh Account
|
|
78
78
|
|
|
79
79
|
# Multiple entities at once
|
|
80
|
-
bash
|
|
80
|
+
bash scripts/graphql-search.sh Account Contact Opportunity
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
The script outputs five sections per entity:
|
|
@@ -213,7 +213,7 @@ const fields = response?.data?.uiapi?.objectInfos?.[0]?.fields ?? [];
|
|
|
213
213
|
|
|
214
214
|
```bash
|
|
215
215
|
# From project root — re-check the entity that caused the error
|
|
216
|
-
bash
|
|
216
|
+
bash scripts/graphql-search.sh <EntityName>
|
|
217
217
|
```
|
|
218
218
|
|
|
219
219
|
Then fix the query using the exact names from the script output.
|
|
@@ -310,7 +310,7 @@ const response = await sdk.graphql?.(GET_CURRENT_USER);
|
|
|
310
310
|
|---------|----------|-----|
|
|
311
311
|
| `npm run graphql:schema` | webapp dir | Script in webapp's package.json |
|
|
312
312
|
| `npx eslint <file>` | webapp dir | Reads eslint.config.js |
|
|
313
|
-
| `bash
|
|
313
|
+
| `bash scripts/graphql-search.sh <Entity>` | project root | Schema lookup |
|
|
314
314
|
| `sf api request rest` | project root | Needs sfdx-project.json |
|
|
315
315
|
|
|
316
316
|
---
|
|
@@ -322,7 +322,7 @@ const response = await sdk.graphql?.(GET_CURRENT_USER);
|
|
|
322
322
|
Run the search script to get all relevant schema info in one step:
|
|
323
323
|
|
|
324
324
|
```bash
|
|
325
|
-
bash
|
|
325
|
+
bash scripts/graphql-search.sh <EntityName>
|
|
326
326
|
```
|
|
327
327
|
|
|
328
328
|
| Script Output Section | Used For |
|
|
@@ -8,9 +8,9 @@ When any task involves creating a new UI, frontend, page, dashboard, form, or us
|
|
|
8
8
|
2. The app must live under `<sfdx-source>/webapplications/<AppName>/` as a WebApplication bundle.
|
|
9
9
|
3. Do not build new UIs as LWC components, Aura components, or Visualforce pages.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
For setup from the project root, use `node scripts/setup-cli.mjs --help` and the options documented there.
|
|
12
12
|
|
|
13
13
|
## Data Access (MUST FOLLOW)
|
|
14
14
|
|
|
15
15
|
- **Never hardcode data in the app.** All data displayed in the UI must come from live Salesforce data fetching — no static arrays, mock objects, or placeholder values in production code.
|
|
16
|
-
- **
|
|
16
|
+
- **Follow `.a4drules/webapp-data.md`** before writing any data access code. All implementation must match those rules (Data SDK, supported APIs, GraphQL workflow).
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/webapp-template-base-sfdx-project-experimental",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.114.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@salesforce/webapp-template-base-sfdx-project-experimental",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.114.0",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@lwc/eslint-plugin-lwc": "^3.3.0",
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail # exit on error (-e), undefined vars (-u), and propagate pipeline failures (-o pipefail)
|
|
2
3
|
# graphql-search.sh — Look up one or more Salesforce entities in schema.graphql.
|
|
3
4
|
#
|
|
4
5
|
# Run from the SFDX project root (where schema.graphql lives):
|
|
5
|
-
# bash
|
|
6
|
-
# bash
|
|
6
|
+
# bash scripts/graphql-search.sh Account
|
|
7
|
+
# bash scripts/graphql-search.sh Account Contact Opportunity
|
|
7
8
|
#
|
|
8
9
|
# Pass a custom schema path with -s / --schema:
|
|
9
|
-
# bash
|
|
10
|
-
# bash
|
|
10
|
+
# bash scripts/graphql-search.sh -s /path/to/schema.graphql Account
|
|
11
|
+
# bash scripts/graphql-search.sh --schema ./other/schema.graphql Account Contact
|
|
11
12
|
#
|
|
12
13
|
# Output sections per entity:
|
|
13
|
-
# 1. Type definition
|
|
14
|
-
# 2. Filter options
|
|
15
|
-
# 3. Sort options
|
|
16
|
-
# 4. Create
|
|
17
|
-
# 5.
|
|
14
|
+
# 1. Type definition — all fields and relationships
|
|
15
|
+
# 2. Filter options — <Entity>_Filter input (for `where:`)
|
|
16
|
+
# 3. Sort options — <Entity>_OrderBy input (for `orderBy:`)
|
|
17
|
+
# 4. Create mutation wrapper — <Entity>CreateInput
|
|
18
|
+
# 5. Create mutation fields — <Entity>CreateRepresentation (for create mutations)
|
|
19
|
+
# 6. Update mutation wrapper — <Entity>UpdateInput
|
|
20
|
+
# 7. Update mutation fields — <Entity>UpdateRepresentation (for update mutations)
|
|
18
21
|
|
|
19
22
|
SCHEMA="./schema.graphql"
|
|
20
23
|
|
|
@@ -62,6 +65,19 @@ if [ ! -f "$SCHEMA" ]; then
|
|
|
62
65
|
exit 1
|
|
63
66
|
fi
|
|
64
67
|
|
|
68
|
+
if [ ! -r "$SCHEMA" ]; then
|
|
69
|
+
echo "ERROR: schema.graphql is not readable at $SCHEMA"
|
|
70
|
+
echo " Check file permissions: ls -la $SCHEMA"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
if [ ! -s "$SCHEMA" ]; then
|
|
75
|
+
echo "ERROR: schema.graphql is empty at $SCHEMA"
|
|
76
|
+
echo " Regenerate it from the webapp dir:"
|
|
77
|
+
echo " cd force-app/main/default/webapplications/<app-name> && npm run graphql:schema"
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
65
81
|
# ── Helper: extract lines from a grep match through the closing brace ────────
|
|
66
82
|
# Prints up to MAX_LINES lines after (and including) the first match of PATTERN.
|
|
67
83
|
# Uses a generous line count — blocks are always closed by a "}" line.
|
|
@@ -72,68 +88,104 @@ extract_block() {
|
|
|
72
88
|
local max_lines="$3"
|
|
73
89
|
|
|
74
90
|
local match
|
|
75
|
-
|
|
91
|
+
local grep_exit=0
|
|
92
|
+
match=$(grep -nE "$pattern" "$SCHEMA" | head -1) || grep_exit=$?
|
|
93
|
+
|
|
94
|
+
if [ "$grep_exit" -eq 2 ]; then
|
|
95
|
+
echo " ERROR: grep failed on pattern: $pattern" >&2
|
|
96
|
+
return 1
|
|
97
|
+
fi
|
|
76
98
|
|
|
77
99
|
if [ -z "$match" ]; then
|
|
78
100
|
echo " (not found: $pattern)"
|
|
79
|
-
return
|
|
101
|
+
return 3
|
|
80
102
|
fi
|
|
81
103
|
|
|
82
104
|
echo "### $label"
|
|
83
105
|
grep -E "$pattern" "$SCHEMA" -A "$max_lines" | \
|
|
84
106
|
awk '/^\}$/{print; exit} {print}' | \
|
|
85
|
-
head -n "$max_lines"
|
|
107
|
+
head -n "$max_lines" || true
|
|
86
108
|
echo ""
|
|
87
109
|
}
|
|
88
110
|
|
|
89
111
|
# ── Main loop ────────────────────────────────────────────────────────────────
|
|
90
112
|
|
|
91
113
|
for ENTITY in "$@"; do
|
|
114
|
+
# Validate entity name: must be a valid PascalCase identifier (letters, digits, underscores)
|
|
115
|
+
if [[ ! "$ENTITY" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
|
|
116
|
+
echo "ERROR: Invalid entity name: '$ENTITY'"
|
|
117
|
+
echo " Entity names must start with a letter or underscore, followed by letters, digits, or underscores."
|
|
118
|
+
echo " Examples: Account, My_Custom_Object__c"
|
|
119
|
+
continue
|
|
120
|
+
fi
|
|
121
|
+
|
|
92
122
|
echo ""
|
|
93
123
|
echo "======================================================================"
|
|
94
124
|
echo " SCHEMA LOOKUP: $ENTITY"
|
|
95
125
|
echo "======================================================================"
|
|
96
126
|
echo ""
|
|
97
127
|
|
|
128
|
+
found=0
|
|
129
|
+
|
|
130
|
+
# Helper: call extract_block, track matches, surface errors
|
|
131
|
+
try_extract() {
|
|
132
|
+
local rc=0
|
|
133
|
+
extract_block "$@" || rc=$?
|
|
134
|
+
if [ "$rc" -eq 0 ]; then
|
|
135
|
+
found=$((found + 1))
|
|
136
|
+
elif [ "$rc" -eq 1 ]; then
|
|
137
|
+
echo " Aborting lookup for '$ENTITY' due to grep error" >&2
|
|
138
|
+
fi
|
|
139
|
+
# rc=3 is not-found — continue silently (already printed by extract_block)
|
|
140
|
+
}
|
|
141
|
+
|
|
98
142
|
# 1. Type definition — all fields and relationships
|
|
99
|
-
|
|
143
|
+
try_extract \
|
|
100
144
|
"Type definition — fields and relationships" \
|
|
101
145
|
"^type ${ENTITY} implements Record" \
|
|
102
146
|
200
|
|
103
147
|
|
|
104
148
|
# 2. Filter input — used in `where:` arguments
|
|
105
|
-
|
|
149
|
+
try_extract \
|
|
106
150
|
"Filter options — use in where: { ... }" \
|
|
107
151
|
"^input ${ENTITY}_Filter" \
|
|
108
152
|
100
|
|
109
153
|
|
|
110
154
|
# 3. OrderBy input — used in `orderBy:` arguments
|
|
111
|
-
|
|
155
|
+
try_extract \
|
|
112
156
|
"Sort options — use in orderBy: { ... }" \
|
|
113
157
|
"^input ${ENTITY}_OrderBy" \
|
|
114
158
|
60
|
|
115
159
|
|
|
116
|
-
# 4. Create mutation
|
|
117
|
-
|
|
160
|
+
# 4. Create mutation wrapper
|
|
161
|
+
try_extract \
|
|
118
162
|
"Create mutation wrapper — ${ENTITY}CreateInput" \
|
|
119
163
|
"^input ${ENTITY}CreateInput" \
|
|
120
164
|
10
|
|
121
165
|
|
|
122
|
-
|
|
166
|
+
# 5. Create mutation fields
|
|
167
|
+
try_extract \
|
|
123
168
|
"Create mutation fields — ${ENTITY}CreateRepresentation" \
|
|
124
169
|
"^input ${ENTITY}CreateRepresentation" \
|
|
125
170
|
100
|
|
126
171
|
|
|
127
|
-
#
|
|
128
|
-
|
|
172
|
+
# 6. Update mutation wrapper
|
|
173
|
+
try_extract \
|
|
129
174
|
"Update mutation wrapper — ${ENTITY}UpdateInput" \
|
|
130
175
|
"^input ${ENTITY}UpdateInput" \
|
|
131
176
|
10
|
|
132
177
|
|
|
133
|
-
|
|
178
|
+
# 7. Update mutation fields
|
|
179
|
+
try_extract \
|
|
134
180
|
"Update mutation fields — ${ENTITY}UpdateRepresentation" \
|
|
135
181
|
"^input ${ENTITY}UpdateRepresentation" \
|
|
136
182
|
100
|
|
137
183
|
|
|
184
|
+
if [ "$found" -eq 0 ]; then
|
|
185
|
+
echo "WARNING: No schema entries found for '$ENTITY'."
|
|
186
|
+
echo " - Names are PascalCase (e.g., 'Account' not 'account')"
|
|
187
|
+
echo " - Custom objects may need deployment first"
|
|
188
|
+
fi
|
|
189
|
+
|
|
138
190
|
echo ""
|
|
139
191
|
done
|
|
@@ -54,22 +54,18 @@ cd <sfdx-source>/webapplications/<appName>
|
|
|
54
54
|
|
|
55
55
|
**Before finishing changes:** run `npm run build` and `npm run lint` from the web app directory; both must succeed.
|
|
56
56
|
|
|
57
|
-
## Agent
|
|
57
|
+
## Agent rules (.a4drules/)
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
Markdown rules at the project root under **.a4drules/** define platform constraints:
|
|
60
60
|
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- **Accessing Data** (`.a4drules/skills/accessing-data/`): Use for all Salesforce data fetches. Enforces Data SDK usage (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`); GraphQL preferred, fetch when GraphQL is not sufficient.
|
|
64
|
-
- **Fetching REST API** (`.a4drules/skills/fetching-rest-api/`): Use when implementing Chatter, Connect REST, Apex REST, UI API REST, or Einstein LLM calls via `sdk.fetch`.
|
|
65
|
-
- **Using GraphQL** (`.a4drules/skills/using-graphql/`): Use when implementing Salesforce GraphQL queries or mutations. Sub-skills: `exploring-graphql-schema`, `generating-graphql-read-query`, `generating-graphql-mutation-query`.
|
|
66
|
-
- **Deploying to Salesforce** (`.a4drules/skills/deploying-to-salesforce/`): Use when deploying metadata, fetching GraphQL schema, or generating deploy/setup commands. Enforces deploy → permset → schema → codegen order; schema refetch after metadata deployment.
|
|
61
|
+
- **`.a4drules/webapp-ui.md`** — Salesforce Web Application UI (scaffold with `sf webapp generate`, no LWC/Aura for new UI).
|
|
62
|
+
- **`.a4drules/webapp-data.md`** — Salesforce data access (Data SDK only, supported APIs, GraphQL workflow, `scripts/graphql-search.sh` for schema lookup).
|
|
67
63
|
|
|
68
64
|
When rules refer to "web app directory" or `<sfdx-source>/webapplications/<appName>/`, resolve `<sfdx-source>` from `sfdx-project.json` and use the **actual app folder name** for this project.
|
|
69
65
|
|
|
70
66
|
## Deploying
|
|
71
67
|
|
|
72
|
-
**Deployment order:** Metadata (objects, permission sets) must be deployed before GraphQL schema fetch. After any metadata deployment, re-run `npm run graphql:schema` and `npm run graphql:codegen` from the webapp dir. **One-command setup:** `node scripts/setup-cli.mjs --target-org <alias>` runs deploy → permset → schema → codegen in the correct order.
|
|
68
|
+
**Deployment order:** Metadata (objects, permission sets) must be deployed before GraphQL schema fetch. After any metadata deployment, re-run `npm run graphql:schema` and `npm run graphql:codegen` from the webapp dir. **One-command setup:** `node scripts/setup-cli.mjs --target-org <alias>` runs deploy → permset → schema → codegen in the correct order.
|
|
73
69
|
|
|
74
70
|
From **this project root** (resolve the actual SFDX source path from `sfdx-project.json`):
|
|
75
71
|
|
|
@@ -88,4 +84,4 @@ sf project deploy start --source-dir <packageDir> --target-org <alias>
|
|
|
88
84
|
|
|
89
85
|
- **UI**: shadcn/ui + Tailwind. Import from `@/components/ui/...`.
|
|
90
86
|
- **Entry**: Keep `App.tsx` and routes in `src/`; add features as new routes or sections, don't replace the app shell but you may modify it to match the requested design.
|
|
91
|
-
- **Data (Salesforce)**:
|
|
87
|
+
- **Data (Salesforce)**: Follow `.a4drules/webapp-data.md` for all Salesforce data access. Use the Data SDK (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`) — never use `fetch` or `axios` directly. GraphQL is preferred; use `sdk.fetch` when GraphQL is not sufficient.
|