function useTaskMetadata()

in src/pages/Task/useTaskMetadata.ts [26:82]


function useTaskMetadata({ url, attemptId, paused }: TaskMetadataConfig): TaskMetadata {
  const { addDataToStore, clearDataStore } = useContext(PluginsContext);

  const config = useMemo(
    () => ({
      url: url,
      fetchAllData: true,
      updatePredicate,
      subscribeToEvents: true,
      initialData: emptyArray,
      pause: paused,
    }),
    [paused, url],
  );

  // Get metadata for tasks that don't have attempt id. We show them on every attempt
  const taskMetadataResource = useResource<Metadata[], Metadata>({
    ...config,
    queryParams: taskQueryParams,
    fetchAllData: true,
  });

  const attemptQueryParams = useMemo(
    () => ({
      _limit: '100',
      attempt_id: attemptId.toString(),
    }),
    [attemptId],
  );

  // Get metadata for current attempt
  const attemptMetadataResource = useResource<Metadata[], Metadata>({
    ...config,
    queryParams: attemptQueryParams,
    fetchAllData: true,
  });

  // Merge task and attempt data.
  const data = useMemo<Metadata[]>(() => {
    return taskMetadataResource.data && attemptMetadataResource.data
      ? [...taskMetadataResource.data, ...attemptMetadataResource.data]
      : [];
  }, [attemptMetadataResource.data, taskMetadataResource.data]);

  const dataCount = data.length;

  // Update metadata to plugin store
  useEffect(() => {
    addDataToStore('metadata', metadataToRecord(data));
  }, [dataCount, addDataToStore, data]);

  useEffect(() => {
    return () => clearDataStore('metadata');
  }, [url, attemptId, clearDataStore]);

  return { data, taskMetadataResource, attemptMetadataResource };
}