Advertisement
djbob2000

Untitled

Feb 25th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. import { apiPost } from "@/fd/fd-toolbox/api/api-client";
  2. import { ApiResponse } from "@/fd/fd-toolbox/api/api-response";
  3. import { FdTableComponent } from "@/meta/table/table-models";
  4. import { notify } from "@/fd/fd-toolbox/notifications";
  5. import { routes } from "@/fd/fd-toolbox/routing/routes";
  6. import { createAndDownloadCsv } from "@/lm/lead/actions/export-leads-action/create-and-download-csv";
  7. import { WithIdAndStringIndexer, withIdProps } from "@/fd/fd-toolbox/types/resource-with-id";
  8. import { leadProps } from "@/leads/props/lead-props";
  9. import { getUiResourceMeta } from "@/meta/ui-meta-providers";
  10. import { resourceNames } from "@/fd/fd-toolbox/resources/resource-names";
  11. import { isString } from "@/fd/fd-toolbox/types/ensure-type";
  12.  
  13. const notifications = {
  14. noItemsSelected: "Please select at least one item to export",
  15. exportCompleted: "Items were exported successfully",
  16. };
  17.  
  18. const leadEmailList = leadProps.leadEmailList;
  19.  
  20. export async function exportLeadInCSVFile(table: FdTableComponent | undefined) {
  21. if (!table) return;
  22.  
  23. const tableSelectedRows = table.getSelectedRows();
  24.  
  25. if (!tableSelectedRows?.length) {
  26. notify(notifications.noItemsSelected);
  27. return;
  28. }
  29.  
  30. const uiResourceMeta = await getUiResourceMeta(resourceNames.lead);
  31.  
  32. const items = tableSelectedRows.map(({ item }: { item: WithIdAndStringIndexer }) => {
  33. const processedItem = {
  34. ...item,
  35. ...(Array.isArray(item[leadEmailList])
  36. ? {
  37. [leadEmailList]: item[leadEmailList]
  38. .map((emailObj: { email: string }) => emailObj.email)
  39. .join(", "),
  40. }
  41. : {}),
  42. };
  43.  
  44. const result: WithIdAndStringIndexer = { id: "" };
  45. const idValue = isString(processedItem.id) ? processedItem.id : String(processedItem.id ?? "");
  46. let idDisplayName = withIdProps.id;
  47.  
  48. for (const [propertyName, value] of Object.entries(processedItem)) {
  49. const propertyMeta = uiResourceMeta.resourceMeta.properties[propertyName];
  50. const displayName = propertyMeta?.displayName || propertyName;
  51.  
  52. if (propertyName === withIdProps.id) {
  53. idDisplayName = displayName;
  54. continue;
  55. }
  56.  
  57. result[displayName] = String(value ?? "");
  58. }
  59.  
  60. result[idDisplayName] = idValue;
  61. result.id = idValue;
  62.  
  63. return result;
  64. });
  65.  
  66. const response = await apiPost<ApiResponse<string>>(routes.export, { items });
  67.  
  68. if (response?.data) {
  69. createAndDownloadCsv(response.data);
  70. notify(notifications.exportCompleted);
  71. }
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement