@salesforce/webapp-template-app-react-template-b2x-experimental 1.71.0 → 1.71.2

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 (103) hide show
  1. package/dist/CHANGELOG.md +16 -0
  2. package/dist/README.md +58 -4
  3. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/package.json +3 -3
  4. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/components/alerts/status-alert.tsx +36 -32
  5. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/components/layouts/card-layout.tsx +29 -0
  6. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/footers/footer-link.tsx +1 -1
  7. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/forms/auth-form.tsx +3 -3
  8. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/forms/submit-button.tsx +3 -3
  9. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/hooks/form.tsx +3 -3
  10. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/layout/card-skeleton.tsx +2 -2
  11. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/layout/centered-page-layout.tsx +1 -1
  12. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/layouts/AuthAppLayout.tsx +1 -1
  13. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/pages/ResetPassword.tsx +2 -2
  14. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/sessionTimeout/SessionTimeoutValidator.tsx +3 -3
  15. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{api → features/global-search/api}/objectDetailService.ts +2 -2
  16. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/DetailHeader.tsx +1 -1
  17. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/filters/FilterInput.tsx +2 -2
  18. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/filters/FilterSelect.tsx +2 -2
  19. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components/filters}/FiltersPanel.tsx +15 -10
  20. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/forms/filters-form.tsx +4 -4
  21. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/forms/submit-button.tsx +3 -3
  22. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components/shared → features/global-search/components/search}/GlobalSearchInput.tsx +4 -4
  23. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/search/SearchPagination.tsx +3 -3
  24. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components/search}/SearchResultCard.tsx +10 -5
  25. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/search/SearchResultsPanel.tsx +5 -5
  26. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components/shared}/LoadingFallback.tsx +1 -1
  27. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/features/global-search/filters/FilterInput.tsx +55 -0
  28. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/features/global-search/filters/FilterSelect.tsx +72 -0
  29. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{hooks → features/global-search/hooks}/form.tsx +9 -4
  30. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{pages → features/global-search/pages}/DetailPage.tsx +4 -4
  31. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{pages → features/global-search/pages}/GlobalSearch.tsx +4 -4
  32. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/pages/Home.tsx +1 -1
  33. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/routes.tsx +13 -13
  34. package/dist/package.json +1 -1
  35. package/package.json +1 -1
  36. package/dist/force-app/main/default/README.md +0 -72
  37. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/auth/alerts/status-alert.tsx +0 -45
  38. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/auth/layout/card-layout.tsx +0 -29
  39. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/components/layout/card-layout.tsx +0 -19
  40. package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/features/global-search/index.ts +0 -33
  41. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/authHelpers.ts +0 -0
  42. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/authenticationConfig.ts +0 -0
  43. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/context/AuthContext.tsx +0 -0
  44. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/hooks/useCountdownTimer.ts +0 -0
  45. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/hooks/useRetryWithBackoff.ts +0 -0
  46. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/layouts/authenticationRouteLayout.tsx +0 -0
  47. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/layouts/privateRouteLayout.tsx +0 -0
  48. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/pages/ChangePassword.tsx +0 -0
  49. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/pages/ForgotPassword.tsx +0 -0
  50. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/pages/Login.tsx +0 -0
  51. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/pages/Profile.tsx +0 -0
  52. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/pages/Register.tsx +0 -0
  53. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/sessionTimeout/sessionTimeService.ts +0 -0
  54. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/sessionTimeout/sessionTimeoutConfig.ts +0 -0
  55. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{auth → features/authentication}/utils/helpers.ts +0 -0
  56. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{api → features/global-search/api}/index.ts +0 -0
  57. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{api → features/global-search/api}/objectInfoGraphQLService.ts +0 -0
  58. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{api → features/global-search/api}/objectInfoService.ts +0 -0
  59. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{api → features/global-search/api}/recordListGraphQLService.ts +0 -0
  60. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/DetailFields.tsx +0 -0
  61. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/DetailForm.tsx +0 -0
  62. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/DetailLayoutSections.tsx +0 -0
  63. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/Section.tsx +0 -0
  64. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/SectionRow.tsx +0 -0
  65. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/UiApiDetailForm.tsx +0 -0
  66. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/FieldValueDisplay.tsx +0 -0
  67. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/FormattedAddress.tsx +0 -0
  68. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/FormattedEmail.tsx +0 -0
  69. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/FormattedPhone.tsx +0 -0
  70. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/FormattedText.tsx +0 -0
  71. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/FormattedUrl.tsx +0 -0
  72. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/detail/formatted/index.ts +0 -0
  73. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/filters/FilterField.tsx +0 -0
  74. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/search/ResultCardFields.tsx +0 -0
  75. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{components → features/global-search/components}/search/SearchHeader.tsx +0 -0
  76. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{hooks → features/global-search/hooks}/index.ts +0 -0
  77. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{hooks → features/global-search/hooks}/useObjectInfoBatch.ts +0 -0
  78. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{hooks → features/global-search/hooks}/useObjectSearchData.ts +0 -0
  79. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{hooks → features/global-search/hooks}/useRecordDetailLayout.ts +0 -0
  80. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{hooks → features/global-search/hooks}/useRecordListGraphQL.ts +0 -0
  81. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{types → features/global-search/types}/filters/filters.ts +0 -0
  82. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{types → features/global-search/types}/filters/picklist.ts +0 -0
  83. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{types → features/global-search/types}/index.ts +0 -0
  84. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{types → features/global-search/types}/objectInfo/objectInfo.ts +0 -0
  85. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{types → features/global-search/types}/recordDetail/recordDetail.ts +0 -0
  86. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{types → features/global-search/types}/search/searchResults.ts +0 -0
  87. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/apiUtils.ts +0 -0
  88. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/cacheUtils.ts +0 -0
  89. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/debounce.ts +0 -0
  90. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/fieldUtils.ts +0 -0
  91. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/fieldValueExtractor.ts +0 -0
  92. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/filterUtils.ts +0 -0
  93. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/formDataTransformUtils.ts +0 -0
  94. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/formUtils.ts +0 -0
  95. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/graphQLNodeFieldUtils.ts +0 -0
  96. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/graphQLObjectInfoAdapter.ts +0 -0
  97. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/graphQLRecordAdapter.ts +0 -0
  98. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/index.ts +0 -0
  99. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/layoutTransformUtils.ts +0 -0
  100. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/linkUtils.ts +0 -0
  101. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/paginationUtils.ts +0 -0
  102. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/recordUtils.ts +0 -0
  103. /package/dist/force-app/main/default/webapplications/appreacttemplateb2x/src/{utils → features/global-search/utils}/sanitizationUtils.ts +0 -0
