@salesforce/templates 66.8.0 → 66.9.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/templates/project/reactexternalapp/AGENT.md +3 -3
- package/lib/templates/project/reactexternalapp/CHANGELOG.md +428 -0
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +194 -1488
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package.json +4 -4
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountObjectDetailPage.tsx +7 -9
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountSearch.tsx +7 -15
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +14 -19
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +9 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +5 -3
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +5 -3
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +11 -4
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +12 -11
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/authenticationConfig.ts +9 -9
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/context/AuthContext.tsx +21 -4
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/forms/auth-form.tsx +15 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/form.tsx +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/privateRouteLayout.tsx +2 -11
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ChangePassword.tsx +21 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ForgotPassword.tsx +20 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Login.tsx +20 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Profile.tsx +80 -43
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Register.tsx +16 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ResetPassword.tsx +20 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/utils/helpers.ts +15 -52
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +13 -13
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +11 -8
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/hooks/useAsyncData.ts +67 -0
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx +7 -9
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/pages/AccountSearch.tsx +7 -15
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/routes.tsx +19 -25
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/tsconfig.json +4 -6
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -3
- package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleAuthUtils.cls-meta.xml +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleChangePassword.cls-meta.xml +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleForgotPassword.cls-meta.xml +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleLogin.cls-meta.xml +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleRegistration.cls-meta.xml +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/package.xml +1 -1
- package/lib/templates/project/reactexternalapp/package.json +1 -1
- package/lib/templates/project/reactexternalapp/scripts/org-setup.config.json +0 -1
- package/lib/templates/project/reactexternalapp/scripts/org-setup.mjs +528 -44
- package/lib/templates/project/reactexternalapp/sfdx-project.json +1 -1
- package/lib/templates/project/reactinternalapp/AGENT.md +3 -3
- package/lib/templates/project/reactinternalapp/CHANGELOG.md +428 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +214 -1521
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package.json +5 -5
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/reactinternalapp.uibundle-meta.xml +1 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountObjectDetailPage.tsx +7 -9
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountSearch.tsx +7 -15
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +14 -19
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +9 -5
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +5 -3
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +5 -3
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +11 -4
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +13 -13
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.tsx +40 -44
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +11 -8
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +1 -1
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/hooks/useAsyncData.ts +67 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx +7 -9
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountSearch.tsx +7 -15
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/types/conversation.ts +9 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/types/globals.d.ts +13 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/tsconfig.json +4 -6
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -3
- package/lib/templates/project/reactinternalapp/_p_/_m_/applications/reactinternalapp.app-meta.xml +17 -0
- package/lib/templates/project/reactinternalapp/_p_/_m_/permissionsets/reactinternalapp_Access.permissionset-meta.xml +9 -0
- package/lib/templates/project/reactinternalapp/package.json +1 -1
- package/lib/templates/project/reactinternalapp/scripts/org-setup.config.json +6 -3
- package/lib/templates/project/reactinternalapp/scripts/org-setup.mjs +528 -44
- package/lib/templates/project/reactinternalapp/sfdx-project.json +1 -1
- package/lib/templates/uiBundles/reactbasic/package-lock.json +435 -43
- package/lib/templates/uiBundles/reactbasic/package.json +3 -3
- package/lib/templates/uiBundles/reactbasic/src/api/graphqlClient.ts +13 -13
- package/lib/templates/uiBundles/reactbasic/src/components/alerts/status-alert.tsx +11 -8
- package/lib/templates/uiBundles/reactbasic/src/components/ui/input.tsx +1 -1
- package/lib/templates/uiBundles/reactbasic/src/hooks/useAsyncData.ts +67 -0
- package/lib/templates/uiBundles/reactbasic/tsconfig.json +4 -6
- package/lib/templates/uiBundles/reactbasic/vite-env.d.ts +0 -3
- package/package.json +5 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +0 -188
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/layout/card-skeleton.tsx +0 -38
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/authenticationRouteLayout.tsx +0 -21
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +0 -188
package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
2
|
import { useParams, useNavigate } from "react-router";
|
|
3
|
-
import { createDataSDK } from "@salesforce/sdk
|
|
3
|
+
import { createDataSDK } from "@salesforce/platform-sdk";
|
|
4
4
|
import { AlertCircle, ChevronDown, ChevronRight, FileQuestion } from "lucide-react";
|
|
5
5
|
import GET_ACCOUNT_DETAIL from "../api/account/query/getAccountDetail.graphql?raw";
|
|
6
6
|
import type {
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "../components/ui/collapsible";
|
|
23
23
|
import { Separator } from "../components/ui/separator";
|
|
24
24
|
import { Skeleton } from "../components/ui/skeleton";
|
|
25
|
-
import {
|
|
25
|
+
import { useAsyncData } from "../hooks/useAsyncData";
|
|
26
26
|
import { ObjectBreadcrumb } from "../features/object-search/components/ObjectBreadcrumb";
|
|
27
27
|
|
|
28
28
|
type AccountNode = NonNullable<
|
|
@@ -33,16 +33,16 @@ type AccountNode = NonNullable<
|
|
|
33
33
|
|
|
34
34
|
async function fetchAccountDetail(recordId: string): Promise<AccountNode | null | undefined> {
|
|
35
35
|
const data = await createDataSDK();
|
|
36
|
-
const
|
|
36
|
+
const result = await data.graphql!.query<GetAccountDetailQuery, GetAccountDetailQueryVariables>({
|
|
37
37
|
query: GET_ACCOUNT_DETAIL,
|
|
38
38
|
variables: { id: recordId },
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
if (
|
|
42
|
-
throw new Error(
|
|
41
|
+
if (result.errors?.length) {
|
|
42
|
+
throw new Error(result.errors.map((e) => e.message).join("; "));
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
return
|
|
45
|
+
return result.data?.uiapi?.query?.Account?.edges?.[0]?.node;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
export default function AccountObjectDetail() {
|
|
@@ -53,9 +53,7 @@ export default function AccountObjectDetail() {
|
|
|
53
53
|
data: account,
|
|
54
54
|
loading,
|
|
55
55
|
error,
|
|
56
|
-
} =
|
|
57
|
-
key: `account:${recordId}`,
|
|
58
|
-
});
|
|
56
|
+
} = useAsyncData(() => fetchAccountDetail(recordId!), [recordId]);
|
|
59
57
|
|
|
60
58
|
return (
|
|
61
59
|
<div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
fetchDistinctIndustries,
|
|
7
7
|
fetchDistinctTypes,
|
|
8
8
|
} from "../api/account/accountSearchService";
|
|
9
|
-
import {
|
|
9
|
+
import { useAsyncData } from "../hooks/useAsyncData";
|
|
10
10
|
import { fieldValue } from "../features/object-search/utils/fieldUtils";
|
|
11
11
|
import { useObjectSearchParams } from "../features/object-search/hooks/useObjectSearchParams";
|
|
12
12
|
import { Alert, AlertTitle, AlertDescription } from "../components/ui/alert";
|
|
@@ -40,8 +40,8 @@ import PaginationControls from "../features/object-search/components/PaginationC
|
|
|
40
40
|
import type { PaginationConfig } from "../features/object-search/hooks/useObjectSearchParams";
|
|
41
41
|
|
|
42
42
|
const PAGINATION_CONFIG: PaginationConfig = {
|
|
43
|
-
defaultPageSize:
|
|
44
|
-
validPageSizes: [
|
|
43
|
+
defaultPageSize: 7,
|
|
44
|
+
validPageSizes: [7, 14, 28, 42],
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
type AccountNode = NonNullable<
|
|
@@ -75,22 +75,15 @@ const ACCOUNT_SORT_CONFIGS: SortFieldConfig<keyof Account_OrderBy>[] = [
|
|
|
75
75
|
|
|
76
76
|
export default function AccountSearch() {
|
|
77
77
|
const [filtersOpen, setFiltersOpen] = useState(true);
|
|
78
|
-
const { data: industryOptions } =
|
|
79
|
-
|
|
80
|
-
ttl: 300_000,
|
|
81
|
-
});
|
|
82
|
-
const { data: typeOptions } = useCachedAsyncData(fetchDistinctTypes, [], {
|
|
83
|
-
key: "distinctTypes",
|
|
84
|
-
ttl: 300_000,
|
|
85
|
-
});
|
|
78
|
+
const { data: industryOptions } = useAsyncData(fetchDistinctIndustries, []);
|
|
79
|
+
const { data: typeOptions } = useAsyncData(fetchDistinctTypes, []);
|
|
86
80
|
|
|
87
81
|
const { filters, sort, query, pagination, resetAll } = useObjectSearchParams<
|
|
88
82
|
Account_Filter,
|
|
89
83
|
Account_OrderBy
|
|
90
84
|
>(FILTER_CONFIGS, ACCOUNT_SORT_CONFIGS, PAGINATION_CONFIG);
|
|
91
85
|
|
|
92
|
-
const
|
|
93
|
-
const { data, loading, error } = useCachedAsyncData(
|
|
86
|
+
const { data, loading, error } = useAsyncData(
|
|
94
87
|
() =>
|
|
95
88
|
searchAccounts({
|
|
96
89
|
where: query.where,
|
|
@@ -99,7 +92,6 @@ export default function AccountSearch() {
|
|
|
99
92
|
after: pagination.afterCursor,
|
|
100
93
|
}),
|
|
101
94
|
[query.where, query.orderBy, pagination.pageSize, pagination.afterCursor],
|
|
102
|
-
{ key: searchKey },
|
|
103
95
|
);
|
|
104
96
|
|
|
105
97
|
const pageInfo = data?.pageInfo;
|
|
@@ -189,7 +181,7 @@ export default function AccountSearch() {
|
|
|
189
181
|
<ActiveFilters filters={filters.active} onRemove={filters.remove} />
|
|
190
182
|
</div>
|
|
191
183
|
|
|
192
|
-
<div className="min-h-
|
|
184
|
+
<div className="min-h-132">
|
|
193
185
|
{/* Loading state */}
|
|
194
186
|
{loading && (
|
|
195
187
|
<>
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import type {
|
|
8
|
+
AgentforceErrorHandler,
|
|
9
|
+
AgentforceReadyHandler,
|
|
10
|
+
} from "@salesforce/agentforce-conversation-client";
|
|
11
|
+
|
|
7
12
|
export interface ResolvedEmbedOptions {
|
|
8
13
|
salesforceOrigin?: string;
|
|
9
14
|
frontdoorUrl?: string;
|
|
@@ -32,4 +37,8 @@ export interface AgentforceConversationClientProps {
|
|
|
32
37
|
salesforceOrigin?: string;
|
|
33
38
|
/** Optional. If not provided, resolved internally in dev via /__lo/frontdoor. */
|
|
34
39
|
frontdoorUrl?: string;
|
|
40
|
+
/** Callback invoked when the Lightning Out application is ready. */
|
|
41
|
+
onReady?: AgentforceReadyHandler;
|
|
42
|
+
/** Callback invoked when a Lightning Out error occurs. */
|
|
43
|
+
onError?: AgentforceErrorHandler;
|
|
35
44
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
interface SfdcEnv {
|
|
8
|
+
/** Salesforce org force.com URL (e.g., "https://myorg.lightning.force.com"). */
|
|
9
|
+
orgUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// eslint-disable-next-line no-var -- ambient global declaration
|
|
13
|
+
declare var SFDC_ENV: SfdcEnv | undefined;
|
|
@@ -28,11 +28,8 @@
|
|
|
28
28
|
"@utils/*": ["./src/utils/*"],
|
|
29
29
|
"@styles/*": ["./src/styles/*"],
|
|
30
30
|
"@assets/*": ["./src/assets/*"],
|
|
31
|
-
"@salesforce/sdk
|
|
32
|
-
"../../../../../../../../../../packages/sdk/sdk
|
|
33
|
-
],
|
|
34
|
-
"@salesforce/sdk-data": [
|
|
35
|
-
"../../../../../../../../../../packages/sdk/sdk-data/src/index.ts"
|
|
31
|
+
"@salesforce/platform-sdk": [
|
|
32
|
+
"../../../../../../../../../../packages/sdk/platform-sdk/src/index.ts"
|
|
36
33
|
]
|
|
37
34
|
}
|
|
38
35
|
},
|
|
@@ -41,7 +38,8 @@
|
|
|
41
38
|
"e2e",
|
|
42
39
|
"vite-env.d.ts",
|
|
43
40
|
"vitest-env.d.ts",
|
|
44
|
-
"vitest.setup.ts"
|
|
41
|
+
"vitest.setup.ts",
|
|
42
|
+
"../../../../../../../../../../packages/sdk/platform-sdk/types"
|
|
45
43
|
],
|
|
46
44
|
"references": [{ "path": "./tsconfig.node.json" }]
|
|
47
45
|
}
|
package/lib/templates/project/reactinternalapp/_p_/_m_/applications/reactinternalapp.app-meta.xml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<CustomApplication xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<brand>
|
|
4
|
+
<headerColor>#0070D2</headerColor>
|
|
5
|
+
<shouldOverrideOrgTheme>false</shouldOverrideOrgTheme>
|
|
6
|
+
</brand>
|
|
7
|
+
<formFactors>Small</formFactors>
|
|
8
|
+
<formFactors>Large</formFactors>
|
|
9
|
+
<isNavAutoTempTabsDisabled>false</isNavAutoTempTabsDisabled>
|
|
10
|
+
<isNavPersonalizationDisabled>false</isNavPersonalizationDisabled>
|
|
11
|
+
<isNavTabPersistenceDisabled>false</isNavTabPersistenceDisabled>
|
|
12
|
+
<isOmniPinnedViewEnabled>false</isOmniPinnedViewEnabled>
|
|
13
|
+
<label>reactinternalapp</label>
|
|
14
|
+
<navType>Standard</navType>
|
|
15
|
+
<uiBundle>c__reactinternalapp</uiBundle>
|
|
16
|
+
<uiType>Lightning</uiType>
|
|
17
|
+
</CustomApplication>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<applicationVisibilities>
|
|
4
|
+
<application>reactinternalapp</application>
|
|
5
|
+
<visible>true</visible>
|
|
6
|
+
</applicationVisibilities>
|
|
7
|
+
<hasActivationRequired>false</hasActivationRequired>
|
|
8
|
+
<label>reactinternalapp Access</label>
|
|
9
|
+
</PermissionSet>
|