@osdk/react-components 0.8.0 → 0.9.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e
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/CHANGELOG.md +14 -0
- package/build/browser/object-table/hooks/useFunctionColumnsData.js +19 -11
- package/build/browser/object-table/hooks/useFunctionColumnsData.js.map +1 -1
- package/build/browser/object-table/hooks/useObjectTableData.js +1 -1
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-WPIIXXRX.cjs → chunk-2GSFQHNJ.cjs} +3 -3
- package/build/cjs/chunk-2GSFQHNJ.cjs.map +1 -0
- package/build/cjs/{chunk-EFOD6VDT.cjs → chunk-4MJO6MP3.cjs} +4 -4
- package/build/cjs/{chunk-EFOD6VDT.cjs.map → chunk-4MJO6MP3.cjs.map} +1 -1
- package/build/cjs/{chunk-WII3JKZ5.cjs → chunk-DC7IAAS5.cjs} +4 -4
- package/build/cjs/{chunk-WII3JKZ5.cjs.map → chunk-DC7IAAS5.cjs.map} +1 -1
- package/build/cjs/{chunk-YLTIGE7W.cjs → chunk-EEGGERBP.cjs} +4 -4
- package/build/cjs/{chunk-YLTIGE7W.cjs.map → chunk-EEGGERBP.cjs.map} +1 -1
- package/build/cjs/{chunk-66353XCC.cjs → chunk-ZHRUGVWG.cjs} +22 -57
- package/build/cjs/chunk-ZHRUGVWG.cjs.map +1 -0
- package/build/cjs/public/experimental/action-form.cjs +4 -4
- package/build/cjs/public/experimental/filter-list.cjs +6 -6
- package/build/cjs/public/experimental/object-table.cjs +8 -8
- package/build/cjs/public/experimental/pdf-viewer.cjs +24 -24
- package/build/cjs/public/experimental.cjs +39 -39
- package/build/esm/object-table/hooks/useFunctionColumnsData.js +19 -11
- package/build/esm/object-table/hooks/useFunctionColumnsData.js.map +1 -1
- package/build/esm/object-table/hooks/useObjectTableData.js +1 -1
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/object-table/hooks/useFunctionColumnsData.d.ts +3 -3
- package/build/types/object-table/hooks/useFunctionColumnsData.d.ts.map +1 -1
- package/package.json +8 -8
- package/build/browser/object-table/utils/addFilterClauseToObjectSet.js +0 -24
- package/build/browser/object-table/utils/addFilterClauseToObjectSet.js.map +0 -1
- package/build/browser/object-table/utils/stripDerivedPropertiesFromParams.js +0 -61
- package/build/browser/object-table/utils/stripDerivedPropertiesFromParams.js.map +0 -1
- package/build/cjs/chunk-66353XCC.cjs.map +0 -1
- package/build/cjs/chunk-WPIIXXRX.cjs.map +0 -1
- package/build/esm/object-table/utils/addFilterClauseToObjectSet.js +0 -24
- package/build/esm/object-table/utils/addFilterClauseToObjectSet.js.map +0 -1
- package/build/esm/object-table/utils/stripDerivedPropertiesFromParams.js +0 -61
- package/build/esm/object-table/utils/stripDerivedPropertiesFromParams.js.map +0 -1
- package/build/types/object-table/utils/addFilterClauseToObjectSet.d.ts +0 -6
- package/build/types/object-table/utils/addFilterClauseToObjectSet.d.ts.map +0 -1
- package/build/types/object-table/utils/stripDerivedPropertiesFromParams.d.ts +0 -8
- package/build/types/object-table/utils/stripDerivedPropertiesFromParams.d.ts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @osdk/react-components
|
|
2
2
|
|
|
3
|
+
## 0.9.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 7b457a5: Fix function column with derived properties
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [aa78c78]
|
|
12
|
+
- Updated dependencies [7b457a5]
|
|
13
|
+
- @osdk/react@0.16.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e
|
|
14
|
+
- @osdk/client@2.13.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e
|
|
15
|
+
- @osdk/api@2.13.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e
|
|
16
|
+
|
|
3
17
|
## 0.8.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
|
@@ -14,32 +14,40 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { useOsdkClient2, useOsdkFunctions } from "@osdk/react/experimental";
|
|
18
18
|
import { chunk } from "lodash-es";
|
|
19
19
|
import { useMemo, useRef } from "react";
|
|
20
|
-
import { addFilterClauseToObjectSet } from "../utils/addFilterClauseToObjectSet.js";
|
|
21
20
|
import { createAsyncCellData } from "../utils/AsyncCellData.js";
|
|
22
21
|
import { DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS, DEFAULT_MAX_CONCURRENT_REQUESTS, DEFAULT_PAGE_SIZE } from "../utils/constants.js";
|
|
23
|
-
|
|
22
|
+
const isObjectType = objectOrInterfaceType => {
|
|
23
|
+
return objectOrInterfaceType.type === "object";
|
|
24
|
+
};
|
|
24
25
|
export function useFunctionColumnsData({
|
|
25
|
-
|
|
26
|
+
objectOrInterfaceType,
|
|
26
27
|
objects,
|
|
27
28
|
columnDefinitions,
|
|
28
29
|
primaryKeyApiName,
|
|
29
30
|
pageSize = DEFAULT_PAGE_SIZE
|
|
30
31
|
}) {
|
|
32
|
+
const client = useOsdkClient2();
|
|
31
33
|
const prevDataRef = useRef({});
|
|
34
|
+
const isObjectTypeDefinition = objectOrInterfaceType && isObjectType(objectOrInterfaceType);
|
|
32
35
|
const stableObjects = useStableObjects(objects);
|
|
33
|
-
const
|
|
36
|
+
const baseObjectSet = useMemo(() => {
|
|
37
|
+
return isObjectTypeDefinition ? client(objectOrInterfaceType) : undefined;
|
|
38
|
+
}, [client, isObjectTypeDefinition, objectOrInterfaceType]);
|
|
34
39
|
const functionColDefs = useMemo(() => extractFunctionLocators(columnDefinitions), [columnDefinitions]);
|
|
35
|
-
const disabled = !
|
|
40
|
+
const disabled = !baseObjectSet || !stableObjects?.length || functionColDefs.length === 0;
|
|
36
41
|
|
|
42
|
+
// Construct object sets using the base object set (constructed with object type only)
|
|
43
|
+
// + filter with primary keys of each page's objects
|
|
44
|
+
//
|
|
37
45
|
// When a new page loads, only that page's queries fire — old pages
|
|
38
46
|
// hit the dedupeIntervalMs cache since their params are unchanged.
|
|
39
47
|
const pagedObjectSets = useMemo(() => {
|
|
40
|
-
if (!
|
|
41
|
-
return buildPagedObjectSets(
|
|
42
|
-
}, [
|
|
48
|
+
if (!baseObjectSet || !stableObjects?.length) return [];
|
|
49
|
+
return buildPagedObjectSets(baseObjectSet, stableObjects, primaryKeyApiName, pageSize);
|
|
50
|
+
}, [baseObjectSet, stableObjects, primaryKeyApiName, pageSize]);
|
|
43
51
|
const queryGrid = useMemo(() => {
|
|
44
52
|
if (pagedObjectSets.length === 0 || functionColDefs.length === 0) {
|
|
45
53
|
return EMPTY_QUERY_GRID;
|
|
@@ -80,7 +88,7 @@ function extractFunctionLocators(columnDefinitions) {
|
|
|
80
88
|
/** Chunks objects into pages and creates a filtered ObjectSet per page. */
|
|
81
89
|
function buildPagedObjectSets(objectSet, objects, primaryKeyApiName, pageSize) {
|
|
82
90
|
if (!primaryKeyApiName) {
|
|
83
|
-
return [
|
|
91
|
+
return [objectSet];
|
|
84
92
|
}
|
|
85
93
|
return chunk(objects, pageSize).map(page => {
|
|
86
94
|
const whereClause = {
|
|
@@ -88,7 +96,7 @@ function buildPagedObjectSets(objectSet, objects, primaryKeyApiName, pageSize) {
|
|
|
88
96
|
$in: page.map(obj => obj.$primaryKey)
|
|
89
97
|
}
|
|
90
98
|
};
|
|
91
|
-
return
|
|
99
|
+
return objectSet.where(whereClause);
|
|
92
100
|
});
|
|
93
101
|
}
|
|
94
102
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFunctionColumnsData.js","names":["useOsdkFunctions","useStableObjectSet","chunk","useMemo","useRef","addFilterClauseToObjectSet","createAsyncCellData","DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS","DEFAULT_MAX_CONCURRENT_REQUESTS","DEFAULT_PAGE_SIZE","stripDerivedPropertiesFromParams","useFunctionColumnsData","objectSet","objects","columnDefinitions","primaryKeyApiName","pageSize","prevDataRef","stableObjects","useStableObjects","stableObjectSet","functionColDefs","extractFunctionLocators","disabled","length","pagedObjectSets","buildPagedObjectSets","queryGrid","EMPTY_QUERY_GRID","buildQueryGrid","results","queries","enabled","maxConcurrent","mergedResults","mergePagedResults","numColumns","data","columnData","buildFunctionColumnData","current","filter","colDef","locator","type","map","page","whereClause","$in","obj","$primaryKey","pagedObjectSet","push","queryDefinition","options","params","getFunctionParams","dedupeIntervalMs","merged","Array","from","isLoading","error","undefined","functionsMap","forEach","result","index","entry","pageData","Object","assign","prevColumnData","columnId","String","id","key","prevData","resolveCell","getKey","getValue","objectKey","rawData","JSON","stringify","item","$apiName","sort","a","b","localeCompare"],"sources":["useFunctionColumnsData.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectOrInterfaceDefinition,\n ObjectSet,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport {\n type FunctionQueryParams,\n useOsdkFunctions,\n type UseOsdkFunctionsResult,\n useStableObjectSet,\n} from \"@osdk/react/experimental\";\nimport { chunk } from \"lodash-es\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n ColumnDefinition,\n FunctionColumnLocator,\n} from \"../ObjectTableApi.js\";\nimport { addFilterClauseToObjectSet } from \"../utils/addFilterClauseToObjectSet.js\";\nimport {\n type AsyncCellData,\n createAsyncCellData,\n} from \"../utils/AsyncCellData.js\";\nimport {\n DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS,\n DEFAULT_MAX_CONCURRENT_REQUESTS,\n DEFAULT_PAGE_SIZE,\n} from \"../utils/constants.js\";\nimport { stripDerivedPropertiesFromParams } from \"../utils/stripDerivedPropertiesFromParams.js\";\n\nexport interface FunctionColumnData {\n [columnId: string]: {\n [objectPrimaryKey: string]: AsyncCellData;\n };\n}\n\nexport interface UseFunctionColumnsDataOptions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n> {\n objectSet: ObjectSet<Q, RDPs> | undefined;\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined;\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>;\n primaryKeyApiName?: string;\n pageSize?: number;\n}\n\nexport function useFunctionColumnsData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n {\n objectSet,\n objects,\n columnDefinitions,\n primaryKeyApiName,\n pageSize = DEFAULT_PAGE_SIZE,\n }: UseFunctionColumnsDataOptions<Q, RDPs, FunctionColumns>,\n): FunctionColumnData {\n const prevDataRef = useRef<FunctionColumnData>({});\n\n const stableObjects = useStableObjects(objects);\n const stableObjectSet = useStableObjectSet(objectSet);\n\n const functionColDefs = useMemo(\n () => extractFunctionLocators<Q, RDPs, FunctionColumns>(columnDefinitions),\n [columnDefinitions],\n );\n\n const disabled = !stableObjectSet || !stableObjects?.length\n || functionColDefs.length === 0;\n\n // When a new page loads, only that page's queries fire — old pages\n // hit the dedupeIntervalMs cache since their params are unchanged.\n const pagedObjectSets = useMemo(() => {\n if (!stableObjectSet || !stableObjects?.length) return [];\n return buildPagedObjectSets(\n stableObjectSet,\n stableObjects,\n primaryKeyApiName,\n pageSize,\n );\n }, [stableObjectSet, stableObjects, primaryKeyApiName, pageSize]);\n\n const queryGrid = useMemo(() => {\n if (pagedObjectSets.length === 0 || functionColDefs.length === 0) {\n return EMPTY_QUERY_GRID;\n }\n return buildQueryGrid<Q, RDPs, FunctionColumns>(\n pagedObjectSets,\n functionColDefs,\n );\n }, [pagedObjectSets, functionColDefs]);\n\n const results = useOsdkFunctions({\n queries: queryGrid.queries,\n enabled: !disabled,\n maxConcurrent: DEFAULT_MAX_CONCURRENT_REQUESTS,\n });\n\n const mergedResults = useMemo(\n () => mergePagedResults(results, queryGrid.numColumns),\n [results, queryGrid.numColumns],\n );\n\n const data = useMemo(() => {\n const columnData = buildFunctionColumnData(\n mergedResults,\n functionColDefs,\n stableObjects,\n disabled,\n prevDataRef.current,\n );\n prevDataRef.current = columnData;\n return columnData;\n }, [mergedResults, functionColDefs, stableObjects, disabled]);\n\n return data;\n}\n\n/**\n * Pairs a flat queries array with the layout metadata needed to recover per-column\n * results back into per-column groups. The numColumns value is produced by\n * the same function that builds the queries, so the two are always in sync.\n */\ninterface QueryGrid {\n queries: FunctionQueryParams<QueryDefinition<unknown>>[];\n numColumns: number;\n}\n\ninterface MergedResult {\n isLoading: boolean;\n error: unknown;\n functionsMap: Record<string, unknown>;\n}\n\nconst EMPTY_QUERY_GRID: QueryGrid = { queries: [], numColumns: 0 };\n\n/** Filters columnDefinitions down to only function-backed locators. */\nfunction extractFunctionLocators<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions:\n | Array<ColumnDefinition<Q, RDPs, FunctionColumns>>\n | undefined,\n): FunctionColumnLocator<Q, RDPs, FunctionColumns>[] {\n if (!columnDefinitions) return [];\n\n return columnDefinitions\n .filter(colDef => colDef.locator.type === \"function\")\n .map(colDef =>\n colDef.locator as FunctionColumnLocator<Q, RDPs, FunctionColumns>\n );\n}\n\n/** Chunks objects into pages and creates a filtered ObjectSet per page. */\nfunction buildPagedObjectSets<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n>(\n objectSet: ObjectSet<Q, RDPs>,\n objects: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[],\n primaryKeyApiName: string | undefined,\n pageSize: number,\n): unknown[] {\n if (!primaryKeyApiName) {\n return [stripDerivedPropertiesFromParams(objectSet)];\n }\n\n return chunk(objects, pageSize).map(page => {\n const whereClause = {\n [primaryKeyApiName]: {\n $in: page.map(obj => obj.$primaryKey),\n },\n } as WhereClause<Q, RDPs>;\n\n return stripDerivedPropertiesFromParams(\n addFilterClauseToObjectSet(objectSet, whereClause),\n );\n });\n}\n\n/**\n * Builds a flat query array and the layout metadata needed to recover per-column results.\n *\n * Layout: [page0_col0, page0_col1, ..., page1_col0, page1_col1, ...]\n * Page-first ordering ensures first concurrent queries prioritizes the first page,\n * so visible rows get all their columns populated before later pages.\n */\nfunction buildQueryGrid<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n pagedObjectSets: unknown[],\n functionColDefs: FunctionColumnLocator<Q, RDPs, FunctionColumns>[],\n): QueryGrid {\n const queries: FunctionQueryParams<QueryDefinition<unknown>>[] = [];\n\n for (const pagedObjectSet of pagedObjectSets) {\n for (const locator of functionColDefs) {\n queries.push({\n queryDefinition: locator.queryDefinition,\n options: {\n params: locator.getFunctionParams(\n pagedObjectSet as ObjectSet<Q, RDPs>,\n ),\n dedupeIntervalMs: locator.dedupeIntervalMs\n ?? DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS,\n } as FunctionQueryParams<QueryDefinition<unknown>>[\"options\"],\n });\n }\n }\n\n return { queries, numColumns: functionColDefs.length };\n}\n\n/**\n * Merges paged results into one merged result per column.\n * Each column has results spread across pages — this combines their\n * functionsMaps so buildFunctionColumnData can look up any object by key.\n *\n * Relies on QueryGrid layout: results[i] belongs to column (i % numColumns).\n * i.e. the first N results are the first page of each column, the next N results are the second page, etc.\n */\nfunction mergePagedResults(\n results: UseOsdkFunctionsResult,\n numColumns: number,\n): MergedResult[] {\n if (numColumns === 0) return [];\n\n const merged: MergedResult[] = Array.from(\n { length: numColumns },\n () => ({ isLoading: false, error: undefined, functionsMap: {} }),\n );\n\n results.forEach((result, index) => {\n const columnIndex = index % numColumns;\n const entry = merged[columnIndex];\n\n if (result.isLoading) {\n entry.isLoading = true;\n }\n if (result.error) {\n entry.error = result.error;\n }\n const pageData = result.data as Record<string, unknown> | undefined;\n if (pageData) {\n Object.assign(entry.functionsMap, pageData);\n }\n });\n\n return merged;\n}\n\nfunction buildFunctionColumnData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n results: MergedResult[],\n functionColDefs: FunctionColumnLocator<Q, RDPs, FunctionColumns>[],\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined,\n disabled: boolean,\n prevColumnData: FunctionColumnData,\n): FunctionColumnData {\n const columnData: FunctionColumnData = {};\n\n if (disabled || !objects) return columnData;\n\n results.forEach((result, index) => {\n const locator = functionColDefs[index];\n if (!locator) return;\n\n const columnId = String(locator.id);\n\n columnData[columnId] = {};\n\n objects.forEach(obj => {\n const key = String(obj.$primaryKey);\n const prevData = prevColumnData[columnId]?.[key]?.data;\n\n columnData[columnId][key] = createAsyncCellData(\n resolveCell(\n result,\n locator.getKey(obj),\n locator.getValue,\n prevData,\n ),\n );\n });\n });\n\n return columnData;\n}\n\n/** Resolves the cell state: error, loaded, or loading with previous data. */\nfunction resolveCell(\n result: MergedResult,\n objectKey: string,\n getValue: ((cellData: unknown) => unknown) | undefined,\n prevData: unknown,\n): Omit<AsyncCellData, \"__asyncCell\"> {\n if (result.error) {\n return { isLoading: false, error: result.error };\n }\n if (objectKey in result.functionsMap) {\n const rawData = result.functionsMap[objectKey];\n return { isLoading: false, data: getValue ? getValue(rawData) : rawData };\n }\n // Key not in results — still loading, or query returned no data for this object\n // Return with previous data\n return { isLoading: result.isLoading, data: prevData };\n}\n\nconst useStableObjects = <\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n>(\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined,\n):\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined =>\n{\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => objects, [\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(\n (objects ?? []).map(item => ({\n $apiName: item.$apiName,\n $primaryKey: item.$primaryKey,\n })).sort((a, b) => {\n if (a.$apiName !== b.$apiName) {\n return a.$apiName.localeCompare(b.$apiName);\n }\n return String(a.$primaryKey).localeCompare(String(b.$primaryKey));\n }),\n ),\n ]);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useFunctionColumnsData.js","names":["useOsdkClient2","useOsdkFunctions","chunk","useMemo","useRef","createAsyncCellData","DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS","DEFAULT_MAX_CONCURRENT_REQUESTS","DEFAULT_PAGE_SIZE","isObjectType","objectOrInterfaceType","type","useFunctionColumnsData","objects","columnDefinitions","primaryKeyApiName","pageSize","client","prevDataRef","isObjectTypeDefinition","stableObjects","useStableObjects","baseObjectSet","undefined","functionColDefs","extractFunctionLocators","disabled","length","pagedObjectSets","buildPagedObjectSets","queryGrid","EMPTY_QUERY_GRID","buildQueryGrid","results","queries","enabled","maxConcurrent","mergedResults","mergePagedResults","numColumns","data","columnData","buildFunctionColumnData","current","filter","colDef","locator","map","objectSet","page","whereClause","$in","obj","$primaryKey","where","pagedObjectSet","push","queryDefinition","options","params","getFunctionParams","dedupeIntervalMs","merged","Array","from","isLoading","error","functionsMap","forEach","result","index","entry","pageData","Object","assign","prevColumnData","columnId","String","id","key","prevData","resolveCell","getKey","getValue","objectKey","rawData","JSON","stringify","item","$apiName","sort","a","b","localeCompare"],"sources":["useFunctionColumnsData.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport {\n type FunctionQueryParams,\n useOsdkClient2,\n useOsdkFunctions,\n type UseOsdkFunctionsResult,\n} from \"@osdk/react/experimental\";\nimport { chunk } from \"lodash-es\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n ColumnDefinition,\n FunctionColumnLocator,\n} from \"../ObjectTableApi.js\";\nimport {\n type AsyncCellData,\n createAsyncCellData,\n} from \"../utils/AsyncCellData.js\";\nimport {\n DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS,\n DEFAULT_MAX_CONCURRENT_REQUESTS,\n DEFAULT_PAGE_SIZE,\n} from \"../utils/constants.js\";\n\nexport interface FunctionColumnData {\n [columnId: string]: {\n [objectPrimaryKey: string]: AsyncCellData;\n };\n}\n\nexport interface UseFunctionColumnsDataOptions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n> {\n objectOrInterfaceType: Q;\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined;\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>;\n primaryKeyApiName?: string;\n pageSize?: number;\n}\n\nconst isObjectType = (\n objectOrInterfaceType: ObjectOrInterfaceDefinition,\n): objectOrInterfaceType is ObjectTypeDefinition => {\n return objectOrInterfaceType.type === \"object\";\n};\n\nexport function useFunctionColumnsData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n {\n objectOrInterfaceType,\n objects,\n columnDefinitions,\n primaryKeyApiName,\n pageSize = DEFAULT_PAGE_SIZE,\n }: UseFunctionColumnsDataOptions<Q, RDPs, FunctionColumns>,\n): FunctionColumnData {\n const client = useOsdkClient2();\n const prevDataRef = useRef<FunctionColumnData>({});\n\n const isObjectTypeDefinition = objectOrInterfaceType\n && isObjectType(objectOrInterfaceType);\n\n const stableObjects = useStableObjects(objects);\n\n const baseObjectSet: ObjectSet<Q, RDPs> | undefined = useMemo(\n () => {\n return isObjectTypeDefinition\n ? client(objectOrInterfaceType) as ObjectSet<Q, RDPs>\n : undefined;\n },\n [client, isObjectTypeDefinition, objectOrInterfaceType],\n );\n\n const functionColDefs = useMemo(\n () => extractFunctionLocators<Q, RDPs, FunctionColumns>(columnDefinitions),\n [columnDefinitions],\n );\n\n const disabled = !baseObjectSet || !stableObjects?.length\n || functionColDefs.length === 0;\n\n // Construct object sets using the base object set (constructed with object type only)\n // + filter with primary keys of each page's objects\n //\n // When a new page loads, only that page's queries fire — old pages\n // hit the dedupeIntervalMs cache since their params are unchanged.\n const pagedObjectSets = useMemo(() => {\n if (!baseObjectSet || !stableObjects?.length) return [];\n\n return buildPagedObjectSets(\n baseObjectSet,\n stableObjects,\n primaryKeyApiName,\n pageSize,\n );\n }, [baseObjectSet, stableObjects, primaryKeyApiName, pageSize]);\n\n const queryGrid = useMemo(() => {\n if (pagedObjectSets.length === 0 || functionColDefs.length === 0) {\n return EMPTY_QUERY_GRID;\n }\n return buildQueryGrid<Q, RDPs, FunctionColumns>(\n pagedObjectSets,\n functionColDefs,\n );\n }, [pagedObjectSets, functionColDefs]);\n\n const results = useOsdkFunctions({\n queries: queryGrid.queries,\n enabled: !disabled,\n maxConcurrent: DEFAULT_MAX_CONCURRENT_REQUESTS,\n });\n\n const mergedResults = useMemo(\n () => mergePagedResults(results, queryGrid.numColumns),\n [results, queryGrid.numColumns],\n );\n\n const data = useMemo(() => {\n const columnData = buildFunctionColumnData(\n mergedResults,\n functionColDefs,\n stableObjects,\n disabled,\n prevDataRef.current,\n );\n prevDataRef.current = columnData;\n return columnData;\n }, [mergedResults, functionColDefs, stableObjects, disabled]);\n\n return data;\n}\n\n/**\n * Pairs a flat queries array with the layout metadata needed to recover per-column\n * results back into per-column groups. The numColumns value is produced by\n * the same function that builds the queries, so the two are always in sync.\n */\ninterface QueryGrid {\n queries: FunctionQueryParams<QueryDefinition<unknown>>[];\n numColumns: number;\n}\n\ninterface MergedResult {\n isLoading: boolean;\n error: unknown;\n functionsMap: Record<string, unknown>;\n}\n\nconst EMPTY_QUERY_GRID: QueryGrid = { queries: [], numColumns: 0 };\n\n/** Filters columnDefinitions down to only function-backed locators. */\nfunction extractFunctionLocators<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions:\n | Array<ColumnDefinition<Q, RDPs, FunctionColumns>>\n | undefined,\n): FunctionColumnLocator<Q, RDPs, FunctionColumns>[] {\n if (!columnDefinitions) return [];\n\n return columnDefinitions\n .filter(colDef => colDef.locator.type === \"function\")\n .map(colDef =>\n colDef.locator as FunctionColumnLocator<Q, RDPs, FunctionColumns>\n );\n}\n\n/** Chunks objects into pages and creates a filtered ObjectSet per page. */\nfunction buildPagedObjectSets<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n>(\n objectSet: ObjectSet<Q, RDPs>,\n objects: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[],\n primaryKeyApiName: string | undefined,\n pageSize: number,\n): unknown[] {\n if (!primaryKeyApiName) {\n return [objectSet];\n }\n\n return chunk(objects, pageSize).map(page => {\n const whereClause = {\n [primaryKeyApiName]: {\n $in: page.map(obj => obj.$primaryKey),\n },\n } as WhereClause<Q, RDPs>;\n\n return objectSet.where(whereClause);\n });\n}\n\n/**\n * Builds a flat query array and the layout metadata needed to recover per-column results.\n *\n * Layout: [page0_col0, page0_col1, ..., page1_col0, page1_col1, ...]\n * Page-first ordering ensures first concurrent queries prioritizes the first page,\n * so visible rows get all their columns populated before later pages.\n */\nfunction buildQueryGrid<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n pagedObjectSets: unknown[],\n functionColDefs: FunctionColumnLocator<Q, RDPs, FunctionColumns>[],\n): QueryGrid {\n const queries: FunctionQueryParams<QueryDefinition<unknown>>[] = [];\n\n for (const pagedObjectSet of pagedObjectSets) {\n for (const locator of functionColDefs) {\n queries.push({\n queryDefinition: locator.queryDefinition,\n options: {\n params: locator.getFunctionParams(\n pagedObjectSet as ObjectSet<Q, RDPs>,\n ),\n dedupeIntervalMs: locator.dedupeIntervalMs\n ?? DEFAULT_FUNCTION_COLUMN_DEDUPE_INTERVAL_MS,\n } as FunctionQueryParams<QueryDefinition<unknown>>[\"options\"],\n });\n }\n }\n\n return { queries, numColumns: functionColDefs.length };\n}\n\n/**\n * Merges paged results into one merged result per column.\n * Each column has results spread across pages — this combines their\n * functionsMaps so buildFunctionColumnData can look up any object by key.\n *\n * Relies on QueryGrid layout: results[i] belongs to column (i % numColumns).\n * i.e. the first N results are the first page of each column, the next N results are the second page, etc.\n */\nfunction mergePagedResults(\n results: UseOsdkFunctionsResult,\n numColumns: number,\n): MergedResult[] {\n if (numColumns === 0) return [];\n\n const merged: MergedResult[] = Array.from(\n { length: numColumns },\n () => ({ isLoading: false, error: undefined, functionsMap: {} }),\n );\n\n results.forEach((result, index) => {\n const columnIndex = index % numColumns;\n const entry = merged[columnIndex];\n\n if (result.isLoading) {\n entry.isLoading = true;\n }\n if (result.error) {\n entry.error = result.error;\n }\n const pageData = result.data as Record<string, unknown> | undefined;\n if (pageData) {\n Object.assign(entry.functionsMap, pageData);\n }\n });\n\n return merged;\n}\n\nfunction buildFunctionColumnData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n results: MergedResult[],\n functionColDefs: FunctionColumnLocator<Q, RDPs, FunctionColumns>[],\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined,\n disabled: boolean,\n prevColumnData: FunctionColumnData,\n): FunctionColumnData {\n const columnData: FunctionColumnData = {};\n\n if (disabled || !objects) return columnData;\n\n results.forEach((result, index) => {\n const locator = functionColDefs[index];\n if (!locator) return;\n\n const columnId = String(locator.id);\n\n columnData[columnId] = {};\n\n objects.forEach(obj => {\n const key = String(obj.$primaryKey);\n const prevData = prevColumnData[columnId]?.[key]?.data;\n\n columnData[columnId][key] = createAsyncCellData(\n resolveCell(\n result,\n locator.getKey(obj),\n locator.getValue,\n prevData,\n ),\n );\n });\n });\n\n return columnData;\n}\n\n/** Resolves the cell state: error, loaded, or loading with previous data. */\nfunction resolveCell(\n result: MergedResult,\n objectKey: string,\n getValue: ((cellData: unknown) => unknown) | undefined,\n prevData: unknown,\n): Omit<AsyncCellData, \"__asyncCell\"> {\n if (result.error) {\n return { isLoading: false, error: result.error };\n }\n if (objectKey in result.functionsMap) {\n const rawData = result.functionsMap[objectKey];\n return { isLoading: false, data: getValue ? getValue(rawData) : rawData };\n }\n // Key not in results — still loading, or query returned no data for this object\n // Return with previous data\n return { isLoading: result.isLoading, data: prevData };\n}\n\nconst useStableObjects = <\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n>(\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined,\n):\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined =>\n{\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => objects, [\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(\n (objects ?? []).map(item => ({\n $apiName: item.$apiName,\n $primaryKey: item.$primaryKey,\n })).sort((a, b) => {\n if (a.$apiName !== b.$apiName) {\n return a.$apiName.localeCompare(b.$apiName);\n }\n return String(a.$primaryKey).localeCompare(String(b.$primaryKey));\n }),\n ),\n ]);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -84,7 +84,7 @@ export function useObjectTableData(objectOrInterfaceType, columnDefinitions, fil
|
|
|
84
84
|
|
|
85
85
|
// Call useFunctionColumnsData to get function column data
|
|
86
86
|
const functionColumnData = useFunctionColumnsData({
|
|
87
|
-
|
|
87
|
+
objectOrInterfaceType,
|
|
88
88
|
objects: baseResult.data,
|
|
89
89
|
columnDefinitions,
|
|
90
90
|
primaryKeyApiName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectTableData.js","names":["useObjectSet","useOsdkObjects","useMemo","DEFAULT_OBJECT_TABLE_DEDUPE_INTERVAL_MS","DEFAULT_PAGE_SIZE","useFunctionColumnsData","useObjectTableData","objectOrInterfaceType","columnDefinitions","filter","sorting","objectSet","objectSetOptions","dedupeIntervalMs","pageSize","orderBy","length","undefined","reduce","acc","sort","id","desc","withProperties","rdpColumns","map","colDef","locator","colLocator","type","cur","creator","isObjectType","shouldUseObjectSet","objectSetResult","where","enabled","osdkObjectsResult","baseResult","primaryKeyApiName","functionColumnData","objects","data","mergedData","obj","objKey","String","$primaryKey","functionData","Object","entries","forEach","columnId","columnData"],"sources":["useObjectTableData.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DerivedProperty,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { UseOsdkListResult } from \"@osdk/react/experimental\";\nimport { useObjectSet, useOsdkObjects } from \"@osdk/react/experimental\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport type { ColumnDefinition, ObjectSetOptions } from \"../ObjectTableApi.js\";\nimport type { AsyncCellData } from \"../utils/AsyncCellData.js\";\nimport {\n DEFAULT_OBJECT_TABLE_DEDUPE_INTERVAL_MS,\n DEFAULT_PAGE_SIZE,\n} from \"../utils/constants.js\";\nimport { useFunctionColumnsData } from \"./useFunctionColumnsData.js\";\n\ntype WithProperties<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n> = {\n [K in keyof RDPs]: DerivedProperty.Creator<Q, RDPs[K]>;\n};\n\ninterface UseObjectTableDataResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> extends Omit<UseOsdkListResult<Q, RDPs>, \"isOptimistic\"> {}\n/**\n * This hook is a wrapper that conditionally uses either useObjectSet or useOsdkObjects\n * based on whether an objectSet prop is provided.\n * It extracts RDP locators from columnDefinitions and applies withProperties\n * to return data containing the derived properties.\n */\nexport function useObjectTableData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectOrInterfaceType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n filter?: WhereClause<Q, RDPs>,\n sorting?: SortingState,\n objectSet?: ObjectSet<Q>,\n objectSetOptions?: ObjectSetOptions<Q>,\n dedupeIntervalMs: number = DEFAULT_OBJECT_TABLE_DEDUPE_INTERVAL_MS,\n pageSize: number = DEFAULT_PAGE_SIZE,\n): UseObjectTableDataResult<Q, RDPs> {\n const orderBy = useMemo(() => {\n if (!sorting || sorting.length === 0) {\n return undefined;\n }\n\n return sorting.reduce<{ [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" }>(\n (acc, sort) => {\n acc[sort.id as PropertyKeys<Q>] = sort.desc ? \"desc\" : \"asc\";\n return acc;\n },\n {},\n );\n }, [sorting]);\n\n // Extract derived properties definition\n const withProperties = useMemo(() => {\n if (!columnDefinitions) {\n return;\n }\n\n const rdpColumns = columnDefinitions.map(colDef => colDef.locator).filter(\n (colLocator) => {\n return colLocator.type === \"rdp\";\n },\n );\n\n if (!rdpColumns.length) {\n return;\n }\n\n return rdpColumns.reduce<WithProperties<Q, RDPs>>(\n (acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur.creator,\n };\n },\n {} as WithProperties<Q, RDPs>,\n );\n }, [columnDefinitions]);\n\n // When objectSet is provided and it's an object type, use useObjectSet. Otherwise, use useOsdkObjects.\n const isObjectType = objectOrInterfaceType.type === \"object\";\n const shouldUseObjectSet = !!objectSet && isObjectType;\n\n // When shouldUseObjectSet is true, we know objectSet is defined\n // and objectOrInterfaceType is an ObjectTypeDefinition\n const objectSetResult = useObjectSet(\n shouldUseObjectSet ? objectSet as ObjectSet<Q, RDPs> : undefined as any,\n {\n ...(objectSetOptions as ObjectSetOptions<Q>),\n withProperties: withProperties as WithProperties<\n Q,\n RDPs\n >,\n where: filter,\n orderBy,\n pageSize,\n enabled: shouldUseObjectSet,\n dedupeIntervalMs,\n },\n );\n\n const osdkObjectsResult = useOsdkObjects<\n Q,\n RDPs\n >(\n objectOrInterfaceType,\n {\n withProperties,\n pageSize,\n where: filter,\n orderBy,\n enabled: !shouldUseObjectSet,\n dedupeIntervalMs,\n },\n );\n\n // Get the result from the appropriate hook\n const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;\n\n const primaryKeyApiName = objectOrInterfaceType.type === \"object\"\n ? objectOrInterfaceType.primaryKeyApiName\n : undefined;\n\n // Call useFunctionColumnsData to get function column data\n const functionColumnData = useFunctionColumnsData<Q, RDPs, FunctionColumns>({\n
|
|
1
|
+
{"version":3,"file":"useObjectTableData.js","names":["useObjectSet","useOsdkObjects","useMemo","DEFAULT_OBJECT_TABLE_DEDUPE_INTERVAL_MS","DEFAULT_PAGE_SIZE","useFunctionColumnsData","useObjectTableData","objectOrInterfaceType","columnDefinitions","filter","sorting","objectSet","objectSetOptions","dedupeIntervalMs","pageSize","orderBy","length","undefined","reduce","acc","sort","id","desc","withProperties","rdpColumns","map","colDef","locator","colLocator","type","cur","creator","isObjectType","shouldUseObjectSet","objectSetResult","where","enabled","osdkObjectsResult","baseResult","primaryKeyApiName","functionColumnData","objects","data","mergedData","obj","objKey","String","$primaryKey","functionData","Object","entries","forEach","columnId","columnData"],"sources":["useObjectTableData.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DerivedProperty,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { UseOsdkListResult } from \"@osdk/react/experimental\";\nimport { useObjectSet, useOsdkObjects } from \"@osdk/react/experimental\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport type { ColumnDefinition, ObjectSetOptions } from \"../ObjectTableApi.js\";\nimport type { AsyncCellData } from \"../utils/AsyncCellData.js\";\nimport {\n DEFAULT_OBJECT_TABLE_DEDUPE_INTERVAL_MS,\n DEFAULT_PAGE_SIZE,\n} from \"../utils/constants.js\";\nimport { useFunctionColumnsData } from \"./useFunctionColumnsData.js\";\n\ntype WithProperties<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n> = {\n [K in keyof RDPs]: DerivedProperty.Creator<Q, RDPs[K]>;\n};\n\ninterface UseObjectTableDataResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> extends Omit<UseOsdkListResult<Q, RDPs>, \"isOptimistic\"> {}\n/**\n * This hook is a wrapper that conditionally uses either useObjectSet or useOsdkObjects\n * based on whether an objectSet prop is provided.\n * It extracts RDP locators from columnDefinitions and applies withProperties\n * to return data containing the derived properties.\n */\nexport function useObjectTableData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectOrInterfaceType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n filter?: WhereClause<Q, RDPs>,\n sorting?: SortingState,\n objectSet?: ObjectSet<Q>,\n objectSetOptions?: ObjectSetOptions<Q>,\n dedupeIntervalMs: number = DEFAULT_OBJECT_TABLE_DEDUPE_INTERVAL_MS,\n pageSize: number = DEFAULT_PAGE_SIZE,\n): UseObjectTableDataResult<Q, RDPs> {\n const orderBy = useMemo(() => {\n if (!sorting || sorting.length === 0) {\n return undefined;\n }\n\n return sorting.reduce<{ [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" }>(\n (acc, sort) => {\n acc[sort.id as PropertyKeys<Q>] = sort.desc ? \"desc\" : \"asc\";\n return acc;\n },\n {},\n );\n }, [sorting]);\n\n // Extract derived properties definition\n const withProperties = useMemo(() => {\n if (!columnDefinitions) {\n return;\n }\n\n const rdpColumns = columnDefinitions.map(colDef => colDef.locator).filter(\n (colLocator) => {\n return colLocator.type === \"rdp\";\n },\n );\n\n if (!rdpColumns.length) {\n return;\n }\n\n return rdpColumns.reduce<WithProperties<Q, RDPs>>(\n (acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur.creator,\n };\n },\n {} as WithProperties<Q, RDPs>,\n );\n }, [columnDefinitions]);\n\n // When objectSet is provided and it's an object type, use useObjectSet. Otherwise, use useOsdkObjects.\n const isObjectType = objectOrInterfaceType.type === \"object\";\n const shouldUseObjectSet = !!objectSet && isObjectType;\n\n // When shouldUseObjectSet is true, we know objectSet is defined\n // and objectOrInterfaceType is an ObjectTypeDefinition\n const objectSetResult = useObjectSet(\n shouldUseObjectSet ? objectSet as ObjectSet<Q, RDPs> : undefined as any,\n {\n ...(objectSetOptions as ObjectSetOptions<Q>),\n withProperties: withProperties as WithProperties<\n Q,\n RDPs\n >,\n where: filter,\n orderBy,\n pageSize,\n enabled: shouldUseObjectSet,\n dedupeIntervalMs,\n },\n );\n\n const osdkObjectsResult = useOsdkObjects<\n Q,\n RDPs\n >(\n objectOrInterfaceType,\n {\n withProperties,\n pageSize,\n where: filter,\n orderBy,\n enabled: !shouldUseObjectSet,\n dedupeIntervalMs,\n },\n );\n\n // Get the result from the appropriate hook\n const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;\n\n const primaryKeyApiName = objectOrInterfaceType.type === \"object\"\n ? objectOrInterfaceType.primaryKeyApiName\n : undefined;\n\n // Call useFunctionColumnsData to get function column data\n const functionColumnData = useFunctionColumnsData<Q, RDPs, FunctionColumns>({\n objectOrInterfaceType,\n objects: baseResult.data,\n columnDefinitions,\n primaryKeyApiName,\n pageSize,\n });\n\n // Merge function column data into each object\n const mergedData = useMemo(() => {\n if (!baseResult.data) return baseResult.data;\n\n return baseResult.data.map(obj => {\n const objKey = String(obj.$primaryKey);\n const functionData: Record<string, AsyncCellData> = {};\n\n // Collect all function column data for this object\n Object.entries(functionColumnData).forEach(([columnId, columnData]) => {\n if (columnData[objKey]) {\n functionData[columnId] = columnData[objKey];\n }\n });\n\n // Return object with function data merged in\n return {\n ...obj,\n ...functionData,\n };\n });\n }, [baseResult.data, functionColumnData]);\n\n // Return the result with merged data\n return {\n ...baseResult,\n data: mergedData,\n } as UseObjectTableDataResult<Q, RDPs>;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
const PACKAGE_USER_AGENT = `osdk-react-components/${"0.
|
|
17
|
+
const PACKAGE_USER_AGENT = `osdk-react-components/${"0.9.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e"}`;
|
|
18
18
|
export function componentUserAgent(componentName) {
|
|
19
19
|
return `${PACKAGE_USER_AGENT}/${componentName}`;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT =\n `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GACtB,
|
|
1
|
+
{"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT =\n `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GACtB,gFAAsD;AAExD,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
|
|
@@ -10,7 +10,7 @@ var React__default = /*#__PURE__*/_interopDefault(React);
|
|
|
10
10
|
// src/util/withOsdkMetrics.ts
|
|
11
11
|
|
|
12
12
|
// src/util/UserAgent.ts
|
|
13
|
-
var PACKAGE_USER_AGENT = `osdk-react-components/${"0.
|
|
13
|
+
var PACKAGE_USER_AGENT = `osdk-react-components/${"0.9.0-main-7b457a54c3844cd5799738f99f15333d4f8cc39e"}`;
|
|
14
14
|
function componentUserAgent(componentName) {
|
|
15
15
|
return `${PACKAGE_USER_AGENT}/${componentName}`;
|
|
16
16
|
}
|
|
@@ -26,5 +26,5 @@ function withOsdkMetrics(Component, name) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
exports.withOsdkMetrics = withOsdkMetrics;
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-2GSFQHNJ.cjs.map
|
|
30
|
+
//# sourceMappingURL=chunk-2GSFQHNJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/util/UserAgent.ts","../../src/util/withOsdkMetrics.ts"],"names":["useRegisterUserAgent","React"],"mappings":";;;;;;;;;;;;AAgBA,IAAM,kBAAA,GAAqB,yBAAyB,qDAA2B,CAAA,CAAA;AACxE,SAAS,mBAAmB,aAAA,EAAe;AAChD,EAAA,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA;AAC/C;;;ACKO,SAAS,eAAA,CAAgB,WAAW,IAAA,EAAM;AAC/C,EAAA,MAAM,UAAU,CAAA,KAAA,KAAS;AACvB,IAAAA,iCAAA,CAAqB,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAC7C,IAAA,uBAAoBC,sBAAA,CAAM,aAAA,CAAc,SAAA,EAAW,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,OAAA,CAAQ,WAAA,GAAc,mBAAmB,IAAI,CAAA,CAAA,CAAA;AAC7C,EAAA,OAAO,OAAA;AACT","file":"chunk-2GSFQHNJ.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\nexport function componentUserAgent(componentName) {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useRegisterUserAgent } from \"@osdk/react/experimental\";\nimport React from \"react\";\nimport { componentUserAgent } from \"./UserAgent.js\";\n\n// `any` is required: FunctionComponent defaults to FunctionComponent<{}> which\n// rejects components with required props. A generic P parameter doesn't help\n// because TS can't infer both P and C simultaneously from a single argument.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withOsdkMetrics(Component, name) {\n const Wrapped = props => {\n useRegisterUserAgent(componentUserAgent(name));\n return /*#__PURE__*/React.createElement(Component, props);\n };\n Wrapped.displayName = `withOsdkMetrics(${name})`;\n return Wrapped;\n}"]}
|
|
@@ -4,7 +4,7 @@ var chunkUCTQICPR_cjs = require('./chunk-UCTQICPR.cjs');
|
|
|
4
4
|
var chunkOHKKNZZS_cjs = require('./chunk-OHKKNZZS.cjs');
|
|
5
5
|
var chunk2FPKTOPE_cjs = require('./chunk-2FPKTOPE.cjs');
|
|
6
6
|
var chunk7LXS66DW_cjs = require('./chunk-7LXS66DW.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunk2GSFQHNJ_cjs = require('./chunk-2GSFQHNJ.cjs');
|
|
8
8
|
var button = require('@base-ui/react/button');
|
|
9
9
|
var classnames3 = require('classnames');
|
|
10
10
|
var React18 = require('react');
|
|
@@ -4024,11 +4024,11 @@ function deserializeFilterStates(json) {
|
|
|
4024
4024
|
}
|
|
4025
4025
|
|
|
4026
4026
|
// src/public/experimental/filter-list.ts
|
|
4027
|
-
var FilterList2 =
|
|
4027
|
+
var FilterList2 = chunk2GSFQHNJ_cjs.withOsdkMetrics(FilterList, "FilterList");
|
|
4028
4028
|
|
|
4029
4029
|
exports.BaseFilterList = BaseFilterList;
|
|
4030
4030
|
exports.FilterList = FilterList2;
|
|
4031
4031
|
exports.deserializeFilterStates = deserializeFilterStates;
|
|
4032
4032
|
exports.serializeFilterStates = serializeFilterStates;
|
|
4033
|
-
//# sourceMappingURL=chunk-
|
|
4034
|
-
//# sourceMappingURL=chunk-
|
|
4033
|
+
//# sourceMappingURL=chunk-4MJO6MP3.cjs.map
|
|
4034
|
+
//# sourceMappingURL=chunk-4MJO6MP3.cjs.map
|