@salesforce/templates 66.7.12 → 66.7.13

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.
Files changed (33) hide show
  1. package/lib/templates/project/reactexternalapp/CHANGELOG.md +208 -0
  2. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +523 -497
  3. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package.json +3 -3
  4. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountObjectDetailPage.tsx +4 -4
  5. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +10 -7
  6. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +9 -7
  7. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +9 -5
  8. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +3 -1
  9. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +10 -4
  10. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +4 -1
  11. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx +4 -4
  12. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/tsconfig.json +7 -2
  13. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +6 -0
  14. package/lib/templates/project/reactexternalapp/package.json +1 -1
  15. package/lib/templates/project/reactinternalapp/CHANGELOG.md +208 -0
  16. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +519 -493
  17. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package.json +3 -3
  18. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountObjectDetailPage.tsx +4 -4
  19. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +10 -7
  20. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +9 -7
  21. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +9 -5
  22. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +3 -1
  23. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +4 -1
  24. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx +4 -4
  25. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/tsconfig.json +7 -2
  26. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +6 -0
  27. package/lib/templates/project/reactinternalapp/package.json +1 -1
  28. package/lib/templates/uiBundles/reactbasic/package-lock.json +516 -490
  29. package/lib/templates/uiBundles/reactbasic/package.json +3 -3
  30. package/lib/templates/uiBundles/reactbasic/src/api/graphqlClient.ts +4 -1
  31. package/lib/templates/uiBundles/reactbasic/tsconfig.json +7 -2
  32. package/lib/templates/uiBundles/reactbasic/vite-env.d.ts +6 -0
  33. package/package.json +6 -6
@@ -18,8 +18,8 @@
18
18
  "graphql:schema": "node scripts/get-graphql-schema.mjs"
19
19
  },