@@ -0,0 +1,72 @@
1
+ /**
2
+ * FilterSelect Component
3
+ *
4
+ * Renders a dropdown select field for filter values with picklist options.
5
+ * Used for filters with affordance === 'select'.
6
+ *
7
+ * @param filter - Filter definition containing field path, label, and attributes
8
+ * @param value - Currently selected filter value
9
+ * @param options - Array of picklist values to display as options
10
+ * @param onChange - Callback when selection changes
11
+ *
12
+ * @remarks
13
+ * - Filters out invalid options (null/undefined values)
14
+ * - Displays option label if available, otherwise uses value
15
+ * - Shows placeholder from filter attributes or default "Select..."
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <FilterSelect
20
+ * filter={selectFilter}
21
+ * value={selectedValue}
22
+ * options={picklistOptions}
23
+ * onChange={(value) => setSelectedValue(value)}
24
+ * />
25
+ * ```
26
+ */
27
+ import {
28
+ Select,
29
+ SelectContent,
30
+ SelectItem,
31
+ SelectTrigger,
32
+ SelectValue,
33
+ } from "../../../components/ui/select";
34
+ import { Field, FieldLabel, FieldDescription } from "../../../components/ui/field";
35
+ import type { Filter } from "../types/filters/filters";
36
+ import type { PicklistValue } from "../types/filters/picklist";
37
+
38
+ interface FilterSelectProps {
39
+ filter: Filter;
40
+ value: string;
41
+ options: PicklistValue[];
42
+ onChange: (value: string) => void;
43
+ }
44
+
45
+ export default function FilterSelect({ filter, value, options, onChange }: FilterSelectProps) {
46
+ return (
47
+ <Field>
48
+ <FieldLabel htmlFor={filter.targetFieldPath}>
49
+ {filter.label || filter.targetFieldPath}
50
+ </FieldLabel>
51
+ <Select value={value} onValueChange={onChange}>
52
+ <SelectTrigger
53
+ id={filter.targetFieldPath}
54
+ aria-label={filter.label || filter.targetFieldPath}
55
+ >
56
+ <SelectValue placeholder={filter.attributes?.placeholder || "Select..."} />
57
+ </SelectTrigger>
58
+ <SelectContent>
59
+ {options.map((option) => {
60
+ if (!option || !option.value) return null;
61
+ return (
62
+ <SelectItem key={option.value} value={option.value}>
63
+ {option.label || option.value}
64
+ </SelectItem>
65
+ );
66
+ })}
67
+ </SelectContent>
68
+ </Select>
69
+ {filter.helpMessage && <FieldDescription>{filter.helpMessage}</FieldDescription>}
70
+ </Field>
71
+ );
72
+ }
@@ -1,15 +1,20 @@
1
1
  import { useId } from "react";
