Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix[csv_table]: no reference exception #36

Merged
merged 12 commits into from
Oct 24, 2024

Conversation

ArslanSaleem
Copy link
Collaborator

@ArslanSaleem ArslanSaleem commented Oct 24, 2024

Summary by CodeRabbit

  • New Features

    • Enhanced DataTable component with improved click handling for reference icons, including error notifications.
    • Introduced a custom hook, useProcessStepReferences, for streamlined data fetching of process step references.
  • Bug Fixes

    • Improved filtering logic to ensure only relevant items are processed based on associated page numbers.
    • Enhanced error handling in the Drawer component for data fetching failures.
  • Documentation

    • Updated documentation to reflect new methods and hooks added to the components.

@ArslanSaleem ArslanSaleem requested a review from gventuri October 24, 2024 08:46
Copy link
Contributor

coderabbitai bot commented Oct 24, 2024

Walkthrough

The changes introduce enhancements to the DataTable component and the addition of a custom hook, useProcessStepReferences. The DataTable now features an asynchronous handleRefClick function for managing reference icon clicks, improving data retrieval and error handling. Meanwhile, ExtractReferenceDrawer replaces the useQuery hook with useProcessStepReferences, simplifying data fetching. The new custom hook encapsulates the query logic for fetching process step references, facilitating better state management and data handling across components.

Changes

File Path Change Summary
frontend/src/components/DataTable.tsx Added handleRefClick method for reference icon clicks; updated onClick event for FaInfoCircle.
frontend/src/components/ExtractReferenceDrawer.tsx Introduced useProcessStepReferences hook; modified filtering logic for filtered_output.
frontend/src/hooks/useProcessStepReferences.tsx Created useProcessStepReferences hook for fetching process step references with process_step_id.

Possibly related PRs

  • Release 0.2.3 #29: The changes in the main PR introduce a new asynchronous function handleRefClick that utilizes GetProcessStepReferences, which is also referenced in the useProcessStepReferences hook introduced in the retrieved PR. This indicates a direct connection in the handling of process step references.

Poem

In the garden of code, where rabbits play,
New hooks and functions brighten the day.
With clicks and references, we hop with glee,
Fetching data with ease, oh what a spree!
So let’s celebrate, with a joyful cheer,
For every new change brings us closer, my dear! 🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@codecov-commenter
Copy link

Codecov Report

All modified and coverable lines are covered by tests ✅

Please upload report for BASE (release/v0.3.0@b391228). Learn more about missing BASE report.

Additional details and impacted files
@@                Coverage Diff                @@
##             release/v0.3.0      #36   +/-   ##
=================================================
  Coverage                  ?   57.15%           
=================================================
  Files                     ?       37           
  Lines                     ?     1706           
  Branches                  ?        0           
=================================================
  Hits                      ?      975           
  Misses                    ?      731           
  Partials                  ?        0           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Outside diff range and nitpick comments (2)
frontend/src/components/ExtractReferenceDrawer.tsx (2)

Line range hint 5-5: Remove unused import.

The useQuery import is no longer needed since it's been replaced by useProcessStepReferences.

-import { useQuery } from "@tanstack/react-query";

Also applies to: 9-9


I have enough information to generate the final response now.

Add array length validation to prevent data inconsistency

The review comment is valid. From the codebase analysis:

  1. The Source interface in frontend/src/interfaces/processSteps.ts shows both sources and page_numbers are array properties
  2. The current code only checks if index exists in page_numbers but doesn't validate array length consistency
  3. There's no other validation of these arrays elsewhere in the codebase
  4. The test data shows that page_numbers can be null in some cases (from backend tests)

The suggested fix should be enhanced to handle null values:

filtered_output?.forEach((item: Source) => {
  const { sources, page_numbers } = item;
  
  if (!page_numbers) {
    console.warn(`page_numbers is null for source with name: ${item.name}`);
    return;
  }
  
  if (sources.length !== page_numbers.length) {
    console.warn(`Mismatched array lengths for ${item.name}: sources (${sources.length}) vs page_numbers (${page_numbers.length})`);
  }

  // Iterate through sources and page_numbers together
  for (let i = 0; i < sources.length; i++) {
    if (i < page_numbers.length) {
      filteredSourceDetails.push({
        source: sources[i],
        page_number: page_numbers[i],
      });
    }
  }
});
🔗 Analysis chain

