@salesforce/templates 65.4.3 → 65.5.0
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/dxpSiteGenerator.d.ts +25 -0
- package/lib/generators/dxpSiteGenerator.js +207 -0
- package/lib/generators/dxpSiteGenerator.js.map +1 -0
- package/lib/generators/flexipageGenerator.d.ts +15 -0
- package/lib/generators/flexipageGenerator.js +120 -0
- package/lib/generators/flexipageGenerator.js.map +1 -0
- package/lib/generators/webApplicationGenerator.d.ts +1 -0
- package/lib/generators/webApplicationGenerator.js +41 -17
- package/lib/generators/webApplicationGenerator.js.map +1 -1
- package/lib/i18n/i18n.d.ts +7 -0
- package/lib/i18n/i18n.js +7 -0
- package/lib/i18n/i18n.js.map +1 -1
- package/lib/templates/dxpsite/build_your_own_lwr/_customSite.xml +28 -0
- package/lib/templates/dxpsite/build_your_own_lwr/_digitalExperience.xml +15 -0
- package/lib/templates/dxpsite/build_your_own_lwr/_digitalExperienceConfig.xml +8 -0
- package/lib/templates/dxpsite/build_your_own_lwr/_network.xml +59 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__appPage/mainAppPage/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__appPage/mainAppPage/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__brandingSet/Build_Your_Own_LWR/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__brandingSet/Build_Your_Own_LWR/content.json +280 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__languageSettings/languages/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__languageSettings/languages/content.json +16 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__mobilePublisherConfig/mobilePublisherConfig/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__mobilePublisherConfig/mobilePublisherConfig/content.json +49 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Check_Password/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Check_Password/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Error/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Error/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Forgot_Password/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Forgot_Password/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Home/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Home/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Login/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Login/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/News_Detail__c/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/News_Detail__c/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Register/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Register/content.json +12 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Service_Not_Available/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Service_Not_Available/content.json +14 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Too_Many_Requests/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__route/Too_Many_Requests/content.json +15 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__site/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__site/content.json +10 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__theme/Build_Your_Own_LWR/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__theme/Build_Your_Own_LWR/content.json +19 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__themeLayout/scopedHeaderAndFooter/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__themeLayout/scopedHeaderAndFooter/content.json +87 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__themeLayout/snaThemeLayout/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__themeLayout/snaThemeLayout/content.json +27 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/checkPasswordResetEmail/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/checkPasswordResetEmail/content.json +93 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/error/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/error/content.json +81 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/forgotPassword/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/forgotPassword/content.json +96 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/home/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/home/content.json +81 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/login/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/login/content.json +111 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/newsDetail/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/newsDetail/content.json +61 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/register/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/register/content.json +99 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/serviceNotAvailable/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/serviceNotAvailable/content.json +54 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/tooManyRequests/_meta.json +5 -0
- package/lib/templates/dxpsite/build_your_own_lwr/sfdc_cms__view/tooManyRequests/content.json +68 -0
- package/lib/templates/flexipage/AppPage/_flexipage.flexipage-meta.xml +118 -0
- package/lib/templates/flexipage/HomePage/_flexipage.flexipage-meta.xml +127 -0
- package/lib/templates/flexipage/RecordPage/_flexipage.flexipage-meta.xml +337 -0
- package/lib/templates/webapplication/reactbasic/.prettierignore +9 -0
- package/lib/templates/webapplication/reactbasic/.prettierrc +11 -0
- package/lib/templates/webapplication/reactbasic/README.md +73 -0
- package/lib/templates/webapplication/reactbasic/eslint.config.js +113 -0
- package/lib/templates/webapplication/reactbasic/index.html +2 -1
- package/lib/templates/webapplication/reactbasic/package-lock.json +5248 -0
- package/lib/templates/webapplication/reactbasic/package.json +29 -19
- package/lib/templates/webapplication/reactbasic/src/app.tsx +13 -0
- package/lib/templates/webapplication/reactbasic/src/appLayout.tsx +9 -0
- package/lib/templates/webapplication/reactbasic/src/assets/icons/book.svg +3 -0
- package/lib/templates/webapplication/reactbasic/src/assets/icons/copy.svg +4 -0
- package/lib/templates/webapplication/reactbasic/src/assets/icons/rocket.svg +3 -0
- package/lib/templates/webapplication/reactbasic/src/assets/icons/star.svg +3 -0
- package/lib/templates/webapplication/reactbasic/src/assets/images/codey-1.png +0 -0
- package/lib/templates/webapplication/reactbasic/src/assets/images/codey-2.png +0 -0
- package/lib/templates/webapplication/reactbasic/src/assets/images/codey-3.png +0 -0
- package/lib/templates/webapplication/reactbasic/src/assets/images/vibe-codey.svg +194 -0
- package/lib/templates/webapplication/reactbasic/src/pages/About.tsx +9 -10
- package/lib/templates/webapplication/reactbasic/src/pages/Home.tsx +12 -15
- package/lib/templates/webapplication/reactbasic/src/pages/NotFound.tsx +3 -6
- package/lib/templates/webapplication/reactbasic/src/routes.tsx +23 -0
- package/lib/templates/webapplication/reactbasic/src/styles/global.css +6 -5
- package/lib/templates/webapplication/reactbasic/tsconfig.json +14 -5
- package/lib/templates/webapplication/reactbasic/tsconfig.node.json +0 -1
- package/lib/templates/webapplication/reactbasic/{src/vite-env.d.ts → vite-env.d.ts} +0 -1
- package/lib/templates/webapplication/reactbasic/vite.config.ts +62 -16
- package/lib/templates/webapplication/reactbasic/vitest-env.d.ts +2 -0
- package/lib/templates/webapplication/reactbasic/vitest.config.ts +11 -0
- package/lib/templates/webapplication/reactbasic/vitest.setup.ts +1 -0
- package/lib/templates/webapplication/reactbasic/webapp.json +7 -12
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/types.d.ts +34 -11
- package/lib/utils/types.js +16 -10
- package/lib/utils/types.js.map +1 -1
- package/package.json +7 -4
- package/lib/templates/webapplication/reactbasic/postcss.config.js +0 -7
- package/lib/templates/webapplication/reactbasic/src/App.tsx +0 -25
- package/lib/templates/webapplication/reactbasic/src/components/Navigation.tsx +0 -70
- package/lib/templates/webapplication/reactbasic/src/main.tsx +0 -14
- package/lib/templates/webapplication/reactbasic/src/routes.ts +0 -20
- package/lib/templates/webapplication/reactbasic/src/test-setup/setup.ts +0 -10
- package/lib/templates/webapplication/reactbasic/tailwind.config.js +0 -9
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
HomePage FlexiPage Template using home:desktopTemplate
|
|
4
|
+
|
|
5
|
+
Template Variables Available:
|
|
6
|
+
- flexipagename: The name of the FlexiPage
|
|
7
|
+
- masterlabel: The display label
|
|
8
|
+
- description: The page description
|
|
9
|
+
- apiVersion: The Salesforce API version
|
|
10
|
+
|
|
11
|
+
Layout Regions:
|
|
12
|
+
- top: Top region (full width)
|
|
13
|
+
- bottomLeft: Bottom left column
|
|
14
|
+
- bottomRight: Bottom right column
|
|
15
|
+
- sidebar: Right sidebar
|
|
16
|
+
-->
|
|
17
|
+
<FlexiPage xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
18
|
+
<!-- Top Region (full width) -->
|
|
19
|
+
<flexiPageRegions>
|
|
20
|
+
<itemInstances>
|
|
21
|
+
<componentInstance>
|
|
22
|
+
<componentInstanceProperties>
|
|
23
|
+
<name>decorate</name>
|
|
24
|
+
<value>true</value>
|
|
25
|
+
</componentInstanceProperties>
|
|
26
|
+
<componentInstanceProperties>
|
|
27
|
+
<name>richTextValue</name>
|
|
28
|
+
<value><p><strong style="font-size: 24px;">Welcome!</strong></p></value>
|
|
29
|
+
</componentInstanceProperties>
|
|
30
|
+
<componentName>flexipage:richText</componentName>
|
|
31
|
+
<identifier>flexipage_richText</identifier>
|
|
32
|
+
</componentInstance>
|
|
33
|
+
</itemInstances>
|
|
34
|
+
<name>top</name>
|
|
35
|
+
<type>Region</type>
|
|
36
|
+
</flexiPageRegions>
|
|
37
|
+
|
|
38
|
+
<!-- Bottom Left Region -->
|
|
39
|
+
<flexiPageRegions>
|
|
40
|
+
<itemInstances>
|
|
41
|
+
<componentInstance>
|
|
42
|
+
<componentInstanceProperties>
|
|
43
|
+
<name>entityNames</name>
|
|
44
|
+
<valueList>
|
|
45
|
+
<valueListItems>
|
|
46
|
+
<value>Account</value>
|
|
47
|
+
</valueListItems>
|
|
48
|
+
<valueListItems>
|
|
49
|
+
<value>Opportunity</value>
|
|
50
|
+
</valueListItems>
|
|
51
|
+
</valueList>
|
|
52
|
+
</componentInstanceProperties>
|
|
53
|
+
<componentInstanceProperties>
|
|
54
|
+
<name>label</name>
|
|
55
|
+
<value>Standard.RecentItems</value>
|
|
56
|
+
</componentInstanceProperties>
|
|
57
|
+
<componentInstanceProperties>
|
|
58
|
+
<name>maxRecords</name>
|
|
59
|
+
<value>5</value>
|
|
60
|
+
</componentInstanceProperties>
|
|
61
|
+
<componentName>flexipage:recentItems</componentName>
|
|
62
|
+
<identifier>flexipage_recentItems</identifier>
|
|
63
|
+
</componentInstance>
|
|
64
|
+
</itemInstances>
|
|
65
|
+
<itemInstances>
|
|
66
|
+
<componentInstance>
|
|
67
|
+
<componentName>home:eventContainer</componentName>
|
|
68
|
+
<identifier>home_eventContainer</identifier>
|
|
69
|
+
</componentInstance>
|
|
70
|
+
</itemInstances>
|
|
71
|
+
<name>bottomLeft</name>
|
|
72
|
+
<type>Region</type>
|
|
73
|
+
</flexiPageRegions>
|
|
74
|
+
|
|
75
|
+
<!-- Bottom Right Region -->
|
|
76
|
+
<flexiPageRegions>
|
|
77
|
+
<itemInstances>
|
|
78
|
+
<componentInstance>
|
|
79
|
+
<componentName>runtime_sales_activities:todayTaskContainer</componentName>
|
|
80
|
+
<identifier>runtime_sales_activities_todayTaskContainer</identifier>
|
|
81
|
+
</componentInstance>
|
|
82
|
+
</itemInstances>
|
|
83
|
+
<itemInstances>
|
|
84
|
+
<componentInstance>
|
|
85
|
+
<componentInstanceProperties>
|
|
86
|
+
<name>context</name>
|
|
87
|
+
<value>NEWS</value>
|
|
88
|
+
</componentInstanceProperties>
|
|
89
|
+
<componentName>forceChatter:exposedFeed</componentName>
|
|
90
|
+
<identifier>forceChatter_exposedFeed</identifier>
|
|
91
|
+
</componentInstance>
|
|
92
|
+
</itemInstances>
|
|
93
|
+
<name>bottomRight</name>
|
|
94
|
+
<type>Region</type>
|
|
95
|
+
</flexiPageRegions>
|
|
96
|
+
|
|
97
|
+
<!-- Sidebar Region -->
|
|
98
|
+
<flexiPageRegions>
|
|
99
|
+
<itemInstances>
|
|
100
|
+
<componentInstance>
|
|
101
|
+
<componentInstanceProperties>
|
|
102
|
+
<name>dashboardName</name>
|
|
103
|
+
<value>Program_Dashboard_sfdcSESv60</value>
|
|
104
|
+
</componentInstanceProperties>
|
|
105
|
+
<componentInstanceProperties>
|
|
106
|
+
<name>height</name>
|
|
107
|
+
<value>450</value>
|
|
108
|
+
</componentInstanceProperties>
|
|
109
|
+
<componentInstanceProperties>
|
|
110
|
+
<name>hideOnError</name>
|
|
111
|
+
<value>true</value>
|
|
112
|
+
</componentInstanceProperties>
|
|
113
|
+
<componentName>desktopDashboards:embeddedDashboard</componentName>
|
|
114
|
+
<identifier>desktopDashboards_embeddedDashboard</identifier>
|
|
115
|
+
</componentInstance>
|
|
116
|
+
</itemInstances>
|
|
117
|
+
<name>sidebar</name>
|
|
118
|
+
<type>Region</type>
|
|
119
|
+
</flexiPageRegions>
|
|
120
|
+
|
|
121
|
+
<description><%= description %></description>
|
|
122
|
+
<masterLabel><%= masterlabel %></masterLabel>
|
|
123
|
+
<template>
|
|
124
|
+
<name>home:desktopTemplate</name>
|
|
125
|
+
</template>
|
|
126
|
+
<type>HomePage</type>
|
|
127
|
+
</FlexiPage>
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
RecordPage FlexiPage Template
|
|
4
|
+
|
|
5
|
+
Template Variables Available:
|
|
6
|
+
- flexipagename: The name of the FlexiPage
|
|
7
|
+
- masterlabel: The display label
|
|
8
|
+
- description: The page description
|
|
9
|
+
- apiVersion: The Salesforce API version
|
|
10
|
+
- entityName: The SObject API name (e.g., 'Account', 'Rental_Property__c')
|
|
11
|
+
- primaryField: Single primary field API name for dynamic highlights (e.g., 'Name')
|
|
12
|
+
- secondaryFields: Array of secondary field API names for dynamic highlights
|
|
13
|
+
- detailFields: Array of field API names for the Details tab field section
|
|
14
|
+
-->
|
|
15
|
+
<FlexiPage xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
16
|
+
<% if (primaryField) { %>
|
|
17
|
+
<flexiPageRegions>
|
|
18
|
+
<itemInstances>
|
|
19
|
+
<fieldInstance>
|
|
20
|
+
<fieldInstanceProperties>
|
|
21
|
+
<name>uiBehavior</name>
|
|
22
|
+
<value>none</value>
|
|
23
|
+
</fieldInstanceProperties>
|
|
24
|
+
<fieldItem>Record.<%= primaryField %></fieldItem>
|
|
25
|
+
<identifier>Record<%= primaryField.replace(/\./g, '_') %>PrimaryField</identifier>
|
|
26
|
+
</fieldInstance>
|
|
27
|
+
</itemInstances>
|
|
28
|
+
<name>Facet-PrimaryFields</name>
|
|
29
|
+
<type>Facet</type>
|
|
30
|
+
</flexiPageRegions>
|
|
31
|
+
<% } %>
|
|
32
|
+
<% if (secondaryFields && secondaryFields.length > 0) { %>
|
|
33
|
+
<flexiPageRegions>
|
|
34
|
+
<% secondaryFields.forEach((field, index) => { %>
|
|
35
|
+
<itemInstances>
|
|
36
|
+
<fieldInstance>
|
|
37
|
+
<fieldInstanceProperties>
|
|
38
|
+
<name>uiBehavior</name>
|
|
39
|
+
<value>none</value>
|
|
40
|
+
</fieldInstanceProperties>
|
|
41
|
+
<fieldItem>Record.<%= field %></fieldItem>
|
|
42
|
+
<identifier>Record<%= field.replace(/\./g, '_') %>SecondaryField<%= index %></identifier>
|
|
43
|
+
</fieldInstance>
|
|
44
|
+
</itemInstances>
|
|
45
|
+
<% }); %>
|
|
46
|
+
<name>Facet-SecondaryFields</name>
|
|
47
|
+
<type>Facet</type>
|
|
48
|
+
</flexiPageRegions>
|
|
49
|
+
<% } %>
|
|
50
|
+
<flexiPageRegions>
|
|
51
|
+
<itemInstances>
|
|
52
|
+
<componentInstance>
|
|
53
|
+
<componentInstanceProperties>
|
|
54
|
+
<name>actionNames</name>
|
|
55
|
+
<valueList>
|
|
56
|
+
<valueListItems>
|
|
57
|
+
<value>Edit</value>
|
|
58
|
+
</valueListItems>
|
|
59
|
+
<valueListItems>
|
|
60
|
+
<value>Delete</value>
|
|
61
|
+
</valueListItems>
|
|
62
|
+
</valueList>
|
|
63
|
+
</componentInstanceProperties>
|
|
64
|
+
<componentInstanceProperties>
|
|
65
|
+
<name>numVisibleActions</name>
|
|
66
|
+
<value>3</value>
|
|
67
|
+
</componentInstanceProperties>
|
|
68
|
+
<% if (primaryField) { %>
|
|
69
|
+
<componentInstanceProperties>
|
|
70
|
+
<name>primaryField</name>
|
|
71
|
+
<value>Facet-PrimaryFields</value>
|
|
72
|
+
</componentInstanceProperties>
|
|
73
|
+
<% } %>
|
|
74
|
+
<% if (secondaryFields && secondaryFields.length > 0) { %>
|
|
75
|
+
<componentInstanceProperties>
|
|
76
|
+
<name>secondaryFields</name>
|
|
77
|
+
<value>Facet-SecondaryFields</value>
|
|
78
|
+
</componentInstanceProperties>
|
|
79
|
+
<% } %>
|
|
80
|
+
<componentName>record_flexipage:dynamicHighlights</componentName>
|
|
81
|
+
<identifier>record_flexipage_dynamicHighlights</identifier>
|
|
82
|
+
</componentInstance>
|
|
83
|
+
</itemInstances>
|
|
84
|
+
<name>header</name>
|
|
85
|
+
<type>Region</type>
|
|
86
|
+
</flexiPageRegions>
|
|
87
|
+
<flexiPageRegions>
|
|
88
|
+
<itemInstances>
|
|
89
|
+
<componentInstance>
|
|
90
|
+
<componentInstanceProperties>
|
|
91
|
+
<name>relatedListComponentOverride</name>
|
|
92
|
+
<value>NONE</value>
|
|
93
|
+
</componentInstanceProperties>
|
|
94
|
+
<componentInstanceProperties>
|
|
95
|
+
<name>rowsToDisplay</name>
|
|
96
|
+
<value>10</value>
|
|
97
|
+
</componentInstanceProperties>
|
|
98
|
+
<componentInstanceProperties>
|
|
99
|
+
<name>showActionBar</name>
|
|
100
|
+
<value>true</value>
|
|
101
|
+
</componentInstanceProperties>
|
|
102
|
+
<componentName>force:relatedListContainer</componentName>
|
|
103
|
+
<identifier>force_relatedListContainer</identifier>
|
|
104
|
+
</componentInstance>
|
|
105
|
+
</itemInstances>
|
|
106
|
+
<name>relatedTabContent</name>
|
|
107
|
+
<type>Facet</type>
|
|
108
|
+
</flexiPageRegions>
|
|
109
|
+
<!-- Field Section: Detail Fields -->
|
|
110
|
+
<%
|
|
111
|
+
// Use detailFields if provided, otherwise default fields
|
|
112
|
+
const allDetailFields = (detailFields && detailFields.length > 0)
|
|
113
|
+
? detailFields
|
|
114
|
+
: ['Name', 'OwnerId', 'CreatedById', 'LastModifiedById'];
|
|
115
|
+
// Split fields into two columns
|
|
116
|
+
const midpoint = Math.ceil(allDetailFields.length / 2);
|
|
117
|
+
const column1Fields = allDetailFields.slice(0, midpoint);
|
|
118
|
+
const column2Fields = allDetailFields.slice(midpoint);
|
|
119
|
+
%>
|
|
120
|
+
<!-- Column 1 Fields -->
|
|
121
|
+
<flexiPageRegions>
|
|
122
|
+
<% column1Fields.forEach((field, index) => { %>
|
|
123
|
+
<itemInstances>
|
|
124
|
+
<fieldInstance>
|
|
125
|
+
<fieldInstanceProperties>
|
|
126
|
+
<name>uiBehavior</name>
|
|
127
|
+
<value>none</value>
|
|
128
|
+
</fieldInstanceProperties>
|
|
129
|
+
<fieldItem>Record.<%= field %></fieldItem>
|
|
130
|
+
<identifier>Record<%= field.replace(/\./g, '_') %>Column1Field<%= index %></identifier>
|
|
131
|
+
</fieldInstance>
|
|
132
|
+
</itemInstances>
|
|
133
|
+
<% }); %>
|
|
134
|
+
<name>Facet-FieldSection-Column1</name>
|
|
135
|
+
<type>Facet</type>
|
|
136
|
+
</flexiPageRegions>
|
|
137
|
+
<!-- Column 2 Fields -->
|
|
138
|
+
<% if (column2Fields.length > 0) { %>
|
|
139
|
+
<flexiPageRegions>
|
|
140
|
+
<% column2Fields.forEach((field, index) => { %>
|
|
141
|
+
<itemInstances>
|
|
142
|
+
<fieldInstance>
|
|
143
|
+
<fieldInstanceProperties>
|
|
144
|
+
<name>uiBehavior</name>
|
|
145
|
+
<value>none</value>
|
|
146
|
+
</fieldInstanceProperties>
|
|
147
|
+
<fieldItem>Record.<%= field %></fieldItem>
|
|
148
|
+
<identifier>Record<%= field.replace(/\./g, '_') %>Column2Field<%= index %></identifier>
|
|
149
|
+
</fieldInstance>
|
|
150
|
+
</itemInstances>
|
|
151
|
+
<% }); %>
|
|
152
|
+
<name>Facet-FieldSection-Column2</name>
|
|
153
|
+
<type>Facet</type>
|
|
154
|
+
</flexiPageRegions>
|
|
155
|
+
<% } %>
|
|
156
|
+
<!-- Field Section: Column Facets -->
|
|
157
|
+
<flexiPageRegions>
|
|
158
|
+
<itemInstances>
|
|
159
|
+
<componentInstance>
|
|
160
|
+
<componentInstanceProperties>
|
|
161
|
+
<name>body</name>
|
|
162
|
+
<value>Facet-FieldSection-Column1</value>
|
|
163
|
+
</componentInstanceProperties>
|
|
164
|
+
<componentName>flexipage:column</componentName>
|
|
165
|
+
<identifier>flexipage_column1</identifier>
|
|
166
|
+
</componentInstance>
|
|
167
|
+
</itemInstances>
|
|
168
|
+
<% if (column2Fields.length > 0) { %>
|
|
169
|
+
<itemInstances>
|
|
170
|
+
<componentInstance>
|
|
171
|
+
<componentInstanceProperties>
|
|
172
|
+
<name>body</name>
|
|
173
|
+
<value>Facet-FieldSection-Column2</value>
|
|
174
|
+
</componentInstanceProperties>
|
|
175
|
+
<componentName>flexipage:column</componentName>
|
|
176
|
+
<identifier>flexipage_column2</identifier>
|
|
177
|
+
</componentInstance>
|
|
178
|
+
</itemInstances>
|
|
179
|
+
<% } %>
|
|
180
|
+
<name>Facet-FieldSection-Columns</name>
|
|
181
|
+
<type>Facet</type>
|
|
182
|
+
</flexiPageRegions>
|
|
183
|
+
<!-- Field Section Component -->
|
|
184
|
+
<flexiPageRegions>
|
|
185
|
+
<itemInstances>
|
|
186
|
+
<componentInstance>
|
|
187
|
+
<componentInstanceProperties>
|
|
188
|
+
<name>columns</name>
|
|
189
|
+
<value>Facet-FieldSection-Columns</value>
|
|
190
|
+
</componentInstanceProperties>
|
|
191
|
+
<componentInstanceProperties>
|
|
192
|
+
<name>horizontalAlignment</name>
|
|
193
|
+
<value>false</value>
|
|
194
|
+
</componentInstanceProperties>
|
|
195
|
+
<componentInstanceProperties>
|
|
196
|
+
<name>label</name>
|
|
197
|
+
<value>Information</value>
|
|
198
|
+
</componentInstanceProperties>
|
|
199
|
+
<componentName>flexipage:fieldSection</componentName>
|
|
200
|
+
<identifier>flexipage_fieldSection</identifier>
|
|
201
|
+
</componentInstance>
|
|
202
|
+
</itemInstances>
|
|
203
|
+
<name>detailTabContent</name>
|
|
204
|
+
<type>Facet</type>
|
|
205
|
+
</flexiPageRegions>
|
|
206
|
+
<flexiPageRegions>
|
|
207
|
+
<itemInstances>
|
|
208
|
+
<componentInstance>
|
|
209
|
+
<componentInstanceProperties>
|
|
210
|
+
<name>body</name>
|
|
211
|
+
<value>relatedTabContent</value>
|
|
212
|
+
</componentInstanceProperties>
|
|
213
|
+
<componentInstanceProperties>
|
|
214
|
+
<name>title</name>
|
|
215
|
+
<value>Standard.Tab.relatedLists</value>
|
|
216
|
+
</componentInstanceProperties>
|
|
217
|
+
<componentName>flexipage:tab</componentName>
|
|
218
|
+
<identifier>relatedListsTab</identifier>
|
|
219
|
+
</componentInstance>
|
|
220
|
+
</itemInstances>
|
|
221
|
+
<itemInstances>
|
|
222
|
+
<componentInstance>
|
|
223
|
+
<componentInstanceProperties>
|
|
224
|
+
<name>active</name>
|
|
225
|
+
<value>true</value>
|
|
226
|
+
</componentInstanceProperties>
|
|
227
|
+
<componentInstanceProperties>
|
|
228
|
+
<name>body</name>
|
|
229
|
+
<value>detailTabContent</value>
|
|
230
|
+
</componentInstanceProperties>
|
|
231
|
+
<componentInstanceProperties>
|
|
232
|
+
<name>title</name>
|
|
233
|
+
<value>Standard.Tab.detail</value>
|
|
234
|
+
</componentInstanceProperties>
|
|
235
|
+
<componentName>flexipage:tab</componentName>
|
|
236
|
+
<identifier>detailTab</identifier>
|
|
237
|
+
</componentInstance>
|
|
238
|
+
</itemInstances>
|
|
239
|
+
<name>maintabs</name>
|
|
240
|
+
<type>Facet</type>
|
|
241
|
+
</flexiPageRegions>
|
|
242
|
+
<flexiPageRegions>
|
|
243
|
+
<itemInstances>
|
|
244
|
+
<componentInstance>
|
|
245
|
+
<componentInstanceProperties>
|
|
246
|
+
<name>tabs</name>
|
|
247
|
+
<value>maintabs</value>
|
|
248
|
+
</componentInstanceProperties>
|
|
249
|
+
<componentName>flexipage:tabset</componentName>
|
|
250
|
+
<identifier>flexipage_tabset</identifier>
|
|
251
|
+
</componentInstance>
|
|
252
|
+
</itemInstances>
|
|
253
|
+
<name>main</name>
|
|
254
|
+
<type>Region</type>
|
|
255
|
+
</flexiPageRegions>
|
|
256
|
+
<flexiPageRegions>
|
|
257
|
+
<itemInstances>
|
|
258
|
+
<componentInstance>
|
|
259
|
+
<componentInstanceProperties>
|
|
260
|
+
<name>showLegacyActivityComposer</name>
|
|
261
|
+
<value>false</value>
|
|
262
|
+
</componentInstanceProperties>
|
|
263
|
+
<componentName>runtime_sales_activities:activityPanel</componentName>
|
|
264
|
+
<identifier>runtime_sales_activities_activityPanel</identifier>
|
|
265
|
+
</componentInstance>
|
|
266
|
+
</itemInstances>
|
|
267
|
+
<name>activityTabContent</name>
|
|
268
|
+
<type>Facet</type>
|
|
269
|
+
</flexiPageRegions>
|
|
270
|
+
<flexiPageRegions>
|
|
271
|
+
<itemInstances>
|
|
272
|
+
<componentInstance>
|
|
273
|
+
<componentName>forceChatter:recordFeedContainer</componentName>
|
|
274
|
+
<identifier>forceChatter_recordFeedContainer</identifier>
|
|
275
|
+
</componentInstance>
|
|
276
|
+
</itemInstances>
|
|
277
|
+
<name>feedTabContent</name>
|
|
278
|
+
<type>Facet</type>
|
|
279
|
+
</flexiPageRegions>
|
|
280
|
+
<flexiPageRegions>
|
|
281
|
+
<itemInstances>
|
|
282
|
+
<componentInstance>
|
|
283
|
+
<componentInstanceProperties>
|
|
284
|
+
<name>active</name>
|
|
285
|
+
<value>true</value>
|
|
286
|
+
</componentInstanceProperties>
|
|
287
|
+
<componentInstanceProperties>
|
|
288
|
+
<name>body</name>
|
|
289
|
+
<value>activityTabContent</value>
|
|
290
|
+
</componentInstanceProperties>
|
|
291
|
+
<componentInstanceProperties>
|
|
292
|
+
<name>title</name>
|
|
293
|
+
<value>Standard.Tab.activity</value>
|
|
294
|
+
</componentInstanceProperties>
|
|
295
|
+
<componentName>flexipage:tab</componentName>
|
|
296
|
+
<identifier>activityTab</identifier>
|
|
297
|
+
</componentInstance>
|
|
298
|
+
</itemInstances>
|
|
299
|
+
<itemInstances>
|
|
300
|
+
<componentInstance>
|
|
301
|
+
<componentInstanceProperties>
|
|
302
|
+
<name>body</name>
|
|
303
|
+
<value>feedTabContent</value>
|
|
304
|
+
</componentInstanceProperties>
|
|
305
|
+
<componentInstanceProperties>
|
|
306
|
+
<name>title</name>
|
|
307
|
+
<value>Standard.Tab.collaborate</value>
|
|
308
|
+
</componentInstanceProperties>
|
|
309
|
+
<componentName>flexipage:tab</componentName>
|
|
310
|
+
<identifier>collaborateTab</identifier>
|
|
311
|
+
</componentInstance>
|
|
312
|
+
</itemInstances>
|
|
313
|
+
<name>sidebartabs</name>
|
|
314
|
+
<type>Facet</type>
|
|
315
|
+
</flexiPageRegions>
|
|
316
|
+
<flexiPageRegions>
|
|
317
|
+
<itemInstances>
|
|
318
|
+
<componentInstance>
|
|
319
|
+
<componentInstanceProperties>
|
|
320
|
+
<name>tabs</name>
|
|
321
|
+
<value>sidebartabs</value>
|
|
322
|
+
</componentInstanceProperties>
|
|
323
|
+
<componentName>flexipage:tabset</componentName>
|
|
324
|
+
<identifier>flexipage_tabset2</identifier>
|
|
325
|
+
</componentInstance>
|
|
326
|
+
</itemInstances>
|
|
327
|
+
<name>sidebar</name>
|
|
328
|
+
<type>Region</type>
|
|
329
|
+
</flexiPageRegions>
|
|
330
|
+
<description><%= description %></description>
|
|
331
|
+
<masterLabel><%= masterlabel %></masterLabel>
|
|
332
|
+
<sobjectType><%= entityName %></sobjectType>
|
|
333
|
+
<template>
|
|
334
|
+
<name>flexipage:recordHomeTemplateDesktop</name>
|
|
335
|
+
</template>
|
|
336
|
+
<type>RecordPage</type>
|
|
337
|
+
</FlexiPage>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# React + TypeScript + Vite
|
|
2
|
+
|
|
3
|
+
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
|
4
|
+
|
|
5
|
+
Currently, two official plugins are available:
|
|
6
|
+
|
|
7
|
+
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
|
|
8
|
+
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
|
9
|
+
|
|
10
|
+
## React Compiler
|
|
11
|
+
|
|
12
|
+
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
|
|
13
|
+
|
|
14
|
+
## Expanding the ESLint configuration
|
|
15
|
+
|
|
16
|
+
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
export default defineConfig([
|
|
20
|
+
globalIgnores(['dist']),
|
|
21
|
+
{
|
|
22
|
+
files: ['**/*.{ts,tsx}'],
|
|
23
|
+
extends: [
|
|
24
|
+
// Other configs...
|
|
25
|
+
|
|
26
|
+
// Remove tseslint.configs.recommended and replace with this
|
|
27
|
+
tseslint.configs.recommendedTypeChecked,
|
|
28
|
+
// Alternatively, use this for stricter rules
|
|
29
|
+
tseslint.configs.strictTypeChecked,
|
|
30
|
+
// Optionally, add this for stylistic rules
|
|
31
|
+
tseslint.configs.stylisticTypeChecked,
|
|
32
|
+
|
|
33
|
+
// Other configs...
|
|
34
|
+
],
|
|
35
|
+
languageOptions: {
|
|
36
|
+
parserOptions: {
|
|
37
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
38
|
+
tsconfigRootDir: import.meta.dirname,
|
|
39
|
+
},
|
|
40
|
+
// other options...
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
])
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
// eslint.config.js
|
|
50
|
+
import reactX from 'eslint-plugin-react-x'
|
|
51
|
+
import reactDom from 'eslint-plugin-react-dom'
|
|
52
|
+
|
|
53
|
+
export default defineConfig([
|
|
54
|
+
globalIgnores(['dist']),
|
|
55
|
+
{
|
|
56
|
+
files: ['**/*.{ts,tsx}'],
|
|
57
|
+
extends: [
|
|
58
|
+
// Other configs...
|
|
59
|
+
// Enable lint rules for React
|
|
60
|
+
reactX.configs['recommended-typescript'],
|
|
61
|
+
// Enable lint rules for React DOM
|
|
62
|
+
reactDom.configs.recommended,
|
|
63
|
+
],
|
|
64
|
+
languageOptions: {
|
|
65
|
+
parserOptions: {
|
|
66
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
67
|
+
tsconfigRootDir: import.meta.dirname,
|
|
68
|
+
},
|
|
69
|
+
// other options...
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
])
|
|
73
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import js from '@eslint/js';
|
|
2
|
+
import globals from 'globals';
|
|
3
|
+
import reactHooks from 'eslint-plugin-react-hooks';
|
|
4
|
+
import reactRefresh from 'eslint-plugin-react-refresh';
|
|
5
|
+
import tseslint from '@typescript-eslint/eslint-plugin';
|
|
6
|
+
import tsparser from '@typescript-eslint/parser';
|
|
7
|
+
import react from 'eslint-plugin-react';
|
|
8
|
+
|
|
9
|
+
export default [
|
|
10
|
+
// Global ignores
|
|
11
|
+
{
|
|
12
|
+
ignores: ['build/**/*', 'dist/**/*', 'coverage/**/*'],
|
|
13
|
+
},
|
|
14
|
+
// Config files and build tools (first to avoid inheritance)
|
|
15
|
+
{
|
|
16
|
+
files: ['*.config.{js,ts}', 'vite.config.ts'],
|
|
17
|
+
languageOptions: {
|
|
18
|
+
parser: tsparser,
|
|
19
|
+
parserOptions: {
|
|
20
|
+
ecmaVersion: 'latest',
|
|
21
|
+
sourceType: 'module',
|
|
22
|
+
},
|
|
23
|
+
globals: {
|
|
24
|
+
...globals.node,
|
|
25
|
+
__dirname: 'readonly',
|
|
26
|
+
process: 'readonly',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
plugins: {
|
|
30
|
+
'@typescript-eslint': tseslint,
|
|
31
|
+
},
|
|
32
|
+
rules: {
|
|
33
|
+
'@typescript-eslint/no-var-requires': 'off',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
// Main TypeScript/React files
|
|
37
|
+
{
|
|
38
|
+
files: ['**/*.{ts,tsx}'],
|
|
39
|
+
ignores: [
|
|
40
|
+
'coverage',
|
|
41
|
+
'dist',
|
|
42
|
+
'node_modules',
|
|
43
|
+
'build',
|
|
44
|
+
'*.config.{js,ts}',
|
|
45
|
+
'vite.config.ts',
|
|
46
|
+
],
|
|
47
|
+
languageOptions: {
|
|
48
|
+
ecmaVersion: 2020,
|
|
49
|
+
sourceType: 'module',
|
|
50
|
+
parser: tsparser,
|
|
51
|
+
parserOptions: {
|
|
52
|
+
ecmaFeatures: {
|
|
53
|
+
jsx: true,
|
|
54
|
+
},
|
|
55
|
+
ecmaVersion: 'latest',
|
|
56
|
+
sourceType: 'module',
|
|
57
|
+
project: './tsconfig.json',
|
|
58
|
+
},
|
|
59
|
+
globals: {
|
|
60
|
+
...globals.browser,
|
|
61
|
+
JSX: 'readonly',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
plugins: {
|
|
65
|
+
react,
|
|
66
|
+
'react-hooks': reactHooks,
|
|
67
|
+
'react-refresh': reactRefresh,
|
|
68
|
+
'@typescript-eslint': tseslint,
|
|
69
|
+
},
|
|
70
|
+
rules: {
|
|
71
|
+
...js.configs.recommended.rules,
|
|
72
|
+
...tseslint.configs.recommended.rules,
|
|
73
|
+
...react.configs.recommended.rules,
|
|
74
|
+
...reactHooks.configs.recommended.rules,
|
|
75
|
+
'react/react-in-jsx-scope': 'off',
|
|
76
|
+
'react/prop-types': 'off',
|
|
77
|
+
'react/jsx-no-comment-textnodes': 'off',
|
|
78
|
+
'react/no-unescaped-entities': 'off',
|
|
79
|
+
'@typescript-eslint/no-unused-vars': [
|
|
80
|
+
'error',
|
|
81
|
+
{ argsIgnorePattern: '^_' },
|
|
82
|
+
],
|
|
83
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
84
|
+
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
85
|
+
'@typescript-eslint/no-explicit-any': 'off',
|
|
86
|
+
},
|
|
87
|
+
settings: {
|
|
88
|
+
react: {
|
|
89
|
+
version: 'detect',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
// Test files
|
|
94
|
+
{
|
|
95
|
+
files: [
|
|
96
|
+
'**/*.test.{ts,tsx}',
|
|
97
|
+
'**/test/**/*.{ts,tsx}',
|
|
98
|
+
'src/test/**/*.{ts,tsx}',
|
|
99
|
+
],
|
|
100
|
+
languageOptions: {
|
|
101
|
+
parser: tsparser,
|
|
102
|
+
globals: {
|
|
103
|
+
...globals.browser,
|
|
104
|
+
...globals.node,
|
|
105
|
+
global: 'writable',
|
|
106
|
+
JSX: 'readonly',
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
rules: {
|
|
110
|
+
'@typescript-eslint/no-explicit-any': 'off',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
];
|