2
2
  import { createFormHookContexts, createFormHook } from "@tanstack/react-form";
3
- import { Field, FieldDescription, FieldError, FieldLabel } from "../components/ui/field";
4
- import { Input } from "../components/ui/input";
3
+ import {
4
+ Field,
5
+ FieldDescription,
6
+ FieldError,
7
+ FieldLabel,
8
+ } from "../../../components/ui/field";
9
+ import { Input } from "../../../components/ui/input";
5
10
  import {
6
11
  Select,
7
12
  SelectContent,
8
13
  SelectItem,
9
14
  SelectTrigger,
10
15
  SelectValue,
11
- } from "../components/ui/select";
12
- import { cn } from "../lib/utils";
16
+ } from "../../../components/ui/select";
17
+ import { cn } from "../../../lib/utils";
13
18
  import type { PicklistValue } from "../types/filters/picklist";
14
19
  import { getUniqueErrors } from "../utils/formUtils";
15
20
 
@@ -1,12 +1,12 @@
1
1
  import { useMemo } from "react";
2
2
  import { useParams, useNavigate } from "react-router";
3
- import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card";
4
- import { Skeleton } from "../components/ui/skeleton";
5
- import { Alert, AlertDescription, AlertTitle } from "../components/ui/alert";
3
+ import { Card, CardContent, CardHeader, CardTitle } from "../../../components/ui/card";
4
+ import { Skeleton } from "../../../components/ui/skeleton";
5
+ import { Alert, AlertDescription, AlertTitle } from "../../../components/ui/alert";
6
6
  import { AlertCircle } from "lucide-react";
7
7
  import DetailHeader from "../components/detail/DetailHeader";
8
8
  import { UiApiDetailForm } from "../components/detail/UiApiDetailForm";
9
- import { OBJECT_API_NAMES, DEFAULT_DETAIL_PAGE_TITLE } from "../constants";
9
+ import { OBJECT_API_NAMES, DEFAULT_DETAIL_PAGE_TITLE } from "../../../constants";
10
10
  import { toRecordDisplayNameMetadata } from "../utils/fieldUtils";
11
11
  import { useRecordDetailLayout } from "../hooks/useRecordDetailLayout";
12
12
  import { getGraphQLRecordDisplayName } from "../utils/graphQLNodeFieldUtils";
