@osdk/react-components 0.3.0-main-20260408132634 → 0.3.0-main-20260408142652
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 +6 -4
- package/build/browser/object-table/hooks/useFunctionColumnsData.js +2 -1
- 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/object-table/utils/stripDerivedPropertiesFromParams.js +61 -0
- package/build/browser/object-table/utils/stripDerivedPropertiesFromParams.js.map +1 -0
- package/build/cjs/public/experimental.cjs +38 -2
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/esm/object-table/hooks/useFunctionColumnsData.js +2 -1
- 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/object-table/utils/stripDerivedPropertiesFromParams.js +61 -0
- package/build/esm/object-table/utils/stripDerivedPropertiesFromParams.js.map +1 -0
- package/build/types/object-table/hooks/useFunctionColumnsData.d.ts.map +1 -1
- package/build/types/object-table/utils/stripDerivedPropertiesFromParams.d.ts +8 -0
- package/build/types/object-table/utils/stripDerivedPropertiesFromParams.d.ts.map +1 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# @osdk/react-components
|
|
2
2
|
|
|
3
|
-
## 0.3.0-main-
|
|
3
|
+
## 0.3.0-main-20260408142652
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
7
|
- f8b9f12: Cache results from useOsdkFunctions
|
|
8
|
+
- 0b349bd: Fix returned objectSet in ObjectSetQuery
|
|
8
9
|
- 89def41: minor bump associated with BlueprintJS upgrade
|
|
9
10
|
- 6786113: Add dedupeIntervalMs prop to ObjectTable to configure the dedupe interval for caching network requests
|
|
10
11
|
|
|
@@ -15,11 +16,12 @@
|
|
|
15
16
|
- b2b512e: Address FilePickerField PR review comments: memoize computed values, add aria-label, rename CSS token, add keyboard interaction tests
|
|
16
17
|
- Updated dependencies [f8b9f12]
|
|
17
18
|
- Updated dependencies [bcf359f]
|
|
19
|
+
- Updated dependencies [0b349bd]
|
|
18
20
|
- Updated dependencies [51ccca8]
|
|
19
21
|
- Updated dependencies [fb85818]
|
|
20
|
-
- @osdk/client@2.9.0-main-
|
|
21
|
-
- @osdk/react@0.11.0-main-
|
|
22
|
-
- @osdk/api@2.9.0-main-
|
|
22
|
+
- @osdk/client@2.9.0-main-20260408142652
|
|
23
|
+
- @osdk/react@0.11.0-main-20260408142652
|
|
24
|
+
- @osdk/api@2.9.0-main-20260408142652
|
|
23
25
|
|
|
24
26
|
## 0.2.0
|
|
25
27
|
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import { useOsdkFunctions } from "@osdk/react/experimental";
|
|
18
18
|
import { useMemo } from "react";
|
|
19
19
|
import { createAsyncCellData } from "../utils/AsyncCellData.js";
|
|
20
|
+
import { stripDerivedPropertiesFromParams } from "../utils/stripDerivedPropertiesFromParams.js";
|
|
20
21
|
// Function column data is readOnly and can be cached aggressively,
|
|
21
22
|
// so we set a longer dedupe interval to maximize cache hits
|
|
22
23
|
export const DEFAULT_DEDUPE_INTERVAL_MS = 300_000; // 5 minutes
|
|
@@ -39,7 +40,7 @@ export function useFunctionColumnsData(objectSet, objects, columnDefinitions) {
|
|
|
39
40
|
return functionColumnConfigs.map(config => ({
|
|
40
41
|
queryDefinition: config.queryDefinition,
|
|
41
42
|
options: {
|
|
42
|
-
params: config.getParams(stableObjectSet),
|
|
43
|
+
params: stripDerivedPropertiesFromParams(config.getParams(stableObjectSet)),
|
|
43
44
|
dedupeIntervalMs: config.dedupeIntervalMs ?? DEFAULT_DEDUPE_INTERVAL_MS
|
|
44
45
|
}
|
|
45
46
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFunctionColumnsData.js","names":["useOsdkFunctions","useMemo","createAsyncCellData","DEFAULT_DEDUPE_INTERVAL_MS","useFunctionColumnsData","objectSet","objects","columnDefinitions","functionColumnConfigs","getFunctionColumnConfigs","stableObjects","useStableObjects","stableObjectSet","JSON","stringify","disabled","length","queries","map","config","queryDefinition","options","params","getParams","dedupeIntervalMs","results","enabled","data","columnData","forEach","result","index","functionsMap","columnIds","columnId","getValue","getKey","columnGetKey","obj","key","String","$primaryKey","isLoading","error","customKey","rawData","cellData","configsByApiName","Map","colDef","locator","type","apiName","existingConfig","get","push","id","Math","min","set","getFunctionParams","Array","from","values","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} from \"@osdk/api\";\nimport {\n type FunctionQueryParams,\n useOsdkFunctions,\n} from \"@osdk/react/experimental\";\n\nimport { useMemo } from \"react\";\nimport type {\n ColumnDefinition,\n FunctionColumnLocator,\n} from \"../ObjectTableApi.js\";\nimport {\n type AsyncCellData,\n createAsyncCellData,\n} from \"../utils/AsyncCellData.js\";\n\nexport interface FunctionColumnData {\n [columnId: string]: {\n [objectPrimaryKey: string]: AsyncCellData;\n };\n}\n\ntype FunctionColumnConfig<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> = {\n queryDefinition: QueryDefinition<unknown>;\n getParams: (\n objectSet: ObjectSet<Q, RDPs>,\n ) => unknown;\n columnIds: Array<{\n columnId: string;\n getValue?: (cellData: unknown) => unknown;\n getKey: (\n object: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>,\n ) => string;\n }>;\n dedupeIntervalMs?: number;\n};\n\n// Function column data is readOnly and can be cached aggressively,\n// so we set a longer dedupe interval to maximize cache hits\nexport const DEFAULT_DEDUPE_INTERVAL_MS = 300_000; // 5 minutes\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 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): FunctionColumnData {\n // Function column configurations grouped by unique query definition\n const functionColumnConfigs = useMemo(\n () => getFunctionColumnConfigs(columnDefinitions),\n [columnDefinitions],\n );\n\n const stableObjects = useStableObjects(objects);\n\n // TODO: replace with useDeepEqual when it's added\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableObjectSet = useMemo(() => objectSet, [JSON.stringify(objectSet)]);\n\n const disabled = !stableObjectSet || !stableObjects?.length\n || functionColumnConfigs.length === 0;\n\n // Prepare queries for useOsdkFunctions\n const queries = useMemo(\n () => {\n if (disabled) {\n return [];\n }\n\n return functionColumnConfigs.map(\n (config): FunctionQueryParams<QueryDefinition<unknown>> => ({\n queryDefinition: config.queryDefinition,\n options: {\n params: config.getParams(stableObjectSet),\n dedupeIntervalMs: config.dedupeIntervalMs\n ?? DEFAULT_DEDUPE_INTERVAL_MS,\n } as FunctionQueryParams<QueryDefinition<unknown>>[\"options\"],\n }),\n );\n },\n [disabled, functionColumnConfigs, stableObjectSet],\n );\n\n const results = useOsdkFunctions(\n {\n queries,\n enabled: !disabled,\n },\n );\n\n const data = useMemo(() => {\n const columnData: FunctionColumnData = {};\n\n if (disabled || !stableObjects) return columnData;\n\n results.forEach((result, index) => {\n const config = functionColumnConfigs[index];\n if (!config) return;\n\n const functionsMap = result.data as Record<string, unknown> | undefined;\n\n config.columnIds.forEach(\n ({ columnId, getValue, getKey: columnGetKey }) => {\n if (!columnData[columnId]) {\n columnData[columnId] = {};\n }\n\n stableObjects.forEach(obj => {\n const key = String(obj.$primaryKey);\n\n if (result.isLoading) {\n columnData[columnId][key] = createAsyncCellData({\n isLoading: true,\n });\n } else if (result.error) {\n columnData[columnId][key] = createAsyncCellData({\n error: result.error,\n isLoading: false,\n });\n } else if (functionsMap) {\n const customKey = columnGetKey(obj);\n const rawData = functionsMap[customKey];\n const cellData = getValue ? getValue(rawData) : rawData;\n columnData[columnId][key] = createAsyncCellData({\n data: cellData,\n isLoading: false,\n });\n }\n });\n },\n );\n });\n\n return columnData;\n }, [results, functionColumnConfigs, stableObjects, disabled]);\n\n return data;\n}\n\nfunction getFunctionColumnConfigs<\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?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): Array<FunctionColumnConfig<Q, RDPs>> {\n if (!columnDefinitions) return [];\n\n // Group columns by their query definition apiName\n const configsByApiName = new Map<\n string,\n FunctionColumnConfig<Q, RDPs>\n >();\n\n columnDefinitions.forEach((colDef) => {\n if (colDef.locator.type === \"function\") {\n const locator = colDef.locator as FunctionColumnLocator<\n Q,\n RDPs,\n FunctionColumns\n >;\n\n const apiName = locator.queryDefinition.apiName;\n const existingConfig = configsByApiName.get(apiName);\n\n if (existingConfig) {\n // Add this column to the existing config\n existingConfig.columnIds.push({\n columnId: String(locator.id),\n getValue: locator.getValue,\n getKey: locator.getKey,\n });\n // When multiple columns share a query, use the shortest dedupe interval\n if (locator.dedupeIntervalMs != null) {\n existingConfig.dedupeIntervalMs = existingConfig.dedupeIntervalMs\n != null\n ? Math.min(\n existingConfig.dedupeIntervalMs,\n locator.dedupeIntervalMs,\n )\n : locator.dedupeIntervalMs;\n }\n } else {\n // Create new config\n configsByApiName.set(apiName, {\n queryDefinition: locator.queryDefinition,\n getParams: locator.getFunctionParams,\n columnIds: [{\n columnId: String(locator.id),\n getValue: locator.getValue,\n getKey: locator.getKey,\n }],\n dedupeIntervalMs: locator.dedupeIntervalMs,\n });\n }\n }\n });\n\n return Array.from(configsByApiName.values());\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":["useOsdkFunctions","useMemo","createAsyncCellData","stripDerivedPropertiesFromParams","DEFAULT_DEDUPE_INTERVAL_MS","useFunctionColumnsData","objectSet","objects","columnDefinitions","functionColumnConfigs","getFunctionColumnConfigs","stableObjects","useStableObjects","stableObjectSet","JSON","stringify","disabled","length","queries","map","config","queryDefinition","options","params","getParams","dedupeIntervalMs","results","enabled","data","columnData","forEach","result","index","functionsMap","columnIds","columnId","getValue","getKey","columnGetKey","obj","key","String","$primaryKey","isLoading","error","customKey","rawData","cellData","configsByApiName","Map","colDef","locator","type","apiName","existingConfig","get","push","id","Math","min","set","getFunctionParams","Array","from","values","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} from \"@osdk/api\";\nimport {\n type FunctionQueryParams,\n useOsdkFunctions,\n} from \"@osdk/react/experimental\";\n\nimport { useMemo } from \"react\";\nimport type {\n ColumnDefinition,\n FunctionColumnLocator,\n} from \"../ObjectTableApi.js\";\nimport {\n type AsyncCellData,\n createAsyncCellData,\n} from \"../utils/AsyncCellData.js\";\nimport { stripDerivedPropertiesFromParams } from \"../utils/stripDerivedPropertiesFromParams.js\";\n\nexport interface FunctionColumnData {\n [columnId: string]: {\n [objectPrimaryKey: string]: AsyncCellData;\n };\n}\n\ntype FunctionColumnConfig<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> = {\n queryDefinition: QueryDefinition<unknown>;\n getParams: (\n objectSet: ObjectSet<Q, RDPs>,\n ) => unknown;\n columnIds: Array<{\n columnId: string;\n getValue?: (cellData: unknown) => unknown;\n getKey: (\n object: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>,\n ) => string;\n }>;\n dedupeIntervalMs?: number;\n};\n\n// Function column data is readOnly and can be cached aggressively,\n// so we set a longer dedupe interval to maximize cache hits\nexport const DEFAULT_DEDUPE_INTERVAL_MS = 300_000; // 5 minutes\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 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): FunctionColumnData {\n // Function column configurations grouped by unique query definition\n const functionColumnConfigs = useMemo(\n () => getFunctionColumnConfigs(columnDefinitions),\n [columnDefinitions],\n );\n\n const stableObjects = useStableObjects(objects);\n\n // TODO: replace with useDeepEqual when it's added\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableObjectSet = useMemo(() => objectSet, [JSON.stringify(objectSet)]);\n\n const disabled = !stableObjectSet || !stableObjects?.length\n || functionColumnConfigs.length === 0;\n\n // Prepare queries for useOsdkFunctions\n const queries = useMemo(\n () => {\n if (disabled) {\n return [];\n }\n\n return functionColumnConfigs.map(\n (config): FunctionQueryParams<QueryDefinition<unknown>> => ({\n queryDefinition: config.queryDefinition,\n options: {\n params: stripDerivedPropertiesFromParams(\n config.getParams(stableObjectSet),\n ),\n dedupeIntervalMs: config.dedupeIntervalMs\n ?? DEFAULT_DEDUPE_INTERVAL_MS,\n } as FunctionQueryParams<QueryDefinition<unknown>>[\"options\"],\n }),\n );\n },\n [disabled, functionColumnConfigs, stableObjectSet],\n );\n\n const results = useOsdkFunctions(\n {\n queries,\n enabled: !disabled,\n },\n );\n\n const data = useMemo(() => {\n const columnData: FunctionColumnData = {};\n\n if (disabled || !stableObjects) return columnData;\n\n results.forEach((result, index) => {\n const config = functionColumnConfigs[index];\n if (!config) return;\n\n const functionsMap = result.data as Record<string, unknown> | undefined;\n\n config.columnIds.forEach(\n ({ columnId, getValue, getKey: columnGetKey }) => {\n if (!columnData[columnId]) {\n columnData[columnId] = {};\n }\n\n stableObjects.forEach(obj => {\n const key = String(obj.$primaryKey);\n\n if (result.isLoading) {\n columnData[columnId][key] = createAsyncCellData({\n isLoading: true,\n });\n } else if (result.error) {\n columnData[columnId][key] = createAsyncCellData({\n error: result.error,\n isLoading: false,\n });\n } else if (functionsMap) {\n const customKey = columnGetKey(obj);\n const rawData = functionsMap[customKey];\n const cellData = getValue ? getValue(rawData) : rawData;\n columnData[columnId][key] = createAsyncCellData({\n data: cellData,\n isLoading: false,\n });\n }\n });\n },\n );\n });\n\n return columnData;\n }, [results, functionColumnConfigs, stableObjects, disabled]);\n\n return data;\n}\n\nfunction getFunctionColumnConfigs<\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?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): Array<FunctionColumnConfig<Q, RDPs>> {\n if (!columnDefinitions) return [];\n\n // Group columns by their query definition apiName\n const configsByApiName = new Map<\n string,\n FunctionColumnConfig<Q, RDPs>\n >();\n\n columnDefinitions.forEach((colDef) => {\n if (colDef.locator.type === \"function\") {\n const locator = colDef.locator as FunctionColumnLocator<\n Q,\n RDPs,\n FunctionColumns\n >;\n\n const apiName = locator.queryDefinition.apiName;\n const existingConfig = configsByApiName.get(apiName);\n\n if (existingConfig) {\n // Add this column to the existing config\n existingConfig.columnIds.push({\n columnId: String(locator.id),\n getValue: locator.getValue,\n getKey: locator.getKey,\n });\n // When multiple columns share a query, use the shortest dedupe interval\n if (locator.dedupeIntervalMs != null) {\n existingConfig.dedupeIntervalMs = existingConfig.dedupeIntervalMs\n != null\n ? Math.min(\n existingConfig.dedupeIntervalMs,\n locator.dedupeIntervalMs,\n )\n : locator.dedupeIntervalMs;\n }\n } else {\n // Create new config\n configsByApiName.set(apiName, {\n queryDefinition: locator.queryDefinition,\n getParams: locator.getFunctionParams,\n columnIds: [{\n columnId: String(locator.id),\n getValue: locator.getValue,\n getKey: locator.getKey,\n }],\n dedupeIntervalMs: locator.dedupeIntervalMs,\n });\n }\n }\n });\n\n return Array.from(configsByApiName.values());\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
|
const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;
|
|
85
85
|
|
|
86
86
|
// Call useFunctionColumnsData to get function column data
|
|
87
|
-
const functionColumnData = useFunctionColumnsData(
|
|
87
|
+
const functionColumnData = useFunctionColumnsData(baseResult.objectSet, baseResult.data, columnDefinitions);
|
|
88
88
|
|
|
89
89
|
// Merge function column data into each object
|
|
90
90
|
const mergedData = useMemo(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectTableData.js","names":["useObjectSet","useOsdkObjects","useMemo","useFunctionColumnsData","PAGE_SIZE","DEFAULT_DEDUPE_INTERVAL_MS","useObjectTableData","objectOrInterfaceType","columnDefinitions","filter","sorting","objectSet","objectSetOptions","dedupeIntervalMs","resolvedDedupeIntervalMs","orderBy","length","undefined","reduce","acc","sort","id","desc","withProperties","rdpColumns","map","colDef","locator","colLocator","type","cur","creator","isObjectType","shouldUseObjectSet","objectSetResult","where","pageSize","enabled","osdkObjectsResult","baseResult","functionColumnData","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 { useFunctionColumnsData } from \"./useFunctionColumnsData.js\";\n\nconst PAGE_SIZE = 50;\nconst DEFAULT_DEDUPE_INTERVAL_MS = 60_000;\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,\n): UseObjectTableDataResult<Q, RDPs> {\n const resolvedDedupeIntervalMs = dedupeIntervalMs\n ?? DEFAULT_DEDUPE_INTERVAL_MS;\n\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: PAGE_SIZE,\n enabled: shouldUseObjectSet,\n dedupeIntervalMs: resolvedDedupeIntervalMs,\n },\n );\n\n const osdkObjectsResult = useOsdkObjects<\n Q,\n RDPs\n >(\n objectOrInterfaceType,\n {\n withProperties,\n pageSize: PAGE_SIZE,\n where: filter,\n orderBy,\n enabled: !shouldUseObjectSet,\n dedupeIntervalMs: resolvedDedupeIntervalMs,\n },\n );\n\n // Get the result from the appropriate hook\n const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;\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","useFunctionColumnsData","PAGE_SIZE","DEFAULT_DEDUPE_INTERVAL_MS","useObjectTableData","objectOrInterfaceType","columnDefinitions","filter","sorting","objectSet","objectSetOptions","dedupeIntervalMs","resolvedDedupeIntervalMs","orderBy","length","undefined","reduce","acc","sort","id","desc","withProperties","rdpColumns","map","colDef","locator","colLocator","type","cur","creator","isObjectType","shouldUseObjectSet","objectSetResult","where","pageSize","enabled","osdkObjectsResult","baseResult","functionColumnData","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 { useFunctionColumnsData } from \"./useFunctionColumnsData.js\";\n\nconst PAGE_SIZE = 50;\nconst DEFAULT_DEDUPE_INTERVAL_MS = 60_000;\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,\n): UseObjectTableDataResult<Q, RDPs> {\n const resolvedDedupeIntervalMs = dedupeIntervalMs\n ?? DEFAULT_DEDUPE_INTERVAL_MS;\n\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: PAGE_SIZE,\n enabled: shouldUseObjectSet,\n dedupeIntervalMs: resolvedDedupeIntervalMs,\n },\n );\n\n const osdkObjectsResult = useOsdkObjects<\n Q,\n RDPs\n >(\n objectOrInterfaceType,\n {\n withProperties,\n pageSize: PAGE_SIZE,\n where: filter,\n orderBy,\n enabled: !shouldUseObjectSet,\n dedupeIntervalMs: resolvedDedupeIntervalMs,\n },\n );\n\n // Get the result from the appropriate hook\n const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;\n\n // Call useFunctionColumnsData to get function column data\n const functionColumnData = useFunctionColumnsData<Q, RDPs, FunctionColumns>(\n baseResult.objectSet,\n baseResult.data,\n columnDefinitions,\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":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { getWireObjectSet, isObjectSet } from "@osdk/client";
|
|
18
|
+
|
|
19
|
+
// TODO: Remove this workaround once function queries support
|
|
20
|
+
// derivedProperties (withProperties) in the ObjectSet payload.
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Function queries fail when the payload contains ObjectSets with
|
|
24
|
+
* derivedProperties (withProperties nodes). This strips them by
|
|
25
|
+
* converting any ObjectSet param values to their wire representation
|
|
26
|
+
* with withProperties nodes unwrapped.
|
|
27
|
+
*/
|
|
28
|
+
export function stripDerivedPropertiesFromParams(params) {
|
|
29
|
+
if (params == null || typeof params !== "object") {
|
|
30
|
+
return params;
|
|
31
|
+
}
|
|
32
|
+
if (isObjectSet(params)) {
|
|
33
|
+
const wire = getWireObjectSet(params);
|
|
34
|
+
return stripWithPropertiesFromWire(wire);
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(params)) {
|
|
37
|
+
return params.map(stripDerivedPropertiesFromParams);
|
|
38
|
+
}
|
|
39
|
+
const result = {};
|
|
40
|
+
for (const [key, value] of Object.entries(params)) {
|
|
41
|
+
result[key] = stripDerivedPropertiesFromParams(value);
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
export function stripWithPropertiesFromWire(wire) {
|
|
46
|
+
if (wire.type === "withProperties") {
|
|
47
|
+
return stripWithPropertiesFromWire(wire.objectSet);
|
|
48
|
+
}
|
|
49
|
+
const result = {};
|
|
50
|
+
for (const [key, value] of Object.entries(wire)) {
|
|
51
|
+
if (key === "objectSet" && value != null && typeof value === "object" && !Array.isArray(value)) {
|
|
52
|
+
result[key] = stripWithPropertiesFromWire(value);
|
|
53
|
+
} else if (key === "objectSets" && Array.isArray(value)) {
|
|
54
|
+
result[key] = value.map(os => stripWithPropertiesFromWire(os));
|
|
55
|
+
} else {
|
|
56
|
+
result[key] = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=stripDerivedPropertiesFromParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripDerivedPropertiesFromParams.js","names":["getWireObjectSet","isObjectSet","stripDerivedPropertiesFromParams","params","wire","stripWithPropertiesFromWire","Array","isArray","map","result","key","value","Object","entries","type","objectSet","os"],"sources":["stripDerivedPropertiesFromParams.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 { getWireObjectSet, isObjectSet } from \"@osdk/client\";\n\n// TODO: Remove this workaround once function queries support\n// derivedProperties (withProperties) in the ObjectSet payload.\n\n/**\n * Function queries fail when the payload contains ObjectSets with\n * derivedProperties (withProperties nodes). This strips them by\n * converting any ObjectSet param values to their wire representation\n * with withProperties nodes unwrapped.\n */\nexport function stripDerivedPropertiesFromParams(params: unknown): unknown {\n if (params == null || typeof params !== \"object\") {\n return params;\n }\n\n if (isObjectSet(params)) {\n const wire = getWireObjectSet(params) as unknown as Record<\n string,\n unknown\n >;\n return stripWithPropertiesFromWire(wire);\n }\n\n if (Array.isArray(params)) {\n return params.map(stripDerivedPropertiesFromParams);\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n result[key] = stripDerivedPropertiesFromParams(value);\n }\n return result;\n}\n\nexport function stripWithPropertiesFromWire(\n wire: Record<string, unknown>,\n): Record<string, unknown> {\n if (wire.type === \"withProperties\") {\n return stripWithPropertiesFromWire(\n wire.objectSet as Record<string, unknown>,\n );\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(wire)) {\n if (\n key === \"objectSet\" && value != null && typeof value === \"object\"\n && !Array.isArray(value)\n ) {\n result[key] = stripWithPropertiesFromWire(\n value as Record<string, unknown>,\n );\n } else if (key === \"objectSets\" && Array.isArray(value)) {\n result[key] = value.map(os =>\n stripWithPropertiesFromWire(os as Record<string, unknown>)\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,gBAAgB,EAAEC,WAAW,QAAQ,cAAc;;AAE5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gCAAgCA,CAACC,MAAe,EAAW;EACzE,IAAIA,MAAM,IAAI,IAAI,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IAChD,OAAOA,MAAM;EACf;EAEA,IAAIF,WAAW,CAACE,MAAM,CAAC,EAAE;IACvB,MAAMC,IAAI,GAAGJ,gBAAgB,CAACG,MAAM,CAGnC;IACD,OAAOE,2BAA2B,CAACD,IAAI,CAAC;EAC1C;EAEA,IAAIE,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAE;IACzB,OAAOA,MAAM,CAACK,GAAG,CAACN,gCAAgC,CAAC;EACrD;EAEA,MAAMO,MAA+B,GAAG,CAAC,CAAC;EAC1C,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACV,MAAM,CAAC,EAAE;IACjDM,MAAM,CAACC,GAAG,CAAC,GAAGR,gCAAgC,CAACS,KAAK,CAAC;EACvD;EACA,OAAOF,MAAM;AACf;AAEA,OAAO,SAASJ,2BAA2BA,CACzCD,IAA6B,EACJ;EACzB,IAAIA,IAAI,CAACU,IAAI,KAAK,gBAAgB,EAAE;IAClC,OAAOT,2BAA2B,CAChCD,IAAI,CAACW,SACP,CAAC;EACH;EAEA,MAAMN,MAA+B,GAAG,CAAC,CAAC;EAC1C,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,IAAI,CAAC,EAAE;IAC/C,IACEM,GAAG,KAAK,WAAW,IAAIC,KAAK,IAAI,IAAI,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAC9D,CAACL,KAAK,CAACC,OAAO,CAACI,KAAK,CAAC,EACxB;MACAF,MAAM,CAACC,GAAG,CAAC,GAAGL,2BAA2B,CACvCM,KACF,CAAC;IACH,CAAC,MAAM,IAAID,GAAG,KAAK,YAAY,IAAIJ,KAAK,CAACC,OAAO,CAACI,KAAK,CAAC,EAAE;MACvDF,MAAM,CAACC,GAAG,CAAC,GAAGC,KAAK,CAACH,GAAG,CAACQ,EAAE,IACxBX,2BAA2B,CAACW,EAA6B,CAC3D,CAAC;IACH,CAAC,MAAM;MACLP,MAAM,CAACC,GAAG,CAAC,GAAGC,KAAK;IACrB;EACF;EACA,OAAOF,MAAM;AACf","ignoreList":[]}
|
|
@@ -19,6 +19,7 @@ var checkbox = require('@base-ui/react/checkbox');
|
|
|
19
19
|
var combobox = require('@base-ui/react/combobox');
|
|
20
20
|
var react = require('@osdk/react');
|
|
21
21
|
var reactTable = require('@tanstack/react-table');
|
|
22
|
+
var client = require('@osdk/client');
|
|
22
23
|
var collapsible = require('@base-ui/react/collapsible');
|
|
23
24
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
24
25
|
var reactDom = require('react-dom');
|
|
@@ -4666,6 +4667,41 @@ function useEditableTable({
|
|
|
4666
4667
|
clearCellValidationError
|
|
4667
4668
|
};
|
|
4668
4669
|
}
|
|
4670
|
+
function stripDerivedPropertiesFromParams(params) {
|
|
4671
|
+
if (params == null || typeof params !== "object") {
|
|
4672
|
+
return params;
|
|
4673
|
+
}
|
|
4674
|
+
if (client.isObjectSet(params)) {
|
|
4675
|
+
const wire = client.getWireObjectSet(params);
|
|
4676
|
+
return stripWithPropertiesFromWire(wire);
|
|
4677
|
+
}
|
|
4678
|
+
if (Array.isArray(params)) {
|
|
4679
|
+
return params.map(stripDerivedPropertiesFromParams);
|
|
4680
|
+
}
|
|
4681
|
+
const result = {};
|
|
4682
|
+
for (const [key, value] of Object.entries(params)) {
|
|
4683
|
+
result[key] = stripDerivedPropertiesFromParams(value);
|
|
4684
|
+
}
|
|
4685
|
+
return result;
|
|
4686
|
+
}
|
|
4687
|
+
function stripWithPropertiesFromWire(wire) {
|
|
4688
|
+
if (wire.type === "withProperties") {
|
|
4689
|
+
return stripWithPropertiesFromWire(wire.objectSet);
|
|
4690
|
+
}
|
|
4691
|
+
const result = {};
|
|
4692
|
+
for (const [key, value] of Object.entries(wire)) {
|
|
4693
|
+
if (key === "objectSet" && value != null && typeof value === "object" && !Array.isArray(value)) {
|
|
4694
|
+
result[key] = stripWithPropertiesFromWire(value);
|
|
4695
|
+
} else if (key === "objectSets" && Array.isArray(value)) {
|
|
4696
|
+
result[key] = value.map((os) => stripWithPropertiesFromWire(os));
|
|
4697
|
+
} else {
|
|
4698
|
+
result[key] = value;
|
|
4699
|
+
}
|
|
4700
|
+
}
|
|
4701
|
+
return result;
|
|
4702
|
+
}
|
|
4703
|
+
|
|
4704
|
+
// src/object-table/hooks/useFunctionColumnsData.ts
|
|
4669
4705
|
var DEFAULT_DEDUPE_INTERVAL_MS = 3e5;
|
|
4670
4706
|
function useFunctionColumnsData(objectSet, objects, columnDefinitions) {
|
|
4671
4707
|
const functionColumnConfigs = React76.useMemo(() => getFunctionColumnConfigs(columnDefinitions), [columnDefinitions]);
|
|
@@ -4679,7 +4715,7 @@ function useFunctionColumnsData(objectSet, objects, columnDefinitions) {
|
|
|
4679
4715
|
return functionColumnConfigs.map((config) => ({
|
|
4680
4716
|
queryDefinition: config.queryDefinition,
|
|
4681
4717
|
options: {
|
|
4682
|
-
params: config.getParams(stableObjectSet),
|
|
4718
|
+
params: stripDerivedPropertiesFromParams(config.getParams(stableObjectSet)),
|
|
4683
4719
|
dedupeIntervalMs: config.dedupeIntervalMs ?? DEFAULT_DEDUPE_INTERVAL_MS
|
|
4684
4720
|
}
|
|
4685
4721
|
}));
|
|
@@ -4829,7 +4865,7 @@ function useObjectTableData(objectOrInterfaceType, columnDefinitions, filter, so
|
|
|
4829
4865
|
dedupeIntervalMs: resolvedDedupeIntervalMs
|
|
4830
4866
|
});
|
|
4831
4867
|
const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;
|
|
4832
|
-
const functionColumnData = useFunctionColumnsData(
|
|
4868
|
+
const functionColumnData = useFunctionColumnsData(baseResult.objectSet, baseResult.data, columnDefinitions);
|
|
4833
4869
|
const mergedData = React76.useMemo(() => {
|
|
4834
4870
|
if (!baseResult.data) return baseResult.data;
|
|
4835
4871
|
return baseResult.data.map((obj) => {
|