useCodingTask reference(useCodingTask 参考文档)¶
Learn more about the useCodingTask hook.
/*
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { useCallback, useEffect, useState } from "react";
import useSWR from "swr";
import { useOsdkClient } from "@osdk/react";
import { ITask } from "./useTasks";
import { osdkCodingTask } from "@avanced-to-do-application/sdk";
import type { User } from "@osdk/foundry.admin";
import type { ObjectMetadata } from "@osdk/client";
interface CodingTaskEnriched {
osdkCodingTask: osdkCodingTask.OsdkInstance;
createdBy: User;
assignedTo: User;
}
function useCodingTask(task: ITask) {
const client = useOsdkClient();
const [metadata, setMetadata] = useState<ObjectMetadata>();
// Define the fetcher using useCallback.
const fetcher = useCallback(async () => {
// We are using $as to pivot to the osdkCodingTask interface implementation.
// Note that this is possible because we used `$includeAllBaseObjectProperties: true` when fetching the task in useTasks.
const codingTask: osdkCodingTask.OsdkInstance = task.osdkTask.$as(osdkCodingTask);
const codingTaskEnriched: CodingTaskEnriched = {
osdkCodingTask: codingTask,
createdBy: task.createdBy,
assignedTo: task.assignedTo,
};
return codingTaskEnriched;
}, [task]);
// Only pass the fetcher if the data is not already cached.
const { data, error, isValidating } = useSWR<CodingTaskEnriched>(
task.osdkTask.$primaryKey as string,
fetcher,
{
revalidateOnFocus: false,
revalidateOnReconnect: false,
}
);
// This shows how we read the object type metadata and use the property display name from the ontology.
const getObjectTypeMetadata = useCallback(async () => {
const objectTypeMetadata = await client.fetchMetadata(osdkCodingTask);
setMetadata(objectTypeMetadata);
}, [client]);
useEffect(() => {
getObjectTypeMetadata();
}, [getObjectTypeMetadata]);
return {
codingTask: data,
isLoading: !data && !error,
isValidating,
isError: error,
metadata,
};
}
export default useCodingTask;
中文翻译¶
useCodingTask 参考文档¶
/*
* 版权所有 2025 Palantir Technologies, Inc. 保留所有权利。
*
* 根据 Apache 许可证 2.0 版("许可证")授权;
* 除非遵守许可证,否则您不得使用此文件。
* 您可以在以下网址获取许可证副本:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 除非适用法律要求或书面同意,否则按"原样"分发的软件
* 不提供任何明示或暗示的保证或条件。
* 有关许可证下的具体权限和限制,请参阅许可证。
*/
import { useCallback, useEffect, useState } from "react";
import useSWR from "swr";
import { useOsdkClient } from "@osdk/react";
import { ITask } from "./useTasks";
import { osdkCodingTask } from "@avanced-to-do-application/sdk";
import type { User } from "@osdk/foundry.admin";
import type { ObjectMetadata } from "@osdk/client";
interface CodingTaskEnriched {
osdkCodingTask: osdkCodingTask.OsdkInstance;
createdBy: User;
assignedTo: User;
}
function useCodingTask(task: ITask) {
const client = useOsdkClient();
const [metadata, setMetadata] = useState<ObjectMetadata>();
// 使用 useCallback 定义数据获取器(fetcher)。
const fetcher = useCallback(async () => {
// 我们使用 $as 来切换到 osdkCodingTask 接口实现。
// 请注意,这是可行的,因为我们在 useTasks 中获取任务时使用了 `$includeAllBaseObjectProperties: true`。
const codingTask: osdkCodingTask.OsdkInstance = task.osdkTask.$as(osdkCodingTask);
const codingTaskEnriched: CodingTaskEnriched = {
osdkCodingTask: codingTask,
createdBy: task.createdBy,
assignedTo: task.assignedTo,
};
return codingTaskEnriched;
}, [task]);
// 仅在数据尚未缓存时传递数据获取器(fetcher)。
const { data, error, isValidating } = useSWR<CodingTaskEnriched>(
task.osdkTask.$primaryKey as string,
fetcher,
{
revalidateOnFocus: false,
revalidateOnReconnect: false,
}
);
// 以下代码展示了如何读取对象类型元数据(Object Type Metadata)并使用本体论(Ontology)中的属性显示名称。
const getObjectTypeMetadata = useCallback(async () => {
const objectTypeMetadata = await client.fetchMetadata(osdkCodingTask);
setMetadata(objectTypeMetadata);
}, [client]);
useEffect(() => {
getObjectTypeMetadata();
}, [getObjectTypeMetadata]);
return {
codingTask: data,
isLoading: !data && !error,
isValidating,
isError: error,
metadata,
};
}
export default useCodingTask;