@@ -13,15 +13,15 @@
13
13
  */
14
14
  import { useMemo, useState, useCallback, useEffect, useRef } from "react";
15
15
  import { useParams } from "react-router";
16
- import { OBJECT_API_NAMES, DEFAULT_PAGE_SIZE } from "../constants";
16
+ import { OBJECT_API_NAMES, DEFAULT_PAGE_SIZE } from "../../../constants";
17
17
  import { useObjectListMetadata } from "../hooks/useObjectSearchData";
18
18
  import { useObjectInfoBatch } from "../hooks/useObjectInfoBatch";
19
19
  import { useRecordListGraphQL } from "../hooks/useRecordListGraphQL";
20
- import FiltersPanel from "../components/FiltersPanel";
20
+ import FiltersPanel from "../components/filters/FiltersPanel";
21
21
  import SearchHeader from "../components/search/SearchHeader";
22
22
  import SearchResultsPanel from "../components/search/SearchResultsPanel";
23
- import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card";
24
- import { Skeleton } from "../components/ui/skeleton";
23
+ import { Card, CardContent, CardHeader, CardTitle } from "../../../components/ui/card";
24
+ import { Skeleton } from "../../../components/ui/skeleton";
25
25
  import type { FilterCriteria } from "../types/filters/filters";
26
26
  import type { SearchResultRecord } from "../types/search/searchResults";
27
27
  import { graphQLNodeToSearchResultRecordData } from "../utils/graphQLRecordAdapter";
@@ -1,4 +1,4 @@
1
- import { GlobalSearchInput } from "../components/shared/GlobalSearchInput";
1
+ import { GlobalSearchInput } from "../features/global-search/components/search/GlobalSearchInput";
2
2
 
