@salesforce/webapp-template-feature-react-global-search-experimental 1.73.0 → 1.74.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/README.md +12 -0
- package/dist/CHANGELOG.md +16 -0
- package/dist/force-app/main/default/webapplications/feature-react-global-search/package.json +3 -3
- package/dist/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/api/recordListGraphQLService.ts +1 -2
- package/dist/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/filters/filters.ts +1 -0
- package/dist/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/index.ts +1 -0
- package/dist/force-app/main/default/webapplications/feature-react-global-search/src/index.ts +10 -0
- package/dist/package.json +1 -1
- package/package.json +12 -7
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/__inherit__appLayout.tsx +9 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/alerts/__inherit__status-alert.tsx +27 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/layouts/__inherit__card-layout.tsx +9 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__alert.tsx +41 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__button.tsx +45 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__card.tsx +33 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__field.tsx +62 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__input.tsx +5 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__label.tsx +8 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__pagination.tsx +47 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__select.tsx +63 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__skeleton.tsx +5 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/components/ui/__inherit__spinner.tsx +7 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/constants.ts +39 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/api/index.ts +19 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/api/objectDetailService.ts +125 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/api/objectInfoGraphQLService.ts +194 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/api/objectInfoService.ts +199 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/api/recordListGraphQLService.ts +364 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/DetailFields.tsx +55 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/DetailForm.tsx +146 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/DetailHeader.tsx +34 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/DetailLayoutSections.tsx +80 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/Section.tsx +108 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/SectionRow.tsx +20 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/UiApiDetailForm.tsx +140 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/FieldValueDisplay.tsx +73 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/FormattedAddress.tsx +29 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/FormattedEmail.tsx +17 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/FormattedPhone.tsx +24 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/FormattedText.tsx +11 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/FormattedUrl.tsx +29 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/detail/formatted/index.ts +6 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/filters/FilterField.tsx +54 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/filters/FilterInput.tsx +55 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/filters/FilterSelect.tsx +72 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/filters/FiltersPanel.tsx +380 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/forms/filters-form.tsx +114 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/forms/submit-button.tsx +47 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/search/GlobalSearchInput.tsx +114 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/search/ResultCardFields.tsx +71 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/search/SearchHeader.tsx +31 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/search/SearchPagination.tsx +144 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/search/SearchResultCard.tsx +136 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/search/SearchResultsPanel.tsx +197 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/components/shared/LoadingFallback.tsx +61 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/filters/FilterInput.tsx +55 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/filters/FilterSelect.tsx +72 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/hooks/form.tsx +209 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/hooks/index.ts +22 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/hooks/useObjectInfoBatch.ts +65 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/hooks/useObjectSearchData.ts +395 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/hooks/useRecordDetailLayout.ts +156 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/hooks/useRecordListGraphQL.ts +135 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/pages/DetailPage.tsx +109 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/pages/GlobalSearch.tsx +229 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/filters/filters.ts +121 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/filters/picklist.ts +32 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/index.ts +5 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/objectInfo/objectInfo.ts +166 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/recordDetail/recordDetail.ts +61 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/types/search/searchResults.ts +229 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/apiUtils.ts +125 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/cacheUtils.ts +76 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/debounce.ts +89 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/fieldUtils.ts +354 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/fieldValueExtractor.ts +67 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/filterUtils.ts +32 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/formDataTransformUtils.ts +260 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/formUtils.ts +142 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/graphQLNodeFieldUtils.ts +186 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/graphQLObjectInfoAdapter.ts +319 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/graphQLRecordAdapter.ts +90 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/index.ts +59 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/layoutTransformUtils.ts +236 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/linkUtils.ts +14 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/paginationUtils.ts +49 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/recordUtils.ts +159 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/features/global-search/utils/sanitizationUtils.ts +49 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/index.ts +10 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/lib/__inherit__utils.ts +6 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/pages/Home.tsx +13 -0
- package/src/force-app/main/default/webapplications/feature-react-global-search/src/routes.tsx +52 -0
package/README.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
This feature provides API services and utilities for implementing global search functionality in Salesforce Web Applications. It includes:
|
|
4
4
|
|
|
5
|
+
## Consuming as a dependency
|
|
6
|
+
|
|
7
|
+
Apps (e.g. `appreactsampleb2e`) can depend on this package and import **API, hooks, types, and utilities** (no UI). The package exposes a built ESM bundle.
|
|
8
|
+
|
|
9
|
+
1. Add the dependency: `"@salesforce/webapp-template-feature-react-global-search-experimental": "^1.71.3"`.
|
|
10
|
+
2. **Before building or running the app**, build the library bundle from this package:
|
|
11
|
+
```bash
|
|
12
|
+
cd packages/template/feature/feature-react-global-search && npm run build:lib
|
|
13
|
+
```
|
|
14
|
+
This produces `dist/index.js`, which is the package entry point.
|
|
15
|
+
3. Import what you need (e.g. `useObjectListMetadata`, `parseFilterValue`, `sanitizeFilterValue`, `FilterCriteria`, `objectInfoService`). Use your own UI for filters and list pages.
|
|
16
|
+
|
|
5
17
|
- **API Service Layer** - Type-safe API client for Salesforce search endpoints
|
|
6
18
|
- **Type Definitions** - Complete TypeScript types with Zod schema validation
|
|
7
19
|
- **Utility Functions** - Helper functions for debouncing and data extraction
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
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.74.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.73.1...v1.74.0) (2026-03-05)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [1.73.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.73.0...v1.73.1) (2026-03-05)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
# [1.73.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.72.0...v1.73.0) (2026-03-05)
|
|
7
23
|
|
|
8
24
|
**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental
|
package/dist/force-app/main/default/webapplications/feature-react-global-search/package.json
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"graphql:schema": "node scripts/get-graphql-schema.mjs"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@salesforce/sdk-data": "^1.
|
|
19
|
-
"@salesforce/webapp-experimental": "^1.
|
|
18
|
+
"@salesforce/sdk-data": "^1.74.0",
|
|
19
|
+
"@salesforce/webapp-experimental": "^1.74.0",
|
|
20
20
|
"@tailwindcss/vite": "^4.1.17",
|
|
21
21
|
"@tanstack/react-form": "^1.28.4",
|
|
22
22
|
"class-variance-authority": "^0.7.1",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@graphql-eslint/eslint-plugin": "^4.1.0",
|
|
41
41
|
"@graphql-tools/utils": "^11.0.0",
|
|
42
42
|
"@playwright/test": "^1.49.0",
|
|
43
|
-
"@salesforce/vite-plugin-webapp-experimental": "^1.
|
|
43
|
+
"@salesforce/vite-plugin-webapp-experimental": "^1.74.0",
|
|
44
44
|
"@testing-library/jest-dom": "^6.6.3",
|
|
45
45
|
"@testing-library/react": "^16.1.0",
|
|
46
46
|
"@testing-library/user-event": "^14.5.2",
|
|
@@ -149,10 +149,9 @@ export function buildWhereFromCriteria(
|
|
|
149
149
|
|
|
150
150
|
for (const c of criteria) {
|
|
151
151
|
if (!c.fieldPath || !c.operator || !c.values?.length) continue;
|
|
152
|
-
const value = c.values[0];
|
|
153
152
|
const op = c.operator;
|
|
154
153
|
const parts = c.fieldPath.split(".");
|
|
155
|
-
const fieldClause = { [op]:
|
|
154
|
+
const fieldClause = op === "in" ? { in: c.values } : { [op]: c.values[0] };
|
|
156
155
|
if (parts.length === 1) {
|
|
157
156
|
conditions.push({ [parts[0]]: fieldClause });
|
|
158
157
|
} else {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package entry for @salesforce/webapp-template-feature-react-global-search-experimental.
|
|
3
|
+
* Exports only API, hooks, utils, types, and constants so that consuming apps do not
|
|
4
|
+
* pull in the feature's UI (routes, __inherit__ components) which depend on @radix-ui.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./features/global-search/api";
|
|
7
|
+
export * from "./features/global-search/hooks";
|
|
8
|
+
export * from "./features/global-search/utils";
|
|
9
|
+
export * from "./features/global-search/types";
|
|
10
|
+
export * from "./constants";
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/webapp-template-feature-react-global-search-experimental",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.74.0",
|
|
4
4
|
"description": "Global search feature for Salesforce objects with filtering and pagination",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
7
|
+
"main": "src/force-app/main/default/webapplications/feature-react-global-search/src/index.ts",
|
|
8
|
+
"types": "src/force-app/main/default/webapplications/feature-react-global-search/src/index.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./src/force-app/main/default/webapplications/feature-react-global-search/src/index.ts",
|
|
12
|
+
"import": "./src/force-app/main/default/webapplications/feature-react-global-search/src/index.ts",
|
|
13
|
+
"default": "./src/force-app/main/default/webapplications/feature-react-global-search/src/index.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
9
16
|
"files": [
|
|
10
|
-
"dist"
|
|
17
|
+
"dist",
|
|
18
|
+
"src"
|
|
11
19
|
],
|
|
12
|
-
"publishConfig": {
|
|
13
|
-
"access": "public"
|
|
14
|
-
},
|
|
15
20
|
"scripts": {
|
|
16
21
|
"clean": "rm -rf dist"
|
|
17
22
|
},
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
2
|
+
|
|
3
|
+
const statusAlertVariants = cva("", {
|
|
4
|
+
variants: {
|
|
5
|
+
variant: {
|
|
6
|
+
error: "",
|
|
7
|
+
success: "",
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
defaultVariants: {
|
|
11
|
+
variant: "error",
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
interface StatusAlertProps extends VariantProps<typeof statusAlertVariants> {
|
|
16
|
+
children?: React.ReactNode;
|
|
17
|
+
/** Alert variant type. @default "error" */
|
|
18
|
+
variant?: "error" | "success";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Status alert component for displaying error or success messages.
|
|
23
|
+
* Returns null if no children are provided.
|
|
24
|
+
*/
|
|
25
|
+
export function StatusAlert({}: StatusAlertProps) {
|
|
26
|
+
return <></>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
2
|
+
|
|
3
|
+
const alertVariants = cva(
|
|
4
|
+
"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
|
5
|
+
{
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: "bg-card text-card-foreground",
|
|
9
|
+
destructive:
|
|
10
|
+
"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
defaultVariants: {
|
|
14
|
+
variant: "default",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
function Alert({
|
|
20
|
+
className,
|
|
21
|
+
variant,
|
|
22
|
+
role,
|
|
23
|
+
...props
|
|
24
|
+
}: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>) {
|
|
25
|
+
return <> </>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Maintenance/A11y: Added 'asChild' pattern or a simple 'as' prop
|
|
29
|
+
// to allow rendering semantic headings (h1-h6).
|
|
30
|
+
interface AlertTitleProps extends React.ComponentProps<"div"> {
|
|
31
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "p";
|
|
32
|
+
}
|
|
33
|
+
function AlertTitle({ className, as: Component = "div", ...props }: AlertTitleProps) {
|
|
34
|
+
return <></>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function AlertDescription({ className, ...props }: React.ComponentProps<"div">) {
|
|
38
|
+
return <></>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { Alert, AlertTitle, AlertDescription };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
|
+
|
|
4
|
+
const buttonVariants = cva(
|
|
5
|
+
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
10
|
+
destructive:
|
|
11
|
+
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
12
|
+
outline:
|
|
13
|
+
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
|
|
14
|
+
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
|
15
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
16
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
17
|
+
},
|
|
18
|
+
size: {
|
|
19
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
20
|
+
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
|
|
21
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
22
|
+
icon: "size-9",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
variant: "default",
|
|
27
|
+
size: "default",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
function Button({
|
|
33
|
+
className,
|
|
34
|
+
variant,
|
|
35
|
+
size,
|
|
36
|
+
asChild = false,
|
|
37
|
+
...props
|
|
38
|
+
}: React.ComponentProps<"button"> &
|
|
39
|
+
VariantProps<typeof buttonVariants> & {
|
|
40
|
+
asChild?: boolean;
|
|
41
|
+
}) {
|
|
42
|
+
return <> </>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { Button, buttonVariants };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
function Card({ className, ...props }: React.ComponentProps<"div">) {
|
|
2
|
+
return <> </>;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
|
|
6
|
+
return <> </>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function CardTitle({
|
|
10
|
+
className,
|
|
11
|
+
as: Component = "h3",
|
|
12
|
+
...props
|
|
13
|
+
}: React.ComponentProps<"div"> & { as?: any }) {
|
|
14
|
+
return <> </>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
|
|
18
|
+
return <></>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function CardAction({ className, ...props }: React.ComponentProps<"div">) {
|
|
22
|
+
return <></>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function CardContent({ className, ...props }: React.ComponentProps<"div">) {
|
|
26
|
+
return <></>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
|
|
30
|
+
return <></>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
import { Label } from "./__inherit__label";
|
|
4
|
+
|
|
5
|
+
function Field({
|
|
6
|
+
className,
|
|
7
|
+
orientation = "vertical",
|
|
8
|
+
...props
|
|
9
|
+
}: React.ComponentProps<"div"> & {
|
|
10
|
+
orientation?: "horizontal" | "vertical";
|
|
11
|
+
}) {
|
|
12
|
+
return <> </>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {
|
|
16
|
+
return <> </>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function FieldDescription({ className, ...props }: React.ComponentProps<"p">) {
|
|
20
|
+
return <> </>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function FieldError({
|
|
24
|
+
className,
|
|
25
|
+
errors,
|
|
26
|
+
...props
|
|
27
|
+
}: React.ComponentProps<"p"> & { errors?: (Error | undefined | null)[] }) {
|
|
28
|
+
const errorMessages = errors?.filter(Boolean).map((e) => e?.message);
|
|
29
|
+
|
|
30
|
+
if (!errorMessages?.length) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return <></>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function FieldGroup({ className, ...props }: React.ComponentProps<"div">) {
|
|
38
|
+
return <> </>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">) {
|
|
42
|
+
return <> </>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function FieldLegend({ className, ...props }: React.ComponentProps<"legend">) {
|
|
46
|
+
return <> </>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function FieldSeparator({ className, ...props }: React.ComponentProps<"div">) {
|
|
50
|
+
return <></>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
Field,
|
|
55
|
+
FieldDescription,
|
|
56
|
+
FieldError,
|
|
57
|
+
FieldGroup,
|
|
58
|
+
FieldLabel,
|
|
59
|
+
FieldLegend,
|
|
60
|
+
FieldSeparator,
|
|
61
|
+
FieldSet,
|
|
62
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Button } from "./__inherit__button";
|
|
3
|
+
|
|
4
|
+
const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => <></>;
|
|
5
|
+
Pagination.displayName = "Pagination";
|
|
6
|
+
|
|
7
|
+
const PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<"ul">>(
|
|
8
|
+
({ className, ...props }, ref) => <></>,
|
|
9
|
+
);
|
|
10
|
+
PaginationContent.displayName = "PaginationContent";
|
|
11
|
+
|
|
12
|
+
const PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<"li">>(
|
|
13
|
+
({ className, ...props }, ref) => <></>,
|
|
14
|
+
);
|
|
15
|
+
PaginationItem.displayName = "PaginationItem";
|
|
16
|
+
|
|
17
|
+
type PaginationLinkProps = {
|
|
18
|
+
isActive?: boolean;
|
|
19
|
+
} & React.ComponentProps<"button">;
|
|
20
|
+
|
|
21
|
+
const PaginationLink = ({ className, isActive, disabled, ...props }: PaginationLinkProps) => <></>;
|
|
22
|
+
PaginationLink.displayName = "PaginationLink";
|
|
23
|
+
|
|
24
|
+
const PaginationPrevious = ({
|
|
25
|
+
className,
|
|
26
|
+
disabled,
|
|
27
|
+
...props
|
|
28
|
+
}: React.ComponentProps<typeof Button>) => <></>;
|
|
29
|
+
PaginationPrevious.displayName = "PaginationPrevious";
|
|
30
|
+
|
|
31
|
+
const PaginationNext = ({ className, disabled, ...props }: React.ComponentProps<typeof Button>) => (
|
|
32
|
+
<></>
|
|
33
|
+
);
|
|
34
|
+
PaginationNext.displayName = "PaginationNext";
|
|
35
|
+
|
|
36
|
+
const PaginationEllipsis = ({ className, ...props }: React.ComponentProps<"span">) => <></>;
|
|
37
|
+
PaginationEllipsis.displayName = "PaginationEllipsis";
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
Pagination,
|
|
41
|
+
PaginationContent,
|
|
42
|
+
PaginationEllipsis,
|
|
43
|
+
PaginationItem,
|
|
44
|
+
PaginationLink,
|
|
45
|
+
PaginationNext,
|
|
46
|
+
PaginationPrevious,
|
|
47
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
3
|
+
|
|
4
|
+
const Select = SelectPrimitive.Root;
|
|
5
|
+
|
|
6
|
+
const SelectGroup = SelectPrimitive.Group;
|
|
7
|
+
|
|
8
|
+
const SelectValue = SelectPrimitive.Value;
|
|
9
|
+
|
|
10
|
+
const SelectTrigger = React.forwardRef<
|
|
11
|
+
React.ElementRef<typeof SelectPrimitive.Trigger>,
|
|
12
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
|
|
13
|
+
>(({ className, children, ...props }, ref) => <></>);
|
|
14
|
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
15
|
+
|
|
16
|
+
const SelectScrollUpButton = React.forwardRef<
|
|
17
|
+
React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
|
|
18
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
|
|
19
|
+
>(({ className, ...props }, ref) => <></>);
|
|
20
|
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
21
|
+
|
|
22
|
+
const SelectScrollDownButton = React.forwardRef<
|
|
23
|
+
React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
|
|
24
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
|
|
25
|
+
>(({ className, ...props }, ref) => <></>);
|
|
26
|
+
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
27
|
+
|
|
28
|
+
const SelectContent = React.forwardRef<
|
|
29
|
+
React.ElementRef<typeof SelectPrimitive.Content>,
|
|
30
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
|
|
31
|
+
>(({ className, children, position = "popper", ...props }, ref) => <></>);
|
|
32
|
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
33
|
+
|
|
34
|
+
const SelectLabel = React.forwardRef<
|
|
35
|
+
React.ElementRef<typeof SelectPrimitive.Label>,
|
|
36
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
|
|
37
|
+
>(({ className, ...props }, ref) => <></>);
|
|
38
|
+
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
39
|
+
|
|
40
|
+
const SelectItem = React.forwardRef<
|
|
41
|
+
React.ElementRef<typeof SelectPrimitive.Item>,
|
|
42
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
|
|
43
|
+
>(({ className, children, ...props }, ref) => <></>);
|
|
44
|
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
45
|
+
|
|
46
|
+
const SelectSeparator = React.forwardRef<
|
|
47
|
+
React.ElementRef<typeof SelectPrimitive.Separator>,
|
|
48
|
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
|
|
49
|
+
>(({ className, ...props }, ref) => <></>);
|
|
50
|
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
Select,
|
|
54
|
+
SelectGroup,
|
|
55
|
+
SelectValue,
|
|
56
|
+
SelectTrigger,
|
|
57
|
+
SelectContent,
|
|
58
|
+
SelectLabel,
|
|
59
|
+
SelectItem,
|
|
60
|
+
SelectSeparator,
|
|
61
|
+
SelectScrollUpButton,
|
|
62
|
+
SelectScrollDownButton,
|
|
63
|
+
};
|
package/src/force-app/main/default/webapplications/feature-react-global-search/src/constants.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application-wide Constants
|
|
3
|
+
*
|
|
4
|
+
* Defines constants used throughout the global search feature.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Object API names to search across in the global search feature.
|
|
9
|
+
* Currently supports single object search.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* - Array of Salesforce object API names
|
|
13
|
+
* - First element is used as the primary search object
|
|
14
|
+
* - Can be extended to support multiple objects in the future
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const objectApiName = OBJECT_API_NAMES[0]; // 'Account'
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const OBJECT_API_NAMES = ["Account"] as const;
|
|
22
|
+
|
|
23
|
+
/** Fallback title when record display name cannot be resolved (e.g. before load or no name field). */
|
|
24
|
+
export const DEFAULT_DETAIL_PAGE_TITLE = "Untitled";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Default page size for search results pagination.
|
|
28
|
+
* This should match one of the values in PAGE_SIZE_OPTIONS from paginationUtils.
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* - Default value is 20 (second option in PAGE_SIZE_OPTIONS)
|
|
32
|
+
* - Can be changed by user via pagination controls
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export const DEFAULT_PAGE_SIZE = 20;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API layer: object metadata (GraphQL), layout + record detail (REST layout + GraphQL record), record list/single (GraphQL).
|
|
3
|
+
*/
|
|
4
|
+
export { objectInfoService } from "./objectInfoService";
|
|
5
|
+
export { objectDetailService, extractFieldsFromLayout } from "./objectDetailService";
|
|
6
|
+
export type { RecordDetailResult } from "./objectDetailService";
|
|
7
|
+
export {
|
|
8
|
+
getRecordsGraphQL,
|
|
9
|
+
getRecordByIdGraphQL,
|
|
10
|
+
buildGetRecordsQuery,
|
|
11
|
+
buildWhereFromCriteria,
|
|
12
|
+
buildOrderByFromSort,
|
|
13
|
+
} from "./recordListGraphQLService";
|
|
14
|
+
export type {
|
|
15
|
+
RecordListGraphQLResult,
|
|
16
|
+
RecordListGraphQLVariables,
|
|
17
|
+
RecordListGraphQLOptions,
|
|
18
|
+
GraphQLRecordNode,
|
|
19
|
+
} from "./recordListGraphQLService";
|