20
20
  "dependencies": {
21
- "@salesforce/sdk-data": "^1.123.0",
22
- "@salesforce/ui-bundle": "^1.123.0",
21
+ "@salesforce/sdk-data": "^1.135.0",
22
+ "@salesforce/ui-bundle": "^1.135.0",
23
23
  "@tailwindcss/vite": "^4.1.17",
24
24
  "class-variance-authority": "^0.7.1",
25
25
  "clsx": "^2.1.1",
@@ -46,7 +46,7 @@
46
46
  "@graphql-eslint/eslint-plugin": "^4.1.0",
47
47
  "@graphql-tools/utils": "^11.0.0",
48
48
  "@playwright/test": "^1.49.0",
49
- "@salesforce/vite-plugin-ui-bundle": "^1.123.0",
49
+ "@salesforce/vite-plugin-ui-bundle": "^1.135.0",
50
50
  "@testing-library/jest-dom": "^6.6.3",
51
51
  "@testing-library/react": "^16.1.0",
52
52
  "@testing-library/user-event": "^14.5.2",
@@ -29,10 +29,10 @@ type AccountNode = NonNullable<
29
29
 
30
30
  async function fetchAccountDetail(recordId: string): Promise<AccountNode | null | undefined> {
31
31
  const data = await createDataSDK();
32
- const response = await data.graphql?.<GetAccountDetailQuery, GetAccountDetailQueryVariables>(
33
- GET_ACCOUNT_DETAIL,
34
- { id: recordId },
35
- );
32
+ const response = await data.graphql?.<GetAccountDetailQuery, GetAccountDetailQueryVariables>({
33
+ query: GET_ACCOUNT_DETAIL,
34
+ variables: { id: recordId },
35
+ });
36
36
 
37
37
  if (response?.errors?.length) {
38
38
  throw new Error(response.errors.map((e) => e.message).join("; "));
@@ -21,12 +21,15 @@ export async function searchObjects<TResult, TQuery, TVariables>(
21
21
  const { where, orderBy, first = 20, after } = options;
22
22
 
23
23
  const data = await createDataSDK();
24
- const response = await data.graphql?.<TQuery, TVariables>(query, {
25
- first,
26
- after,
27
- where,
28
- orderBy,
29
- } as TVariables);
24
+ const response = await data.graphql?.<TQuery, TVariables>({
25
+ query,
26
+ variables: {
27
+ first,
28
+ after,
29
+ where,
30
+ orderBy,
31
+ } as TVariables,
32
+ });
30
33
 
31
34
  if (response?.errors?.length) {
32
35
  throw new Error(response.errors.map((e) => e.message).join("; "));
@@ -56,7 +59,7 @@ export async function fetchDistinctValues<TQuery>(
56
59
  fieldName: string,
57
60
  ): Promise<PicklistOption[]> {
58
61
  const data = await createDataSDK();
59
- const response = await data.graphql?.<TQuery>(query);
62
+ const response = await data.graphql?.<TQuery>({ query });
60
63
  const errors = response?.errors;
61
64
 
62
65
  if (errors?.length) {
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useState } from "react";
1
+ import { useEffect, useRef, useState } from "react";
2
2
 
3
3
  interface UseAsyncDataResult<T> {
4
4
  data: T | null;
@@ -23,17 +23,18 @@ export function useAsyncData<T>(
23
23
  const [loading, setLoading] = useState(true);
24
24
  const [error, setError] = useState<string | null>(null);
25
25
 
26
- // Re-create the fetcher reference only when deps change.
27
- // eslint-disable-next-line react-hooks/exhaustive-deps --- deps are explicitly managed by the caller
28
- const memoizedFetcher = useCallback(fetcher, deps);
26
+ const fetcherRef = useRef(fetcher);
27
+ useEffect(() => {
28
+ fetcherRef.current = fetcher;
29
+ });
29
30
 
30
31
  useEffect(() => {
31
- // Guard against setting state after unmount or dep change.
32
32
  let cancelled = false;
33
33
  setLoading(true);
34
34
  setError(null);
35
35
 
36
- memoizedFetcher()
36
+ fetcherRef
37
+ .current()
37
38
  .then((result) => {
38
39
  if (!cancelled) setData(result);
39
40
  })
@@ -48,7 +49,8 @@ export function useAsyncData<T>(
48
49
  return () => {
49
50
  cancelled = true;
50
51
  };
51
- }, [memoizedFetcher]);
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps --- deps are explicitly managed by the caller
53
+ }, deps);
52
54
 
53
55
  return { data, loading, error };
54
56
  }
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useState } from "react";
1
+ import { useEffect, useRef, useState } from "react";
2
2
 
3
3
  interface UseAsyncDataResult<T> {
4
4
  data: T | null;
@@ -139,8 +139,10 @@ export function useCachedAsyncData<T>(
139
139
  const [loading, setLoading] = useState(!cached);
140
140
  const [error, setError] = useState<string | null>(null);
141
141
 
142
- // eslint-disable-next-line react-hooks/exhaustive-deps --- deps are explicitly managed by the caller
143
- const memoizedFetcher = useCallback(fetcher, deps);
142
+ const fetcherRef = useRef(fetcher);
143
+ useEffect(() => {
144
+ fetcherRef.current = fetcher;
145
+ });
144
146
 
145
147
  useEffect(() => {
146
148
  // Re-check the cache inside the effect because deps may have changed
@@ -158,7 +160,8 @@ export function useCachedAsyncData<T>(
158
160
  setLoading(true);
159
161
  setError(null);
160
162
 
161
- memoizedFetcher()
163
+ fetcherRef
164
+ .current()
162
165
  .then((result) => {
163
166
  if (!cancelled) {
164
167
  setEntry(cacheKey, result, maxSize);
@@ -178,7 +181,8 @@ export function useCachedAsyncData<T>(
178
181
  return () => {
179
182
  cancelled = true;
180
183
  };
181
- }, [memoizedFetcher, cacheKey, ttl, maxSize]);
184
+ // eslint-disable-next-line react-hooks/exhaustive-deps --- deps are explicitly managed by the caller
185
+ }, [...deps, cacheKey, ttl, maxSize]);
182
186
 
183
187
  return { data, loading, error };
184
188
  }
@@ -113,7 +113,9 @@ export function useObjectSearchParams<TFilter, TOrderBy>(
113
113
  // Snapshot ref — lets callbacks read the latest state without being
114
114
  // recreated on every render (avoids infinite useCallback chains).
115
115
  const stateRef = useRef({ filters, sort, pageSize, pageIndex });
116
- stateRef.current = { filters, sort, pageSize, pageIndex };
116
+ useEffect(() => {
117
+ stateRef.current = { filters, sort, pageSize, pageIndex };
118
+ });
117
119
 
118
120
  // Any filter/sort change resets pagination to the first page.
119
121
  const resetPagination = useCallback(() => {
@@ -62,8 +62,11 @@ export async function fetchUserProfile<T>(
62
62
  fields: string = USER_PROFILE_FIELDS_FULL,
63
63
  ): Promise<T> {
64
64
  const data = await createDataSDK();
65
- const response: any = await data.graphql?.(getUserProfileQuery(fields), {
66
- userId,
65
+ const response: any = await data.graphql?.({
66
+ query: getUserProfileQuery(fields),
67
+ variables: {
68
+ userId,
69
+ },
67
70
  });
68
71
  throwOnGraphQLErrors(response);
69
72
  return flattenGraphQLRecord<T>(response?.data?.uiapi?.query?.User?.edges?.[0]?.node);
@@ -87,8 +90,11 @@ export async function updateUserProfile<T>(
87
90
  values: Record<string, unknown>,
88
91
  ): Promise<T> {
89
92
  const data = await createDataSDK();
90
- const response: any = await data.graphql?.(getUserProfileMutation(USER_PROFILE_FIELDS_FULL), {
91
- input: { Id: userId, User: { ...values } },
93
+ const response: any = await data.graphql?.({
94
+ query: getUserProfileMutation(USER_PROFILE_FIELDS_FULL),
95
+ variables: {
96
+ input: { Id: userId, User: { ...values } },
97
+ },
92
98
  });
93
99
  throwOnGraphQLErrors(response);
94
100
  return flattenGraphQLRecord<T>(response?.data?.uiapi?.UserUpdate?.Record);
@@ -10,7 +10,10 @@ export async function executeGraphQL<TData, TVariables>(
10
10
  ): Promise<TData> {
11
11
  const data = await createDataSDK();
12
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);
13
+ const response = await data.graphql?.<TData, TVariables>({
14
+ query,
15
+ variables,
16
+ });
14
17
 
15
18
  if (!response) {
16
19
  throw new Error('GraphQL response is undefined');
@@ -33,10 +33,10 @@ type AccountNode = NonNullable<
33
33
 
34
34
  async function fetchAccountDetail(recordId: string): Promise<AccountNode | null | undefined> {
35
35
  const data = await createDataSDK();
36
- const response = await data.graphql?.<GetAccountDetailQuery, GetAccountDetailQueryVariables>(
37
- GET_ACCOUNT_DETAIL,
38
- { id: recordId },
39
- );
36
+ const response = await data.graphql?.<GetAccountDetailQuery, GetAccountDetailQueryVariables>({
37
+ query: GET_ACCOUNT_DETAIL,
38
+ variables: { id: recordId },
39
+ });
40
40
 
41
41
  if (response?.errors?.length) {
42
42
  throw new Error(response.errors.map((e) => e.message).join("; "));
@@ -21,14 +21,19 @@
21
21
  "noFallthroughCasesInSwitch": true,
22
22
 
23
23
  /* Path mapping */
24
- "baseUrl": ".",
25
24
  "paths": {
26
25
  "@/*": ["./src/*"],
27
26
  "@api/*": ["./src/api/*"],
28
27
  "@components/*": ["./src/components/*"],
29
28
  "@utils/*": ["./src/utils/*"],
30
29
  "@styles/*": ["./src/styles/*"],
31
- "@assets/*": ["./src/assets/*"]
30
+ "@assets/*": ["./src/assets/*"],
31
+ "@salesforce/sdk-core": [
32
+ "../../../../../../../../../../packages/sdk/sdk-core/src/index.ts"
33
+ ],
34
+ "@salesforce/sdk-data": [
35
+ "../../../../../../../../../../packages/sdk/sdk-data/src/index.ts"
36
+ ]
32
37
  }
33
38
  },
34
39
  "include": [
@@ -1 +1,7 @@
1
1
  /// <reference types="vite/client" />
2
+
3
+ /** Salesforce API version injected at build time by the Vite define plugin. */
4
+ declare const __SF_API_VERSION__: string;
5
+
6
+ /** Package version of @salesforce/sdk-data injected at build time by its own Vite build. */
7
+ declare const __SDK_DATA_VERSION__: string;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/ui-bundle-template-base-sfdx-project",
3
- "version": "1.123.0",
3
+ "version": "1.135.0",
4
4
  "description": "Base SFDX project template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "publishConfig": {
@@ -3,6 +3,214 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.135.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.134.5...v1.135.0) (2026-05-05)
7
+
8
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
9
+
10
+
11
+
12
+
13
+
14
+ ## [1.134.5](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.134.4...v1.134.5) (2026-05-04)
15
+
16
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
17
+
18
+
19
+
20
+
21
+
22
+ ## [1.134.4](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.134.3...v1.134.4) (2026-05-04)
23
+
24
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
25
+
26
+
27
+
28
+
29
+
30
+ ## [1.134.3](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.134.2...v1.134.3) (2026-05-01)
31
+
32
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
33
+
34
+
35
+
36
+
37
+
38
+ ## [1.134.2](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.134.1...v1.134.2) (2026-05-01)
39
+
40
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
41
+
42
+
43
+
44
+
45
+
46
+ ## [1.134.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.134.0...v1.134.1) (2026-05-01)
47
+
48
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
49
+
50
+
51
+
52
+
53
+
54
+ # [1.134.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.133.2...v1.134.0) (2026-04-30)
55
+
56
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
57
+
58
+
59
+
60
+
61
+
62
+ ## [1.133.2](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.133.1...v1.133.2) (2026-04-30)
63
+
64
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
65
+
66
+
67
+
68
+
69
+
70
+ ## [1.133.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.133.0...v1.133.1) (2026-04-29)
71
+
72
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
73
+
74
+
75
+
76
+
77
+
78
+ # [1.133.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.132.0...v1.133.0) (2026-04-29)
79
+
80
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
81
+
82
+
83
+
84
+
85
+
86
+ # [1.132.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.131.3...v1.132.0) (2026-04-28)
87
+
88
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
89
+
90
+
91
+
92
+
93
+
94
+ ## [1.131.3](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.131.2...v1.131.3) (2026-04-28)
95
+
96
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
97
+
98
+
99
+
100
+
101
+
102
+ ## [1.131.2](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.131.1...v1.131.2) (2026-04-28)
103
+
104
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
105
+
106
+
107
+
108
+
109
+
110
+ ## [1.131.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.131.0...v1.131.1) (2026-04-27)
111
+
112
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
113
+
114
+
115
+
116
+
117
+
118
+ # [1.131.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.130.2...v1.131.0) (2026-04-24)
119
+
120
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
121
+
122
+
123
+
124
+
125
+
126
+ ## [1.130.2](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.130.1...v1.130.2) (2026-04-24)
127
+
128
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
129
+
130
+
131
+
132
+
133
+
134
+ ## [1.130.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.130.0...v1.130.1) (2026-04-24)
135
+
136
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
137
+
138
+
139
+
140
+
141
+
142
+ # [1.130.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.129.1...v1.130.0) (2026-04-23)
143
+
144
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
145
+
146
+
147
+
148
+
149
+
150
+ ## [1.129.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.129.0...v1.129.1) (2026-04-23)
151
+
152
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
153
+
154
+
155
+
156
+
157
+
158
+ # [1.129.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.128.0...v1.129.0) (2026-04-23)
159
+
160
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
161
+
162
+
163
+
164
+
165
+
166
+ # [1.128.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.127.0...v1.128.0) (2026-04-23)
167
+
168
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
169
+
170
+
171
+
172
+
173
+
174
+ # [1.127.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.126.0...v1.127.0) (2026-04-22)
175
+
176
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
177
+
178
+
179
+
180
+
181
+
182
+ # [1.126.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.125.1...v1.126.0) (2026-04-22)
183
+
184
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
185
+
186
+
187
+
188
+
189
+
190
+ ## [1.125.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.125.0...v1.125.1) (2026-04-16)
191
+
192
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
193
+
194
+
195
+
196
+
197
+
198
+ # [1.125.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.124.0...v1.125.0) (2026-04-15)
199
+
200
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
201
+
202
+
203
+
204
+
205
+
206
+ # [1.124.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.123.0...v1.124.0) (2026-04-15)
207
+
208
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
209
+
210
+
211
+
212
+
213
+
6
214
  # [1.123.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.122.2...v1.123.0) (2026-04-13)
7
215
 
8
216