3
3
  export default function Home() {
4
4
  return (
@@ -1,20 +1,20 @@
1
1
  import type { RouteObject } from 'react-router';
2
2
  import Home from './pages/Home';
3
3
  import NotFound from './pages/NotFound';
4
- import Login from "./auth/pages/Login";
5
- import Register from "./auth/pages/Register";
6
- import ForgotPassword from "./auth/pages/ForgotPassword";
7
- import ResetPassword from "./auth/pages/ResetPassword";
8
- import Profile from "./auth/pages/Profile";
9
- import ChangePassword from "./auth/pages/ChangePassword";
10
- import AuthenticationRoute from "./auth/layouts/authenticationRouteLayout";
11
- import PrivateRoute from "./auth/layouts/privateRouteLayout";
12
- import { ROUTES } from "./auth/authenticationConfig";
13
- import GlobalSearch from "./pages/GlobalSearch";
14
- import DetailPage from "./pages/DetailPage";
4
+ import Login from "./features/authentication/pages/Login";
5
+ import Register from "./features/authentication/pages/Register";
6
+ import ForgotPassword from "./features/authentication/pages/ForgotPassword";
7
+ import ResetPassword from "./features/authentication/pages/ResetPassword";
8
+ import Profile from "./features/authentication/pages/Profile";
9
+ import ChangePassword from "./features/authentication/pages/ChangePassword";
10
+ import AuthenticationRoute from "./features/authentication/layouts/authenticationRouteLayout";
11
+ import PrivateRoute from "./features/authentication/layouts/privateRouteLayout";
12
+ import { ROUTES } from "./features/authentication/authenticationConfig";
13
+ import GlobalSearch from "./features/global-search/pages/GlobalSearch";
14
+ import DetailPage from "./features/global-search/pages/DetailPage";
15
15
  import { Suspense } from "react";
16
- import LoadingFallback from "./components/LoadingFallback";
17
- import AuthAppLayout from "./auth/layouts/AuthAppLayout";
16
+ import LoadingFallback from "./features/global-search/components/shared/LoadingFallback";
17
+ import AuthAppLayout from "./features/authentication/layouts/AuthAppLayout";
18
18
 
19
19
  export const routes: RouteObject[] = [
20
20
  {
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/webapp-template-base-sfdx-project-experimental",
3
- "version": "1.71.0",
3
+ "version": "1.71.2",
4
4
  "description": "Base SFDX project template",
5
5
  "private": true,
6
6
  "files": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/webapp-template-app-react-template-b2x-experimental",
3
- "version": "1.71.0",
3
+ "version": "1.71.2",
4
4
  "description": "Base reference app template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "",
@@ -1,72 +0,0 @@
1
- # App React Template B2X
2
-
3
- A B2X (Business-to-Consumer) React starter template for customer-facing apps on the Salesforce platform. Includes authentication, global search, and an Experience Cloud site container. Built with React, Vite, TypeScript, and Tailwind/shadcn.
4
-
5
- ## What's included
6
-
7
- | Path | Description |
8
- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
9
- | `force-app/main/default/webapplications/appreacttemplateb2x/` | React web app (source, config, tests) |
10
- | `force-app/main/default/classes/` | Apex classes for authentication — `WebAppAuthUtils`, `WebAppChangePassword`, `WebAppForgotPassword`, `WebAppLogin`, `WebAppRegistration` |
11
- | `force-app/main/default/digitalExperienceConfigs/` | Experience Cloud site configuration |
12
- | `force-app/main/default/digitalExperiences/` | Experience Cloud site definition |
13
- | `force-app/main/default/networks/` | Experience Cloud network |
14
- | `force-app/main/default/sites/` | Salesforce site |
15
-
16
- ## Getting started
17
-
18
- Navigate to the web app and install dependencies:
19
-
20
- ```bash
21
- cd force-app/main/default/webapplications/appreacttemplateb2x
22
- npm install
23
- npm run dev
24
- ```
25
-
26
- Opens at http://localhost:5173 by default. For build and test instructions, see the [web app README](force-app/main/default/webapplications/appreacttemplateb2x/README.md).
27
-
28
- ## Deploy
29
-
30
- ### Deploy everything (metadata + Experience Cloud site + web app)
31
-
32
- ```bash
33
- cd force-app/main/default/webapplications/appreacttemplateb2x && npm install && npm run build && cd -
34
- sf project deploy start --source-dir force-app --target-org <alias>
35
- ```
36
-
37
- ### Deploy the web app only
38
-
39
- ```bash
40
- cd force-app/main/default/webapplications/appreacttemplateb2x && npm install && npm run build && cd -
41
- sf project deploy start --source-dir force-app/main/default/webapplications --target-org <alias>
42
- ```
43
-
44
- ### Deploy Experience Cloud site only
45
-
46
- ```bash
47
- sf project deploy start \
48
- --source-dir force-app/main/default/digitalExperienceConfigs \
49
- --source-dir force-app/main/default/digitalExperiences \
50
- --source-dir force-app/main/default/networks \
51
- --source-dir force-app/main/default/sites \
52
- --target-org <alias>
53
- ```
54
-
55
- ### Deploy authentication classes only
56
-
57
- ```bash
58
- sf project deploy start --source-dir force-app/main/default/classes --target-org <alias>
59
- ```
60
-
61
- Replace `<alias>` with your target org alias.
62
-
63
- ## Configure Your Salesforce DX Project
64
-
65
- The `sfdx-project.json` file contains useful configuration information for your project. See [Salesforce DX Project Configuration](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_config.htm) in the _Salesforce DX Developer Guide_ for details about this file.
66
-
67
- ## Read All About It
68
-
69
- - [Salesforce Extensions Documentation](https://developer.salesforce.com/tools/vscode/)
70
- - [Salesforce CLI Setup Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_intro.htm)
71
- - [Salesforce DX Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_intro.htm)
72
- - [Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference.htm)
@@ -1,45 +0,0 @@
1
- import { cva, type VariantProps } from "class-variance-authority";
2
- import { AlertCircleIcon, CheckCircle2Icon } from "lucide-react";
3
- import { Alert, AlertDescription } from "../../components/ui/alert";
4
- import { useId } from "react";
5
-
6
- const statusAlertVariants = cva("", {
7
- variants: {
8
- variant: {
9
- error: "",
10
- success: "",
11
- },
12
- },
13
- defaultVariants: {
14
- variant: "error",
15
- },
16
- });
17
-
18
- interface StatusAlertProps extends VariantProps<typeof statusAlertVariants> {
19
- children?: React.ReactNode;
20
- /** Alert variant type. @default "error" */
21
- variant?: "error" | "success";
22
- }
23
-
24
- /**
25
- * Status alert component for displaying error or success messages.
26
- * Returns null if no children are provided.
27
- */
28
- export function StatusAlert({ children, variant = "error" }: StatusAlertProps) {
29
- if (!children) return null;
30
-
31
- const isError = variant === "error";
32
- const descriptionId = useId();
33
-
34
- return (
35
- <Alert
36
- variant={isError ? "destructive" : "default"}
37
- className={statusAlertVariants({ variant })}
38
- aria-describedby={descriptionId}
39
- role={isError ? "alert" : "status"}
40
- >
41
- {isError ? <AlertCircleIcon aria-hidden="true" /> : <CheckCircle2Icon aria-hidden="true" />}
42
- <AlertDescription id={descriptionId}>{children}</AlertDescription>
43
- </Alert>
44
- );
45
- }
@@ -1,29 +0,0 @@
1
- import {
2
- Card,
3
- CardContent,
4
- CardDescription,
5
- CardHeader,
6
- CardTitle,
7
- } from "../../components/ui/card";
8
-
9
- interface CardLayoutProps {
10
- title: string;
11
- description?: string;
12
- children: React.ReactNode;
13
- }
14
-
15
- /**
16
- * Card layout component for authentication pages.
17
- * Provides CardHeader with title and optional description, and CardContent.
18
- */
19
- export function CardLayout({ title, description, children }: CardLayoutProps) {
20
- return (
21
- <Card>
22
- <CardHeader>
23
- <CardTitle className="text-2xl">{title}</CardTitle>
24
- {description && <CardDescription>{description}</CardDescription>}
25
- </CardHeader>
26
- <CardContent>{children}</CardContent>
27
- </Card>
28
- );
29
- }
@@ -1,19 +0,0 @@
1
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../ui/card";
2
-
3
- interface CardLayoutProps {
4
- title: string;
5
- description?: string;
6
- children: React.ReactNode;
7
- }
8
-
9
- export function CardLayout({ title, description, children }: CardLayoutProps) {
10
- return (
11
- <Card className="w-full">
12
- <CardHeader>
13
- <CardTitle className="text-2xl">{title}</CardTitle>
14
- {description && <CardDescription>{description}</CardDescription>}
15
- </CardHeader>
16
- <CardContent>{children}</CardContent>
17
- </Card>
18
- );
19
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * Global Search Feature - Public API
3
- *
4
- * Main entry point for the global search feature.
5
- * Exports all public APIs, components, and utilities that can be consumed by other packages.
6
- *
7
- * @remarks
8
- * This is the public API of the feature. Components and utilities exported here
9
- * can be imported by other packages that depend on this feature.
10
- *
11
- * @example
12
- * ```tsx
13
- * // In another package's appLayout.tsx
14
- * import { GlobalSearchInput } from 'feature-react-global-search';
15
- *
16
- * export default function AppLayout() {
17
- * return (
18
- * <div>
19
- * <GlobalSearchInput />
20
- * <Outlet />
21
- * </div>
22
- * );
23
- * }
24
- * ```
25
- */
26
-
27
- export * from "../../api";
28
- export * from "../../hooks";
29
- export * from "../../utils";
30
- export * from "../../constants";
31
- export * from "../../routes";
32
- export * from "../../hooks";
33
- export * from "../../types";