Line range hint 36-46: Verify array length consistency.

The loop assumes sources and page_numbers arrays are properly paired, but only checks one direction. Consider adding validation to ensure both arrays have the same length.

filtered_output?.forEach((item: Source) => {
  const { sources, page_numbers } = item;
+  
+  if (sources.length !== page_numbers.length) {
+    console.warn(`Mismatched array lengths: sources (${sources.length}) vs page_numbers (${page_numbers.length})`);
+  }

  // Iterate through sources and page_numbers together
  for (let i = 0; i < sources.length; i++) {

Let me gather more context about the Source type and any validation that might exist in the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other usages of sources and page_numbers to understand if this mismatch is handled elsewhere
rg -A 5 "sources.*page_numbers|page_numbers.*sources"

Length of output: 1333


Script:

#!/bin/bash
# Search for Source type definition and any validation
ast-grep --pattern 'type Source = {
  $$$
}'

# Also search for interface definition
ast-grep --pattern 'interface Source {
  $$$
}'

# Search for any validation related to these arrays
rg -A 5 "sources.*length|page_numbers.*length"

Length of output: 1119

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between b391228 and de3f3ea.

📒 Files selected for processing (3)
  • frontend/src/components/DataTable.tsx (3 hunks)
  • frontend/src/components/ExtractReferenceDrawer.tsx (2 hunks)
  • frontend/src/hooks/useProcessStepReferences.tsx (1 hunks)
🔇 Additional comments (4)
frontend/src/hooks/useProcessStepReferences.tsx (2)

1-2: LGTM! Imports are clean and necessary.

The imports are well-organized and properly typed, importing only what's needed for the hook's functionality.


2-2: Verify the service implementation and return type.

Let's ensure the service layer is properly implemented and returns the expected data structure.

Also applies to: 8-8

✅ Verification successful

Let me try different commands to verify the service implementation.


Let me check the implementation details of the service.


Let me check the interface definitions to complete the verification.


Service implementation and return type are properly defined

The verification shows that:

  • The GetProcessStepReferences service is correctly implemented in frontend/src/services/processSteps.ts
  • It returns a Promise<ProcessStepOutputRef> which is well-defined in frontend/src/interfaces/processSteps.ts
  • The interface includes all necessary fields: id, process_id, project_id, asset_id, and output_reference
  • The service is properly used across multiple components (DataTable, ExtractReferenceDrawer) and the hook
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check the implementation of GetProcessStepReferences service

# Look for the service implementation
echo "Checking GetProcessStepReferences implementation..."
rg -t typescript -t javascript "export.*GetProcessStepReferences.*=" services/

# Look for any type definitions related to the service
echo "Checking for related type definitions..."
rg -t typescript "type.*ProcessStep.*Reference" --glob "!node_modules/"

Length of output: 428


Script:

#!/bin/bash
# Search for GetProcessStepReferences implementation
echo "Searching for GetProcessStepReferences implementation..."
rg "GetProcessStepReferences" --type-add 'ts:*.{ts,tsx}' -t ts

# Search for type definitions
echo "Searching for ProcessStep type definitions..."
rg "ProcessStep.*Reference" --type-add 'ts:*.{ts,tsx}' -t ts

# Look for the actual service file
echo "Looking for processSteps service file..."
fd "processSteps.ts" frontend/src/services/

Length of output: 2168


Script:

#!/bin/bash
# Get the implementation of GetProcessStepReferences
echo "Getting service implementation..."
cat frontend/src/services/processSteps.ts

# Look for any interfaces or types used by the service
echo "Looking for related interfaces..."
rg "interface.*ProcessStep|type.*ProcessStep" --type-add 'ts:*.{ts,tsx}' -t ts

Length of output: 1400


Script:

#!/bin/bash
# Get the interface definitions
echo "Getting interface definitions..."
cat frontend/src/interfaces/processSteps.ts

# Check usage of ProcessStepOutputRef in components
echo "Checking ProcessStepOutputRef usage..."
rg "ProcessStepOutputRef" --type-add 'ts:*.{ts,tsx}' -t ts -A 2

Length of output: 1830

frontend/src/components/ExtractReferenceDrawer.tsx (1)

30-32: LGTM! Good defensive programming.

Adding the item.page_numbers check helps prevent issues with undefined page numbers in the PDF viewer.

frontend/src/components/DataTable.tsx (1)

7-9: LGTM! Imports are well-organized and necessary.

The new imports support the enhanced reference handling functionality.

Comment on lines +4 to +11
export const useProcessStepReferences = (process_step_id: string) => {
return useQuery({
queryKey: ["processStepReferences", process_step_id],
queryFn: async () => {
return await GetProcessStepReferences(process_step_id);
},
});
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider enhancing the hook with better type safety and error handling.

The hook implementation is clean and follows React Query best practices. However, there are a few improvements that could make it more robust:

  1. Add explicit return type for better type safety
  2. Consider adding error handling for the service call
  3. Add caching configuration based on your data freshness requirements

Here's a suggested implementation:

+ type ProcessStepReference = {
+   // Add your reference type definition here
+ };

+ const QUERY_KEY = {
+   processStepReferences: (id: string) => ['processStepReferences', id] as const
+ };

- export const useProcessStepReferences = (process_step_id: string) => {
+ export const useProcessStepReferences = (process_step_id: string) => {
+   return useQuery<ProcessStepReference[], Error>({
-     queryKey: ["processStepReferences", process_step_id],
+     queryKey: QUERY_KEY.processStepReferences(process_step_id),
      queryFn: async () => {
-       return await GetProcessStepReferences(process_step_id);
+       try {
+         return await GetProcessStepReferences(process_step_id);
+       } catch (error) {
+         throw new Error(`Failed to fetch process step references: ${error.message}`);
+       }
      },
+     staleTime: 5 * 60 * 1000, // Consider adding appropriate stale time
    });
  };

Committable suggestion was skipped due to low confidence.

});

const output = data?.output_reference?.[index]?.[column_name] ?? null;
const { data, error, isLoading } = useProcessStepReferences(process_step_id);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add error handling for query failures.

The error state from useProcessStepReferences is not being handled. Consider displaying an error message to users when the reference data fails to load.

const ExtractReferenceDrawer = ({...}: IProps) => {
  const { data, error, isLoading } = useProcessStepReferences(process_step_id);
+  
+  if (error) {
+    return (
+      <Drawer isOpen={isOpen} onClose={onCancel} title={column_name}>
+        <div className="text-red-500">Failed to load references. Please try again.</div>
+      </Drawer>
+    );
+  }

Committable suggestion was skipped due to low confidence.

Comment on lines +105 to 110
handleRefClick({
id: props.row.___process_step_id,
index: props.row.___extraction_index,
filename: props.row.Filename,
key: props.column.key,
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider memoizing the click handler and handling loading state.

While the implementation is functionally correct, it could be optimized:

  1. Memoize the click handler to prevent unnecessary re-renders
  2. Disable the click action during loading state

Here's how you could improve it:

+ const handleIconClick = useCallback((row: Record<string, any>, columnKey: string) => (e: React.MouseEvent) => {
+   if (isLoading) return;
+   e.stopPropagation();
+   handleRefClick({
+     id: row.___process_step_id,
+     index: row.___extraction_index,
+     filename: row.Filename,
+     key: columnKey,
+   });
+ }, [isLoading, handleRefClick]);

// In the render function:
- onClick={(e) => {
-   e.stopPropagation();
-   handleRefClick({
-     id: props.row.___process_step_id,
-     index: props.row.___extraction_index,
-     filename: props.row.Filename,
-     key: props.column.key,
-   });
- }}
+ onClick={handleIconClick(props.row, props.column.key)}
+ style={{ cursor: isLoading ? 'not-allowed' : 'pointer' }}

Committable suggestion was skipped due to low confidence.

Comment on lines 57 to 70
const handleRefClick = async (props: SelectRowColumnType) => {
const data = await GetProcessStepReferences(props.id);
const filtered_output = data?.output_reference?.[props.index].filter(
(item: Source) => item.name == props.key && item.page_numbers
);

// Verify valid reference exists
if (filtered_output.length == 0) {
toast.error("Couldn't find the reference for this");
} else {
setSelectRowColumn(props);
setDisplayDrawer(true);
}
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add error handling and loading state management.

The async function could be improved in several areas:

  1. Add loading state management during the async operation
  2. Handle potential API errors
  3. Use strict comparison
  4. Use JSDoc style comments for consistency

Here's the suggested implementation:

+ const [isLoading, setIsLoading] = useState<boolean>(false);

  const handleRefClick = async (props: SelectRowColumnType) => {
+   setIsLoading(true);
    try {
      const data = await GetProcessStepReferences(props.id);
      const filtered_output = data?.output_reference?.[props.index].filter(
        (item: Source) => item.name === props.key && item.page_numbers
      );

-     //  Verify valid reference exists
+     /** Verify valid reference exists */
-     if (filtered_output.length == 0) {
+     if (filtered_output.length === 0) {
        toast.error("Couldn't find the reference for this");
      } else {
        setSelectRowColumn(props);
        setDisplayDrawer(true);
      }
+   } catch (error) {
+     toast.error("Failed to fetch references");
+     console.error("Error fetching references:", error);
+   } finally {
+     setIsLoading(false);
    }
  };

Committable suggestion was skipped due to low confidence.

Comment on lines 57 to 58
const handleRefClick = async (props: SelectRowColumnType) => {
const data = await GetProcessStepReferences(props.id);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Based on the gathered information, I can now provide the final response:

Test coverage needed for GetProcessStepReferences API integration

The GetProcessStepReferences function is an API integration point that:

  • Makes HTTP requests to fetch process step references
  • Is used in multiple components (DataTable, ExtractReferenceDrawer, useProcessStepReferences hook)
  • Handles error cases through a try-catch block

Since there are no test files found in the frontend directory and this function is a critical API integration point used across multiple components, tests should be added to ensure reliable behavior.

Key areas to test:

  • Successful API response handling
  • Error case handling
  • Integration with React Query in the useProcessStepReferences hook
🔗 Analysis chain

Verify test coverage for GetProcessStepReferences.

Ensure that the GetProcessStepReferences function has proper test coverage, especially for error cases.


Let me try a different search strategy to verify the test coverage.


Let me try one more search to specifically look for test files in the repository.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for tests related to GetProcessStepReferences
rg -t ts -t tsx "GetProcessStepReferences.*test" 

Length of output: 78


Script:

#!/bin/bash
# Search for GetProcessStepReferences implementation and tests
rg "GetProcessStepReferences" --type-add 'tsx:*.tsx' --type-add 'ts:*.ts' -t tsx -t ts -C 2

# Also search for test files containing "ProcessStep" as it might be part of a test suite
rg "ProcessStep.*test|test.*ProcessStep" --type-add 'tsx:*.tsx' --type-add 'ts:*.ts' -t tsx -t ts

Length of output: 2719


Script:

#!/bin/bash
# Search for test files in the frontend directory
fd "test\.(ts|tsx)$" frontend/src

# Look for the implementation of GetProcessStepReferences to understand its complexity
rg -A 10 "export const GetProcessStepReferences" frontend/src/services/processSteps.ts

Length of output: 458

@ArslanSaleem ArslanSaleem changed the title Fix/csv table no reference Fix[csv_table]: no reference exception Oct 24, 2024
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between de3f3ea and 5588c91.

📒 Files selected for processing (2)
  • frontend/src/components/DataTable.tsx (3 hunks)
  • frontend/src/components/ExtractReferenceDrawer.tsx (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/components/ExtractReferenceDrawer.tsx
🔇 Additional comments (3)
frontend/src/components/DataTable.tsx (3)

7-9: LGTM: New imports are properly organized and utilized.

The added imports support the new reference handling functionality.


56-56: LGTM: Loading state properly implemented.

The loading state management follows the previous review suggestions.


112-119: LGTM: Click handler implementation improved.

The click handler now includes proper loading state feedback.

Comment on lines +58 to +77
const handleRefClick = async (props: SelectRowColumnType) => {
setIsLoading(true);
try {
const data = await GetProcessStepReferences(props.id);
const filtered_output = data?.output_reference?.[props.index].filter(
(item: Source) => item.name == props.key && item.page_numbers
);
// Verify valid reference exists
if (filtered_output.length == 0) {
toast.error("Couldn't find the reference for this");
} else {
setSelectRowColumn(props);
setDisplayDrawer(true);
}
} catch (error) {
toast.error("Failed to fetch references");
} finally {
setIsLoading(false);
}
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Improve error handling and use strict equality comparisons.

The function implementation could be enhanced:

  1. Use strict equality (===) for comparisons
  2. Provide more specific error messages based on the error type

Apply these improvements:

 const handleRefClick = async (props: SelectRowColumnType) => {
   setIsLoading(true);
   try {
     const data = await GetProcessStepReferences(props.id);
     const filtered_output = data?.output_reference?.[props.index].filter(
-      (item: Source) => item.name == props.key && item.page_numbers
+      (item: Source) => item.name === props.key && item.page_numbers
     );
     //  Verify valid reference exists
-    if (filtered_output.length == 0) {
+    if (filtered_output.length === 0) {
       toast.error("Couldn't find the reference for this");
     } else {
       setSelectRowColumn(props);
       setDisplayDrawer(true);
     }
   } catch (error) {
-    toast.error("Failed to fetch references");
+    const errorMessage = error instanceof Error 
+      ? `Failed to fetch references: ${error.message}`
+      : "Failed to fetch references";
+    toast.error(errorMessage);
+    console.error("Reference fetch error:", error);
   } finally {
     setIsLoading(false);
   }
 };
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const handleRefClick = async (props: SelectRowColumnType) => {
setIsLoading(true);
try {
const data = await GetProcessStepReferences(props.id);
const filtered_output = data?.output_reference?.[props.index].filter(
(item: Source) => item.name == props.key && item.page_numbers
);
// Verify valid reference exists
if (filtered_output.length == 0) {
toast.error("Couldn't find the reference for this");
} else {
setSelectRowColumn(props);
setDisplayDrawer(true);
}
} catch (error) {
toast.error("Failed to fetch references");
} finally {
setIsLoading(false);
}
};
const handleRefClick = async (props: SelectRowColumnType) => {
setIsLoading(true);
try {
const data = await GetProcessStepReferences(props.id);
const filtered_output = data?.output_reference?.[props.index].filter(
(item: Source) => item.name === props.key && item.page_numbers
);
// Verify valid reference exists
if (filtered_output.length === 0) {
toast.error("Couldn't find the reference for this");
} else {
setSelectRowColumn(props);
setDisplayDrawer(true);
}
} catch (error) {
const errorMessage = error instanceof Error
? `Failed to fetch references: ${error.message}`
: "Failed to fetch references";
toast.error(errorMessage);
console.error("Reference fetch error:", error);
} finally {
setIsLoading(false);
}
};

@ArslanSaleem ArslanSaleem merged commit 4841d9f into release/v0.3.0 Oct 24, 2024
5 checks passed
@ArslanSaleem ArslanSaleem deleted the fix/csv_table_no_reference branch October 24, 2024 09:13
gventuri pushed a commit that referenced this pull request Oct 24, 2024
* refactor[summary]: clean up code to remove deprecated processes

* fix leftovers

* fix leftovers

* fix leftovers

* refactor: code improvements

* remove extra print statement

* refactor: cleanup some potential bug

* fix: remove extra print statement

* fix(csv): handle case if no reference is found

* refactor[CSV_table]: error handling in csv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants