ethyca-fides 2.73.1rc2__py2.py3-none-any.whl → 2.73.2b1__py2.py3-none-any.whl

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.

Potentially problematic release.


This version of ethyca-fides might be problematic. Click here for more details.

Files changed (245) hide show
  1. {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/RECORD +238 -235
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
  5. fides/api/api/v1/endpoints/generic_overrides.py +7 -7
  6. fides/api/models/privacy_request/duplicate_group.py +84 -0
  7. fides/api/models/privacy_request/privacy_request.py +12 -2
  8. fides/api/models/taxonomy.py +14 -4
  9. fides/api/schemas/privacy_request.py +2 -1
  10. fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +13 -6
  11. fides/api/service/privacy_request/duplication_detection.py +357 -0
  12. fides/api/service/saas_request/saas_request_override_factory.py +7 -2
  13. fides/common/api/scope_registry.py +0 -7
  14. fides/service/taxonomy/handlers/legacy_handler.py +3 -3
  15. fides/service/taxonomy/taxonomy_service.py +15 -15
  16. fides/ui-build/static/admin/404.html +1 -1
  17. fides/ui-build/static/admin/_next/static/chunks/5909-56b37040ff0e6933.js +1 -0
  18. fides/ui-build/static/admin/_next/static/chunks/{7245-c9bc628d078c2170.js → 7245-c41aa2528645a47d.js} +1 -1
  19. fides/ui-build/static/admin/_next/static/chunks/9899-5eea93b50aee65f7.js +1 -0
  20. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-ee588a308812715d.js → _app-2986534ccbf5e4a5.js} +2 -2
  21. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-b74862be16b8e2ae.js +1 -0
  22. fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-cc9e47f347b657bf.js +1 -0
  23. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-9692057d7ba62e04.js +1 -0
  24. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-652edb2ad165a845.js +1 -0
  25. fides/ui-build/static/admin/_next/static/wfI6N9ecEPXinU3OlxHLy/_buildManifest.js +1 -0
  26. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  27. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  28. fides/ui-build/static/admin/add-systems.html +1 -1
  29. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  30. fides/ui-build/static/admin/consent/configure.html +1 -1
  31. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  32. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  33. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  34. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  35. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  36. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  37. fides/ui-build/static/admin/consent/properties.html +1 -1
  38. fides/ui-build/static/admin/consent/reporting.html +1 -1
  39. fides/ui-build/static/admin/consent.html +1 -1
  40. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  41. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  42. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  43. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  44. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  45. fides/ui-build/static/admin/data-catalog.html +1 -1
  46. fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -1
  47. fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -1
  48. fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -1
  49. fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -1
  50. fides/ui-build/static/admin/data-discovery/action-center/website.html +1 -1
  51. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  52. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  53. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  54. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  55. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  56. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  57. fides/ui-build/static/admin/datamap.html +1 -1
  58. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  59. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  60. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  61. fides/ui-build/static/admin/dataset/new.html +1 -1
  62. fides/ui-build/static/admin/dataset.html +1 -1
  63. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  64. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  65. fides/ui-build/static/admin/datastore-connection.html +1 -1
  66. fides/ui-build/static/admin/index.html +1 -1
  67. fides/ui-build/static/admin/integrations/[id].html +1 -1
  68. fides/ui-build/static/admin/integrations.html +1 -1
  69. fides/ui-build/static/admin/login/[provider].html +1 -1
  70. fides/ui-build/static/admin/login.html +1 -1
  71. fides/ui-build/static/admin/new-privacy-requests.html +1 -1
  72. fides/ui-build/static/admin/notifications/digests/[id].html +1 -1
  73. fides/ui-build/static/admin/notifications/digests/new.html +1 -1
  74. fides/ui-build/static/admin/notifications/digests.html +1 -1
  75. fides/ui-build/static/admin/notifications/providers/[key].html +1 -1
  76. fides/ui-build/static/admin/notifications/providers/new.html +1 -1
  77. fides/ui-build/static/admin/notifications/providers.html +1 -1
  78. fides/ui-build/static/admin/notifications/templates/[id].html +1 -1
  79. fides/ui-build/static/admin/notifications/templates/add-template.html +1 -1
  80. fides/ui-build/static/admin/notifications/templates.html +1 -1
  81. fides/ui-build/static/admin/notifications.html +1 -1
  82. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  83. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  84. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  85. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  86. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  87. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  88. fides/ui-build/static/admin/poc/forms.html +1 -1
  89. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  90. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  91. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  92. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  93. fides/ui-build/static/admin/privacy-requests.html +1 -1
  94. fides/ui-build/static/admin/properties/[id].html +1 -1
  95. fides/ui-build/static/admin/properties/add-property.html +1 -1
  96. fides/ui-build/static/admin/properties.html +1 -1
  97. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  98. fides/ui-build/static/admin/sandbox/privacy-notices.html +1 -1
  99. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  100. fides/ui-build/static/admin/settings/about.html +1 -1
  101. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  102. fides/ui-build/static/admin/settings/consent.html +1 -1
  103. fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -1
  104. fides/ui-build/static/admin/settings/custom-fields/new.html +1 -1
  105. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  106. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  107. fides/ui-build/static/admin/settings/domains.html +1 -1
  108. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  109. fides/ui-build/static/admin/settings/locations.html +1 -1
  110. fides/ui-build/static/admin/settings/organization.html +1 -1
  111. fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
  112. fides/ui-build/static/admin/settings/regulations.html +1 -1
  113. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  114. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  115. fides/ui-build/static/admin/systems.html +1 -1
  116. fides/ui-build/static/admin/taxonomy.html +1 -1
  117. fides/ui-build/static/admin/user-management/new.html +1 -1
  118. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  119. fides/ui-build/static/admin/user-management.html +1 -1
  120. fides/ui-build/static/admin/_next/static/chunks/3873-d18e47b327445db5.js +0 -1
  121. fides/ui-build/static/admin/_next/static/chunks/9899-addc35c81190203d.js +0 -1
  122. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-21a0f5f1b5450976.js +0 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-df0c95e408c54c7e.js +0 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6e4c535b6d614596.js +0 -1
  125. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-d2eb5a81d4a19c7d.js +0 -1
  126. fides/ui-build/static/admin/_next/static/oFlSfw1FVW7HAJICOLe4Y/_buildManifest.js +0 -1
  127. {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/WHEEL +0 -0
  128. {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/entry_points.txt +0 -0
  129. {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/licenses/LICENSE +0 -0
  130. {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/top_level.txt +0 -0
  131. /fides/ui-build/static/admin/_next/static/chunks/{1099-31f9d973bc287df8.js → 1099-53dc1dd16a1e615b.js} +0 -0
  132. /fides/ui-build/static/admin/_next/static/chunks/{1115-26393b586775ea29.js → 1115-5f133b52b4c719f2.js} +0 -0
  133. /fides/ui-build/static/admin/_next/static/chunks/{1437-8b1f6c8797c68bfd.js → 1437-9485f6a257000689.js} +0 -0
  134. /fides/ui-build/static/admin/_next/static/chunks/{155-f6302d32cba4cab6.js → 155-c4b86b97419eee1b.js} +0 -0
  135. /fides/ui-build/static/admin/_next/static/chunks/{1817-2d5cf537a2992c79.js → 1817-a317936d371df0d0.js} +0 -0
  136. /fides/ui-build/static/admin/_next/static/chunks/{2040-7eed8491ca7276ed.js → 2040-041247847a1d23c9.js} +0 -0
  137. /fides/ui-build/static/admin/_next/static/chunks/{2397-083fc511acb6105d.js → 2397-2426b7f2f3c61c4b.js} +0 -0
  138. /fides/ui-build/static/admin/_next/static/chunks/{2921-34a43f2f8f5e5e69.js → 2921-4ee55c84908dcb6e.js} +0 -0
  139. /fides/ui-build/static/admin/_next/static/chunks/{3377-988ac2f3a2e8d5d4.js → 3377-421918a9708a85fa.js} +0 -0
  140. /fides/ui-build/static/admin/_next/static/chunks/{3696-6f90e41a53d22920.js → 3696-a22951845ef33489.js} +0 -0
  141. /fides/ui-build/static/admin/_next/static/chunks/{3700-f695f2f6b8251971.js → 3700-5cd6f6a219952e84.js} +0 -0
  142. /fides/ui-build/static/admin/_next/static/chunks/{3772-9f1713f9d5f97a10.js → 3772-240d907365cfd536.js} +0 -0
  143. /fides/ui-build/static/admin/_next/static/chunks/{3923-f0a85dc5c3684fa0.js → 3923-c0d5a344c1bcb75f.js} +0 -0
  144. /fides/ui-build/static/admin/_next/static/chunks/{401-7c345d019bb9bcbd.js → 401-2ae64c1931df4bbe.js} +0 -0
  145. /fides/ui-build/static/admin/_next/static/chunks/{4496-4ff19366c597ec16.js → 4496-94d9ef9a7b77bcd8.js} +0 -0
  146. /fides/ui-build/static/admin/_next/static/chunks/{4817-1f3e6ea38625d8d5.js → 4817-119bf7124a66b06d.js} +0 -0
  147. /fides/ui-build/static/admin/_next/static/chunks/{5185-e7f8b81dd3dfbe0b.js → 5185-6220718ffe0578af.js} +0 -0
  148. /fides/ui-build/static/admin/_next/static/chunks/{5258-62d6bc19add60aa6.js → 5258-566264abf15c818e.js} +0 -0
  149. /fides/ui-build/static/admin/_next/static/chunks/{5279-bd6cccabdd6ca447.js → 5279-d702b465ff72c384.js} +0 -0
  150. /fides/ui-build/static/admin/_next/static/chunks/{549-28537a6de666944b.js → 549-9ea1f2819cfa2b47.js} +0 -0
  151. /fides/ui-build/static/admin/_next/static/chunks/{5643-3459282d296a3c59.js → 5643-2c3308ff2cee965d.js} +0 -0
  152. /fides/ui-build/static/admin/_next/static/chunks/{5783-21775c232dce7af7.js → 5783-50e5735cf9cb0f2e.js} +0 -0
  153. /fides/ui-build/static/admin/_next/static/chunks/{6277-3759894435cb8569.js → 6277-7c765deedc54e9a6.js} +0 -0
  154. /fides/ui-build/static/admin/_next/static/chunks/{6315-e2fb5ea77179a871.js → 6315-9f22209b868f61a5.js} +0 -0
  155. /fides/ui-build/static/admin/_next/static/chunks/{6853-de9905d28e5b19b3.js → 6853-748e92c6414f313e.js} +0 -0
  156. /fides/ui-build/static/admin/_next/static/chunks/{6954-84789a4e4fb04eb9.js → 6954-2a52d012b8c44598.js} +0 -0
  157. /fides/ui-build/static/admin/_next/static/chunks/{7476-a02d970ea4d3f7d0.js → 7476-c1e9b034b4d3b1b6.js} +0 -0
  158. /fides/ui-build/static/admin/_next/static/chunks/{7488-cf92601852e3c509.js → 7488-4145699c604c9554.js} +0 -0
  159. /fides/ui-build/static/admin/_next/static/chunks/{7630-a11610c2b31ab2ca.js → 7630-a6631a3a78029573.js} +0 -0
  160. /fides/ui-build/static/admin/_next/static/chunks/{7773-9ae233109bc64ec2.js → 7773-dd824bff406d3057.js} +0 -0
  161. /fides/ui-build/static/admin/_next/static/chunks/{796-e36d610066135f8c.js → 796-8f56cd4d8dfa663e.js} +0 -0
  162. /fides/ui-build/static/admin/_next/static/chunks/{8011-75af8b480fa114e6.js → 8011-3d6cc0af757b41de.js} +0 -0
  163. /fides/ui-build/static/admin/_next/static/chunks/{8212-393420e5a9751791.js → 8212-10bf793014dafd8b.js} +0 -0
  164. /fides/ui-build/static/admin/_next/static/chunks/{8373-22b4d20e8cc06b3a.js → 8373-9b5db3cceef9add4.js} +0 -0
  165. /fides/ui-build/static/admin/_next/static/chunks/{9046-d9c6498368b993d1.js → 9046-48bd5b591ff9cadc.js} +0 -0
  166. /fides/ui-build/static/admin/_next/static/chunks/{9330-f753636a31c4ea04.js → 9330-4a29ef6a17e61b3f.js} +0 -0
  167. /fides/ui-build/static/admin/_next/static/chunks/{9682-d1a3afa1394f8304.js → 9682-1cfc98b906cf0d97.js} +0 -0
  168. /fides/ui-build/static/admin/_next/static/chunks/{9826-a737a9956c1d0905.js → 9826-517b8ba731a6642e.js} +0 -0
  169. /fides/ui-build/static/admin/_next/static/chunks/{9965-25621dd507e0cfd6.js → 9965-e3a7ac5848e62b5f.js} +0 -0
  170. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-eb019192ce498f32.js → 404-e30ec05084303d6b.js} +0 -0
  171. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-7081e0e49f67716c.js → manual-6466b8cdac3674ea.js} +0 -0
  172. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-a188f84239f4b2a8.js → multiple-bc06457d27216fad.js} +0 -0
  173. /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-ee9df33ebd471099.js → add-systems-eeba4d74db895be7.js} +0 -0
  174. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-4f9cf087fcee87e6.js → add-vendors-ff54e031f93924ad.js} +0 -0
  175. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-9af75caefc74eaca.js → configure-13651347dee871d0.js} +0 -0
  176. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1b02a4991201b7e4.js → [id]-3645a8f2244cdcf8.js} +0 -0
  177. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-b08abefec298ccf1.js → privacy-experience-c33ebeb4a7288596.js} +0 -0
  178. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-8c164c4b8310214e.js → [id]-d1868093b96d5dd0.js} +0 -0
  179. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-db789002d84c8829.js → new-a3de236a9ae52934.js} +0 -0
  180. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-6528eb24165aceb6.js → privacy-notices-e530117d048ce019.js} +0 -0
  181. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-5cba30eba1e97e56.js → properties-29b62430692da924.js} +0 -0
  182. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-11f1683aa15e1a62.js → reporting-4d1f50fbe0ed1562.js} +0 -0
  183. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-614af0a2c2ba966c.js → consent-5bebe58701b192c8.js} +0 -0
  184. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-d60761c20382b259.js → [projectUrn]-cb92b6b0bda753df.js} +0 -0
  185. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-07e7d38ce34e1e6c.js → projects-52a3660671c248ed.js} +0 -0
  186. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-aed94957009eb3fd.js → resources-26155daa740bcc3a.js} +0 -0
  187. /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-127c114dd8f102ed.js → data-catalog-487fcb8f2caed2da.js} +0 -0
  188. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/{[systemId]-899bf30dde8b3292.js → [systemId]-3d9fe61dd9e6f664.js} +0 -0
  189. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/{[monitorId]-73085f50abb775c0.js → [monitorId]-958927ffa1fd8645.js} +0 -0
  190. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-823d0dd77e66585b.js → action-center-037f91cf033616bc.js} +0 -0
  191. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-24a82e07a0008516.js → activity-a1cfa65b549a8612.js} +0 -0
  192. /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-3b100c44ea9e3988.js → datamap-2f28227308bcddd3.js} +0 -0
  193. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-5f88280db168083e.js → [...subfieldNames]-6d342de24c1a91ad.js} +0 -0
  194. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-bfbcf19c28c794ae.js → [collectionName]-8f78f42dafb99e59.js} +0 -0
  195. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-6fbe2b584a509226.js → [datasetId]-2b3cdd68b333aadf.js} +0 -0
  196. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-3d1e48f4b95d7f6b.js → new-1072d90df5d75ba1.js} +0 -0
  197. /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-d3c6ecf7f29bea6e.js → dataset-bf9e1cd7b8a91e81.js} +0 -0
  198. /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-0a4aa42be2da0255.js → [id]-e2a756a05906ce5b.js} +0 -0
  199. /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-14313e441a13192c.js → new-7435d78fcf749e65.js} +0 -0
  200. /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-f139d1ce26404f30.js → datastore-connection-dc50c7e9717c31ce.js} +0 -0
  201. /fides/ui-build/static/admin/_next/static/chunks/pages/{index-1343fa525a206571.js → index-91fb482245b14d86.js} +0 -0
  202. /fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-b2d3d28b10a758e6.js → [id]-6166dab37d311c92.js} +0 -0
  203. /fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-a733e5d7c3ce9bb8.js → integrations-82ffe15ce196c688.js} +0 -0
  204. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{[id]-63b3be660fb12c0f.js → [id]-0c7b41a17cd81544.js} +0 -0
  205. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{new-d3b577962dd33266.js → new-7e02a48cc86f7835.js} +0 -0
  206. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{digests-aed9afd988a48acf.js → digests-b0c864e6411cb8b9.js} +0 -0
  207. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{[key]-720cde29f81db47f.js → [key]-c5e272e1f0c9b097.js} +0 -0
  208. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{new-3668866076b53016.js → new-3cce4a6b31154b54.js} +0 -0
  209. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{providers-36a0ac36062abd02.js → providers-4136309c03cd69b9.js} +0 -0
  210. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{[id]-8063dceb32310c85.js → [id]-95aa9b844d3f19d0.js} +0 -0
  211. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{add-template-4931c70bee62232f.js → add-template-dbdfa8cd7fbb5e3c.js} +0 -0
  212. /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{templates-a14c876b49422597.js → templates-a4ce2e4c547ab85a.js} +0 -0
  213. /fides/ui-build/static/admin/_next/static/chunks/pages/{notifications-93af719dab3bd053.js → notifications-7d2e09a261df0655.js} +0 -0
  214. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-9cfb469de7b4aeab.js → ant-components-8ab33b70c0087799.js} +0 -0
  215. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-e715cc654fb6a5cd.js → AntForm-c0f0b4344f2d120a.js} +0 -0
  216. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-72ae299bcb6adae6.js → FormikAntFormItem-d6567b5b37000e85.js} +0 -0
  217. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-2337f8c81a766eb0.js → FormikControlled-4f632928b6dfd0d0.js} +0 -0
  218. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-0af454f55494f6fa.js → FormikField-ec194d81e022bc47.js} +0 -0
  219. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-d1b90ffa996fbd89.js → forms-dad16174a6bfd99c.js} +0 -0
  220. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-19724b9e0581b96d.js → table-migration-55db71ad40292372.js} +0 -0
  221. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-cdd3754289a28317.js → [id]-4dd70793c7edf0a8.js} +0 -0
  222. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-cc41ae605f2b55ae.js → storage-63588b8a340002fd.js} +0 -0
  223. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-fa82cffba448ccd8.js → configure-415700a23b1d3c11.js} +0 -0
  224. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-bc1c289647e52c48.js → [id]-61469c255ff06e69.js} +0 -0
  225. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-cbfaa23d96f5ed0b.js → add-property-4be683f2820027cd.js} +0 -0
  226. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-a15a3fd0ed88f39c.js → properties-b32d615283f0c31b.js} +0 -0
  227. /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-632b3ee563d070f2.js → datamap-1b4bdd9277062e60.js} +0 -0
  228. /fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/{privacy-notices-afe921f6e2a526fb.js → privacy-notices-f28535ed0a0080ad.js} +0 -0
  229. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-19de0024418a4924.js → [purpose_id]-b1500de5cd1fe441.js} +0 -0
  230. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-5b6807dced8d03c5.js → consent-f136f4204c5d6fc5.js} +0 -0
  231. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-7dce52bfc1b2652c.js → custom-fields-bf9b2ac61418b508.js} +0 -0
  232. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-3b87002753b23ca5.js → domain-records-318bcdad75571ca2.js} +0 -0
  233. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-aacd9d0ad47082d4.js → domains-1d0b2c16a3565091.js} +0 -0
  234. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-3cdd0b39901190ba.js → email-templates-33a5f7e22a7f8b71.js} +0 -0
  235. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-61076eedbfd137b9.js → locations-e2d25e574b5b46ee.js} +0 -0
  236. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-b07b11d6002f8c8c.js → organization-0055cabba6190e47.js} +0 -0
  237. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{privacy-requests-084a2b4431d35322.js → privacy-requests-f521263a3beaac9b.js} +0 -0
  238. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-b7c0d3b1b754e70f.js → regulations-8329b9cd8cd89579.js} +0 -0
  239. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-b72d36243a0a545c.js → test-datasets-81530b3fc0daa137.js} +0 -0
  240. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-59c89489fa32a4cb.js → [id]-4d94d20d4f7089f7.js} +0 -0
  241. /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-cfaa37a0df83674b.js → systems-22e7979c69e25bda.js} +0 -0
  242. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-5d5a68e555d18693.js → [id]-1d7d51b194f9dcc6.js} +0 -0
  243. /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-e6a211d8a0401086.js → user-management-b23b698c019a9560.js} +0 -0
  244. /fides/ui-build/static/admin/_next/static/chunks/{webpack-c2c11809187b9f84.js → webpack-d8c0ff59e7dbc75d.js} +0 -0
  245. /fides/ui-build/static/admin/_next/static/{oFlSfw1FVW7HAJICOLe4Y → wfI6N9ecEPXinU3OlxHLy}/_ssgManifest.js +0 -0
@@ -0,0 +1,357 @@
1
+ from datetime import datetime, timedelta, timezone
2
+ from typing import Optional
3
+
4
+ from loguru import logger
5
+ from sqlalchemy.orm import Session
6
+
7
+ from fides.api.models.privacy_request.duplicate_group import (
8
+ DuplicateGroup,
9
+ generate_rule_version,
10
+ )
11
+ from fides.api.models.privacy_request.privacy_request import PrivacyRequest
12
+ from fides.api.schemas.policy import ActionType
13
+ from fides.api.schemas.privacy_request import PrivacyRequestStatus
14
+ from fides.api.task.conditional_dependencies.schemas import (
15
+ Condition,
16
+ ConditionGroup,
17
+ ConditionLeaf,
18
+ GroupOperator,
19
+ Operator,
20
+ )
21
+ from fides.api.task.conditional_dependencies.sql_translator import (
22
+ SQLConditionTranslator,
23
+ )
24
+ from fides.config.duplicate_detection_settings import DuplicateDetectionSettings
25
+
26
+ ACTIONED_REQUEST_STATUSES = [
27
+ PrivacyRequestStatus.approved,
28
+ PrivacyRequestStatus.in_processing,
29
+ PrivacyRequestStatus.complete,
30
+ PrivacyRequestStatus.requires_manual_finalization,
31
+ PrivacyRequestStatus.requires_input,
32
+ PrivacyRequestStatus.paused,
33
+ PrivacyRequestStatus.awaiting_email_send,
34
+ PrivacyRequestStatus.error,
35
+ ]
36
+
37
+
38
+ class DuplicateDetectionService:
39
+ def __init__(self, db: Session):
40
+ self.db = db
41
+
42
+ def _create_identity_conditions(
43
+ self, current_request: PrivacyRequest, config: DuplicateDetectionSettings
44
+ ) -> list[Condition]:
45
+ """Creates conditions for matching identity fields.
46
+
47
+ For identity field matching using the EAV pattern in ProvidedIdentity, we need to match both field_name
48
+ and hashed_value. This function creates the required nested conditions for each identity field.
49
+ Also adds a condition for the policy_id to ensure that we are only matching requests for the same policy.
50
+ """
51
+ conditions: list[Condition] = []
52
+ current_identities: dict[str, str] = {
53
+ pi.field_name: pi.hashed_value
54
+ for pi in current_request.provided_identities # type: ignore [attr-defined]
55
+ if pi.field_name in config.match_identity_fields
56
+ }
57
+ if len(current_identities) != len(config.match_identity_fields):
58
+ missing_fields = [
59
+ field
60
+ for field in config.match_identity_fields
61
+ if field not in current_identities.keys()
62
+ ]
63
+ logger.debug(
64
+ f"Some identity fields were not found in the current request: {missing_fields}"
65
+ )
66
+ return []
67
+
68
+ for field_name, hashed_value in current_identities.items():
69
+ identity_condition = ConditionGroup(
70
+ logical_operator=GroupOperator.and_,
71
+ conditions=[
72
+ ConditionLeaf(
73
+ field_address="privacyrequest.provided_identities.field_name",
74
+ operator=Operator.eq,
75
+ value=field_name,
76
+ ),
77
+ ConditionLeaf(
78
+ field_address="privacyrequest.provided_identities.hashed_value",
79
+ operator=Operator.eq,
80
+ value=hashed_value,
81
+ ),
82
+ ],
83
+ )
84
+ conditions.append(identity_condition)
85
+ policy_condition = ConditionLeaf(
86
+ field_address="privacyrequest.policy_id",
87
+ operator=Operator.eq,
88
+ value=current_request.policy_id,
89
+ )
90
+ conditions.append(policy_condition)
91
+ return conditions
92
+
93
+ def _create_time_window_condition(self, time_window_days: int) -> Condition:
94
+ """Creates a condition for matching requests within a time window."""
95
+ cutoff_date = datetime.now(timezone.utc) - timedelta(days=time_window_days)
96
+ condition = ConditionLeaf(
97
+ field_address="privacyrequest.created_at",
98
+ operator=Operator.gte,
99
+ value=cutoff_date.isoformat(),
100
+ )
101
+ return condition
102
+
103
+ def create_duplicate_detection_conditions(
104
+ self,
105
+ current_request: PrivacyRequest,
106
+ config: DuplicateDetectionSettings,
107
+ ) -> Optional[ConditionGroup]:
108
+ """
109
+ Create conditions for duplicate detection based on configuration.
110
+
111
+ Args:
112
+ current_request: The current privacy request to find duplicates for
113
+ config: Duplicate detection configuration settings
114
+
115
+ Returns:
116
+ A ConditionGroup with AND operator, or None if no conditions can be created
117
+ """
118
+ if len(config.match_identity_fields) == 0:
119
+ return None
120
+
121
+ identity_conditions = self._create_identity_conditions(current_request, config)
122
+ if not identity_conditions:
123
+ return None # Only proceed if we have identity conditions
124
+
125
+ time_window_condition = self._create_time_window_condition(
126
+ config.time_window_days
127
+ )
128
+
129
+ # Combine all conditions with AND operator
130
+ all_conditions: list[Condition] = [*identity_conditions, time_window_condition]
131
+ return ConditionGroup(
132
+ logical_operator=GroupOperator.and_, conditions=all_conditions
133
+ )
134
+
135
+ def find_duplicate_privacy_requests(
136
+ self,
137
+ current_request: PrivacyRequest,
138
+ config: DuplicateDetectionSettings,
139
+ ) -> list[PrivacyRequest]:
140
+ """
141
+ Find potential duplicate privacy requests based on duplicate detection configuration.
142
+
143
+ Uses the SQLConditionTranslator to build queries from conditions, which handles
144
+ the ProvidedIdentity relationship using SQLAlchemy's .any() method.
145
+
146
+ Args:
147
+ current_request: The privacy request to check for duplicates
148
+ config: Duplicate detection configuration settings
149
+
150
+ Returns:
151
+ List of PrivacyRequest objects that match the duplicate criteria,
152
+ does not include the current request
153
+ """
154
+ condition = self.create_duplicate_detection_conditions(current_request, config)
155
+
156
+ if condition is None:
157
+ return []
158
+
159
+ translator = SQLConditionTranslator(self.db)
160
+ query = translator.generate_query_from_condition(condition)
161
+
162
+ query = query.filter(PrivacyRequest.id != current_request.id)
163
+ return query.all()
164
+
165
+ def generate_dedup_key(
166
+ self, request: PrivacyRequest, config: DuplicateDetectionSettings
167
+ ) -> str:
168
+ """
169
+ Generate a dedup key for a request based on the duplicate detection settings.
170
+ """
171
+ current_identities: dict[str, str] = {
172
+ pi.field_name: pi.hashed_value
173
+ for pi in request.provided_identities # type: ignore [attr-defined]
174
+ if pi.field_name in config.match_identity_fields
175
+ }
176
+ if len(current_identities) != len(config.match_identity_fields):
177
+ raise ValueError(
178
+ "This request does not contain the required identity fields for duplicate detection."
179
+ )
180
+ return "|".join(
181
+ [
182
+ current_identities[field]
183
+ for field in sorted(config.match_identity_fields)
184
+ ]
185
+ )
186
+
187
+ def verified_identity_cases(
188
+ self, request: PrivacyRequest, duplicates: list[PrivacyRequest]
189
+ ) -> bool:
190
+ """
191
+ Apply verified identity rules to determine if a request is a duplicate request.
192
+ - If this request does not have a verified identity, it may be a duplicate if another request in the group is verified.
193
+ - If this is the first request to be verified, it is not a duplicate request
194
+ - If other requests identities were verified before this request, it is a duplicate request
195
+ Args:
196
+ request: The privacy request to check
197
+ duplicates: The list of duplicate requests
198
+
199
+ Returns:
200
+ True if the request is a duplicate request, False otherwise
201
+ """
202
+ verified_in_group = [
203
+ duplicate for duplicate in duplicates if duplicate.identity_verified_at
204
+ ]
205
+
206
+ # The request identity is not verified.
207
+ if not request.identity_verified_at:
208
+ if len(verified_in_group) > 0:
209
+ logger.debug(
210
+ f"Request {request.id} is a duplicate: it is not verified and duplicating verified request(s) {verified_in_group}."
211
+ )
212
+ return True
213
+
214
+ min_created_at = min(
215
+ (d.created_at for d in duplicates if d.created_at), default=None
216
+ ) or datetime.now(timezone.utc)
217
+ request_created_at = (
218
+ request.created_at
219
+ if request.created_at is not None
220
+ else datetime.now(timezone.utc)
221
+ )
222
+ if request_created_at < min_created_at:
223
+ logger.debug(
224
+ f"Request {request.id} is not a duplicate: it is the first request to be created in the group."
225
+ )
226
+ return False
227
+ logger.debug(
228
+ f"Request {request.id} is a duplicate: it is not verified and is not the first request to be created in the group."
229
+ )
230
+ return True
231
+
232
+ # The request identity is verified.
233
+ if not verified_in_group:
234
+ logger.debug(
235
+ f"Request {request.id} is not a duplicate: it is verified and no other requests in the group are verified."
236
+ )
237
+ return False
238
+
239
+ # If this request is the first with a verified identity, it is not a duplicate.
240
+ min_verified_at = min(
241
+ (d.identity_verified_at for d in duplicates if d.identity_verified_at),
242
+ default=None,
243
+ ) or datetime.now(timezone.utc)
244
+ request_verified_at = (
245
+ request.identity_verified_at
246
+ if request.identity_verified_at is not None
247
+ else datetime.now(timezone.utc)
248
+ )
249
+ if request_verified_at < min_verified_at:
250
+ logger.debug(
251
+ f"Request {request.id} is not a duplicate: it is the first request to be verified in the group."
252
+ )
253
+ return False
254
+ logger.debug(
255
+ f"Request {request.id} is a duplicate: it is verified but not the first request to be verified in the group."
256
+ )
257
+ return True
258
+
259
+ # pylint: disable=too-many-return-statements
260
+ def is_duplicate_request(
261
+ self, request: PrivacyRequest, config: DuplicateDetectionSettings
262
+ ) -> bool:
263
+ """
264
+ Determine if a request is a duplicate request and assigns a duplicate request group id.
265
+
266
+ The hierarchy is:
267
+ 1. Actioned requests: if this request duplicates an actioned request, it is a duplicate.
268
+ 2. Verified identity requests:
269
+ a. if this request has a verified identity:
270
+ - If none of the duplicates have a verified identity, it is not a duplicate.
271
+ - If duplicates have verified identities, but this request is the first with a verified identity, it is not a duplicate.
272
+ b. if this request does not have a verified identity:
273
+ - If no duplicates have a verified identity, and this was the first created request, it is not a duplicate.
274
+ 3. First created request: if this is the first created request in the group, it is not a duplicate.
275
+ 4. If no canonical requests are found (meaning all requests are marked as duplicates), this request is not a duplicate.
276
+ - Could occur if configuration changes and previous requests were already marked as duplicates.
277
+
278
+ Args:
279
+ request: The privacy request to check
280
+ config: Duplicate detection configuration settings
281
+ Returns:
282
+ True if the request is a duplicate request, False otherwise
283
+ """
284
+ duplicates = self.find_duplicate_privacy_requests(request, config)
285
+ rule_version = generate_rule_version(config)
286
+ try:
287
+ dedup_key = self.generate_dedup_key(request, config)
288
+ except ValueError as e:
289
+ logger.debug(f"Request {request.id} is not a duplicate: {e}")
290
+ return False
291
+
292
+ _, duplicate_group = DuplicateGroup.get_or_create(
293
+ db=self.db, data={"rule_version": rule_version, "dedup_key": dedup_key}
294
+ )
295
+ if duplicate_group is None:
296
+ logger.error(
297
+ f"Failed to create duplicate group for request {request.id} with dedup key {dedup_key}"
298
+ )
299
+ return False
300
+ logger.info(
301
+ f"Duplicate group {duplicate_group.id} created for request {request.id} with dedup key {dedup_key}"
302
+ )
303
+ request.update(
304
+ db=self.db, data={"duplicate_request_group_id": duplicate_group.id}
305
+ )
306
+
307
+ # if this is the only request in the group, it is not a duplicate
308
+ if len(duplicates) == 0:
309
+ logger.debug(
310
+ f"Request {request.id} is not a duplicate: no matching requests were found."
311
+ )
312
+ return False
313
+
314
+ if request.status == PrivacyRequestStatus.duplicate:
315
+ logger.warning(
316
+ f"Request {request.id} is a duplicate request that was requeued. This should not happen."
317
+ )
318
+ request.add_error_execution_log(
319
+ db=self.db,
320
+ connection_key=None,
321
+ dataset_name="Duplicate Request Detection",
322
+ collection_name=None,
323
+ message=f"Request {request.id} is a duplicate request that was requeued. This should not happen.",
324
+ action_type=(
325
+ request.policy.get_action_type() # type: ignore [arg-type]
326
+ if request.policy
327
+ else ActionType.access
328
+ ),
329
+ )
330
+ return True
331
+
332
+ # only compare to non-duplicate requests for the following cases
333
+ canonical_requests = [
334
+ duplicate
335
+ for duplicate in duplicates
336
+ if duplicate.status != PrivacyRequestStatus.duplicate
337
+ ]
338
+ # If no non-duplicate requests are found, this request is not a duplicate.
339
+ if len(canonical_requests) == 0:
340
+ logger.debug(
341
+ f"Request {request.id} is not a duplicate: all matching requests have been marked as duplicate requests."
342
+ )
343
+ return False
344
+
345
+ # If any requests in group are actioned, this request is a duplicate.
346
+ actioned_in_group = [
347
+ duplicate
348
+ for duplicate in canonical_requests
349
+ if duplicate.status in ACTIONED_REQUEST_STATUSES
350
+ ]
351
+ if len(actioned_in_group) > 0:
352
+ logger.debug(
353
+ f"Request {request.id} is a duplicate: it is duplicating actioned request(s) {actioned_in_group}."
354
+ )
355
+ return True
356
+ # Check against verified identity rules.
357
+ return self.verified_identity_cases(request, canonical_requests)
@@ -1,6 +1,6 @@
1
1
  from enum import Enum
2
2
  from inspect import Signature, signature
3
- from typing import TYPE_CHECKING, Callable, Dict, List, Union
3
+ from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Union
4
4
 
5
5
  from loguru import logger
6
6
 
@@ -319,7 +319,12 @@ def validate_polling_result_override_function(f: Callable) -> None:
319
319
 
320
320
  # Check return type annotation - handle both direct class and string literals
321
321
  return_annotation = sig.return_annotation
322
- if return_annotation not in (PollingResult, "PollingResult"):
322
+ if return_annotation not in (
323
+ PollingResult,
324
+ "PollingResult",
325
+ Optional[PollingResult],
326
+ "Optional[PollingResult]",
327
+ ):
323
328
  raise InvalidSaaSRequestOverrideException(
324
329
  "Polling result override function must return a PollingResult"
325
330
  )
@@ -226,10 +226,6 @@ SYSTEM_MANAGER_READ = f"{SYSTEM_MANAGER}:{READ}"
226
226
  SYSTEM_MANAGER_UPDATE = f"{SYSTEM_MANAGER}:{UPDATE}"
227
227
  SYSTEM_MANAGER_DELETE = f"{SYSTEM_MANAGER}:{DELETE}"
228
228
 
229
- TAXONOMY_CREATE = f"{TAXONOMY}:{CREATE}"
230
- TAXONOMY_UPDATE = f"{TAXONOMY}:{UPDATE}"
231
- TAXONOMY_DELETE = f"{TAXONOMY}:{DELETE}"
232
-
233
229
  USER_CREATE = f"{USER}:{CREATE}"
234
230
  USER_DELETE = f"{USER}:{DELETE}"
235
231
  USER_READ = f"{USER}:{READ}"
@@ -357,9 +353,6 @@ SCOPE_DOCS = {
357
353
  SYSTEM_MANAGER_READ: "Read systems users can manage",
358
354
  SYSTEM_MANAGER_DELETE: "Delete systems user can manage",
359
355
  SYSTEM_MANAGER_UPDATE: "Update systems user can manage",
360
- TAXONOMY_CREATE: "Create local taxonomy",
361
- TAXONOMY_DELETE: "Delete local taxonomy",
362
- TAXONOMY_UPDATE: "Update local taxonomy",
363
356
  USER_CREATE: "Create users",
364
357
  USER_UPDATE: "Update users",
365
358
  USER_DELETE: "Remove users",
@@ -21,9 +21,9 @@ class LegacyTaxonomyHandler(TaxonomyHandler):
21
21
  def __init__(self, db: Session, taxonomy_type: str) -> None:
22
22
  super().__init__(db, taxonomy_type)
23
23
  self.models = {
24
- "data_categories": DataCategory,
25
- "data_uses": DataUse,
26
- "data_subjects": DataSubject,
24
+ "data_category": DataCategory,
25
+ "data_use": DataUse,
26
+ "data_subject": DataSubject,
27
27
  }
28
28
  if taxonomy_type not in self.models:
29
29
  raise ValueError(
@@ -43,7 +43,7 @@ class TaxonomyService:
43
43
  @overload
44
44
  def get_elements(
45
45
  self,
46
- taxonomy_type: Literal["data_categories"],
46
+ taxonomy_type: Literal["data_category"],
47
47
  active_only: bool = True,
48
48
  parent_key: Optional[str] = None,
49
49
  ) -> List[DataCategory]: ...
@@ -51,7 +51,7 @@ class TaxonomyService:
51
51
  @overload
52
52
  def get_elements(
53
53
  self,
54
- taxonomy_type: Literal["data_uses"],
54
+ taxonomy_type: Literal["data_use"],
55
55
  active_only: bool = True,
56
56
  parent_key: Optional[str] = None,
57
57
  ) -> List[DataUse]: ...
@@ -59,7 +59,7 @@ class TaxonomyService:
59
59
  @overload
60
60
  def get_elements(
61
61
  self,
62
- taxonomy_type: Literal["data_subjects"],
62
+ taxonomy_type: Literal["data_subject"],
63
63
  active_only: bool = True,
64
64
  parent_key: Optional[str] = None,
65
65
  ) -> List[DataSubject]: ...
@@ -75,17 +75,17 @@ class TaxonomyService:
75
75
 
76
76
  @overload
77
77
  def get_element(
78
- self, taxonomy_type: Literal["data_categories"], fides_key: str
78
+ self, taxonomy_type: Literal["data_category"], fides_key: str
79
79
  ) -> Optional[DataCategory]: ...
80
80
 
81
81
  @overload
82
82
  def get_element(
83
- self, taxonomy_type: Literal["data_uses"], fides_key: str
83
+ self, taxonomy_type: Literal["data_use"], fides_key: str
84
84
  ) -> Optional[DataUse]: ...
85
85
 
86
86
  @overload
87
87
  def get_element(
88
- self, taxonomy_type: Literal["data_subjects"], fides_key: str
88
+ self, taxonomy_type: Literal["data_subject"], fides_key: str
89
89
  ) -> Optional[DataSubject]: ...
90
90
 
91
91
  def get_element(self, taxonomy_type: str, fides_key: str) -> Optional[Any]:
@@ -94,17 +94,17 @@ class TaxonomyService:
94
94
 
95
95
  @overload
96
96
  def create_element(
97
- self, taxonomy_type: Literal["data_categories"], element_data: Dict
97
+ self, taxonomy_type: Literal["data_category"], element_data: Dict
98
98
  ) -> DataCategory: ...
99
99
 
100
100
  @overload
101
101
  def create_element(
102
- self, taxonomy_type: Literal["data_uses"], element_data: Dict
102
+ self, taxonomy_type: Literal["data_use"], element_data: Dict
103
103
  ) -> DataUse: ...
104
104
 
105
105
  @overload
106
106
  def create_element(
107
- self, taxonomy_type: Literal["data_subjects"], element_data: Dict
107
+ self, taxonomy_type: Literal["data_subject"], element_data: Dict
108
108
  ) -> DataSubject: ...
109
109
 
110
110
  def create_element(
@@ -144,20 +144,20 @@ class TaxonomyService:
144
144
  @overload
145
145
  def update_element(
146
146
  self,
147
- taxonomy_type: Literal["data_categories"],
147
+ taxonomy_type: Literal["data_category"],
148
148
  fides_key: str,
149
149
  element_data: Dict,
150
150
  ) -> Optional[DataCategory]: ...
151
151
 
152
152
  @overload
153
153
  def update_element(
154
- self, taxonomy_type: Literal["data_uses"], fides_key: str, element_data: Dict
154
+ self, taxonomy_type: Literal["data_use"], fides_key: str, element_data: Dict
155
155
  ) -> Optional[DataUse]: ...
156
156
 
157
157
  @overload
158
158
  def update_element(
159
159
  self,
160
- taxonomy_type: Literal["data_subjects"],
160
+ taxonomy_type: Literal["data_subject"],
161
161
  fides_key: str,
162
162
  element_data: Dict,
163
163
  ) -> Optional[DataSubject]: ...
@@ -244,17 +244,17 @@ class TaxonomyService:
244
244
 
245
245
  @overload
246
246
  def create_or_update_element(
247
- self, taxonomy_type: Literal["data_categories"], element_data: Dict
247
+ self, taxonomy_type: Literal["data_category"], element_data: Dict
248
248
  ) -> DataCategory: ...
249
249
 
250
250
  @overload
251
251
  def create_or_update_element(
252
- self, taxonomy_type: Literal["data_uses"], element_data: Dict
252
+ self, taxonomy_type: Literal["data_use"], element_data: Dict
253
253
  ) -> DataUse: ...
254
254
 
255
255
  @overload
256
256
  def create_or_update_element(
257
- self, taxonomy_type: Literal["data_subjects"], element_data: Dict
257
+ self, taxonomy_type: Literal["data_subject"], element_data: Dict
258
258
  ) -> DataSubject: ...
259
259
 
260
260
  def create_or_update_element(self, taxonomy_type: str, element_data: Dict) -> Any:
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d78390d6134d8328.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d78390d6134d8328.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c2c11809187b9f84.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-ee588a308812715d.js" defer=""></script><script src="/_next/static/chunks/pages/404-eb019192ce498f32.js" defer=""></script><script src="/_next/static/oFlSfw1FVW7HAJICOLe4Y/_buildManifest.js" defer=""></script><script src="/_next/static/oFlSfw1FVW7HAJICOLe4Y/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"oFlSfw1FVW7HAJICOLe4Y","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d78390d6134d8328.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d78390d6134d8328.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-d8c0ff59e7dbc75d.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-2986534ccbf5e4a5.js" defer=""></script><script src="/_next/static/chunks/pages/404-e30ec05084303d6b.js" defer=""></script><script src="/_next/static/wfI6N9ecEPXinU3OlxHLy/_buildManifest.js" defer=""></script><script src="/_next/static/wfI6N9ecEPXinU3OlxHLy/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"wfI6N9ecEPXinU3OlxHLy","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5909],{35287:function(e,t,s){var i=s(24246),a=s(98227),l=s(88038),n=s.n(l);s(27378),t.Z=e=>{let{children:t,title:s,fullHeight:l,fullWidth:r,mainProps:d}=e;return(0,i.jsxs)(a.kCb,{"data-testid":s,direction:"column",height:l?"100vh":"calc(100vh - 48px)",width:r?"100vw":"calc(100vw - 240px)",children:[(0,i.jsxs)(n(),{children:[(0,i.jsxs)("title",{children:["Fides Admin UI - ",s]}),(0,i.jsx)("meta",{name:"description",content:"Privacy Engineering Platform"}),(0,i.jsx)("link",{rel:"icon",href:"/favicon.ico"})]}),(0,i.jsx)(a.kCb,{px:10,py:6,as:"main",overflow:"auto",direction:"column",flex:1,minWidth:0,...d,children:t})]})}},87361:function(e,t,s){var i=s(24246),a=s(98227);t.Z=e=>{let{title:t,text:s,onClose:l}=e;return(0,i.jsxs)(a.Ugi,{backgroundColor:"gray.50",border:"1px solid",borderRadius:"md",justifyContent:"space-between",py:4,pr:6,pl:3,"data-testid":"empty-state",gap:2,position:"relative",children:[l&&(0,i.jsx)(a.Two,{boxSize:5,position:"absolute",right:3,top:3,zIndex:1,cursor:"pointer",p:1,onClick:l}),(0,i.jsx)(a.iid,{alignSelf:"start",color:"minos",mt:.5,flexGrow:0}),(0,i.jsxs)(a.kCb,{direction:"column",gap:2,flexGrow:1,children:[(0,i.jsx)(a.X6q,{fontSize:"md",children:t}),(0,i.jsx)(a.xvT,{fontSize:"sm",color:"gray.600",lineHeight:"5",children:s})]})]})}},97181:function(e,t,s){s.d(t,{d:function(){return o}});var i=s(24246),a=s(98227),l=s(34090),n=s(27378),r=s(46238),d=s(40324);let o=e=>{let{name:t,label:s,labelProps:o,tooltip:c,isRequired:u,layout:p="inline",helperText:m,...x}=e,[h,y,{setValue:v}]=(0,l.U$)(t),j=!!(y.touched&&y.error),[f,g]=(0,n.useState)("");h.value||"tags"!==x.mode&&"multiple"!==x.mode||(h.value=[]),"tags"===x.mode&&"string"==typeof h.value&&(h.value=[h.value]);let _="tags"===x.mode?(e,t)=>e?e.value!==f||h.value.includes(f)?x.optionRender?x.optionRender(e,t):e.label:'Create "'.concat(f,'"'):void 0:x.optionRender||void 0,b=e=>{g(e),x.onSearch&&x.onSearch(e)},q=(e,t)=>{v(e),x.onChange&&x.onChange(e,t)};return"inline"===p?(0,i.jsx)(a.NIc,{isInvalid:j,isRequired:u,children:(0,i.jsxs)(a.rjZ,{templateColumns:s?"1fr 3fr":"1fr",children:[s?(0,i.jsx)(d.__,{htmlFor:x.id||t,...o,children:s}):null,(0,i.jsxs)(a.jqI,{align:"center",children:[(0,i.jsxs)(a.jqI,{vertical:!0,flex:1,className:"mr-2",children:[(0,i.jsx)(a.WPr,{...h,id:x.id||t,"data-testid":"controlled-select-".concat(h.name),...x,optionRender:_,onSearch:"tags"===x.mode?b:void 0,onChange:q,value:h.value||void 0,status:j?"error":void 0}),m&&(0,i.jsx)(a.Q6r,{children:m}),(0,i.jsx)(d.Bc,{isInvalid:j,message:y.error,fieldName:h.name})]}),(0,i.jsx)(r.b,{label:c,className:j?"mt-2 self-start":void 0})]})]})}):(0,i.jsx)(a.NIc,{isInvalid:j,isRequired:u,children:(0,i.jsxs)(a.gCW,{alignItems:"start",children:[(0,i.jsxs)(a.jqI,{align:"center",children:[s?(0,i.jsx)(d.__,{htmlFor:x.id||t,fontSize:"xs",my:0,mr:1,...o,children:s}):null,(0,i.jsx)(r.b,{label:c})]}),(0,i.jsx)(a.WPr,{...h,id:x.id||t,"data-testid":"controlled-select-".concat(h.name),...x,optionRender:_,onSearch:"tags"===x.mode?b:void 0,onChange:q,value:h.value||void 0,status:j?"error":void 0}),m&&(0,i.jsx)(a.Q6r,{style:{marginTop:0},children:m}),(0,i.jsx)(d.Bc,{isInvalid:j,message:y.error,fieldName:h.name})]})})}},9270:function(e,t,s){s.d(t,{S:function(){return l}});var i=s(27378),a=s(36866);let l=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.h)(e),{pageIndex:s,pageSize:l,updatePageIndex:n,updatePageSize:r,pageSizeOptions:d,showSizeChanger:o}=t,c=(0,i.useMemo)(()=>({current:s,pageSize:l,showSizeChanger:o,pageSizeOptions:d.map(String),onChange:n,onShowSizeChange:(e,t)=>{r(t)}}),[s,l,o,d,n,r]);return{...t,paginationProps:c}}},28686:function(e,t,s){s.d(t,{m:function(){return I}});var i=s(24246),a=s(98227),l=s(56141),n=s.n(l),r=s(86677),d=s(27378),o=s(16134),c=s(91317),u=s(18225),p=s(77830),m=s(19904),x=s(28407),h=s(16394),y=s(65735),v=s(32735),j=s(59969),f=s(71784),g=s(45116);let _=e=>{let{label:t,children:s}=e;return(0,i.jsxs)("div",{className:"flex items-center",children:[(0,i.jsx)("div",{className:"shrink-0 grow-0 basis-1/3 pr-2",children:(0,i.jsxs)(a.AntTypography.Text,{className:"text-gray-700",children:[t,":"]})}),(0,i.jsx)("div",{className:"min-w-0 shrink grow text-gray-600",children:s})]})},b=e=>{let{task:t}=e,s=t.request_type===y.k6.ACCESS?y.Us.ACCESS:y.Us.ERASURE,l=f.rE.get(s)||t.request_type;return(0,i.jsxs)("div",{className:"flex flex-col space-y-3","data-testid":"task-details-container",children:[(0,i.jsx)(_,{label:"Name",children:(0,i.jsx)(a.AntTypography.Text,{children:t.name})}),(0,i.jsx)(_,{label:"Description",children:(0,i.jsx)(a.AntTypography.Text,{children:t.description||"-"})}),(0,i.jsx)(_,{label:"Request Type",children:(0,i.jsx)(a.AntTypography.Text,{children:l})}),(0,i.jsx)(_,{label:"Assigned To",children:t.assigned_users&&t.assigned_users.length>0?(0,i.jsx)("div",{className:"flex flex-wrap gap-1","data-testid":"assigned-users-tags",children:t.assigned_users.map(e=>(0,i.jsx)(a.j8w,{"data-testid":"assigned-user-tag-".concat(e.id),children:"".concat(e.first_name||""," ").concat(e.last_name||"").trim()||e.email_address||"Unknown User"},e.id))}):(0,i.jsx)(a.AntTypography.Text,{children:"No one assigned"})}),t.privacy_request.subject_identities&&Object.keys(t.privacy_request.subject_identities).length>0?(0,i.jsx)(_,{label:"Subject identities",children:(0,i.jsx)("div",{className:"flex flex-wrap gap-1",children:Object.entries(t.privacy_request.subject_identities).map(e=>{let[t,s]=e;return(0,i.jsxs)(a.j8w,{children:[t,": ",String(s)]},t)})})}):null,t.privacy_request.custom_fields&&Object.keys(t.privacy_request.custom_fields).length>0?(0,i.jsx)(_,{label:"Custom fields",children:(0,i.jsx)("div",{className:"flex flex-wrap gap-1",children:Object.entries(t.privacy_request.custom_fields).filter(e=>{let[,t]=e;return t}).map(e=>{let[t,s]=e;return(0,i.jsxs)(a.j8w,{children:[t,": ",String(s)]},t)})})}):null]})},q=e=>{let{isOpen:t,onClose:s,task:l}=e,[n,{isLoading:r}]=(0,g.HP)(),[o,c]=(0,d.useState)(""),[u,p]=(0,d.useState)(!1),[m,x]=(0,d.useState)(""),[h,v]=(0,d.useState)([]),j=async()=>{try{await n({privacy_request_id:l.privacy_request.id,manual_field_id:l.manual_field_id,field_value:l.input_type===y.PF.TEXT?o:l.input_type===y.PF.CHECKBOX?u.toString():void 0,comment_text:m||void 0,attachments:h.length>0?h.map(e=>e.originFileObj).filter(Boolean):void 0}).unwrap(),c(""),p(!1),x(""),v([]),s()}catch(e){a.Pg3.error("Failed to complete task. Please try again.")}};return(0,i.jsxs)(a.u_l,{isOpen:t,onClose:s,size:"700px",isCentered:!0,children:[(0,i.jsx)(a.ZAr,{}),(0,i.jsxs)(a.hzk,{maxWidth:"700px","data-testid":"complete-task-modal",children:[(0,i.jsx)(a.xBx,{children:(0,i.jsx)(a.AntTypography.Title,{level:4,children:"Complete Task"})}),(0,i.jsx)(a.fef,{children:(0,i.jsxs)("div",{className:"flex flex-col space-y-6",children:[(0,i.jsx)("div",{children:(0,i.jsx)(b,{task:l})}),(0,i.jsx)(a.htM,{}),(0,i.jsx)("div",{children:(0,i.jsxs)("div",{className:"flex flex-col space-y-4",children:[(()=>{switch(l.input_type){case y.PF.TEXT:return(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("div",{className:"text-sm font-medium text-gray-700",children:"Subject data"}),(0,i.jsx)(a.AntInput.TextArea,{value:o,onChange:e=>c(e.target.value),placeholder:"Enter your response...",rows:4,"data-testid":"complete-modal-text-input"})]});case y.PF.CHECKBOX:return(0,i.jsx)("div",{className:"space-y-2",children:(0,i.jsx)(a.E_O,{checked:u,onChange:e=>p(e.target.checked),"data-testid":"complete-modal-checkbox",children:"The task has been completed"})});default:return(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("div",{className:"text-sm font-medium text-gray-700",children:"Upload Files"}),(0,i.jsx)("div",{children:(0,i.jsx)(a.pMK,{fileList:h,onChange:e=>{let{fileList:t}=e;return v(t)},beforeUpload:()=>!1,"data-testid":"complete-modal-file-upload",multiple:!0,children:(0,i.jsx)(a.wpx,{"data-testid":"complete-modal-upload-button",children:"Click to Upload"})})})]})}})(),(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("div",{className:"text-sm font-medium text-gray-700",children:"Internal comment"}),(0,i.jsx)(a.AntInput.TextArea,{value:m,onChange:e=>x(e.target.value),placeholder:"Add any additional comments...",rows:3,"data-testid":"complete-modal-comment-input"})]})]})})]})}),(0,i.jsx)(a.mzw,{children:(0,i.jsxs)(a.vyj,{children:[(0,i.jsx)(a.wpx,{onClick:()=>{c(""),p(!1),x(""),v([]),s()},disabled:r,"data-testid":"complete-modal-cancel-button",children:"Cancel"}),(0,i.jsx)(a.wpx,{type:"primary",onClick:j,loading:r,disabled:!(()=>{switch(l.input_type){case y.PF.TEXT:return o.trim().length>0;case y.PF.CHECKBOX:return u;default:return h.length>0}})(),"data-testid":"complete-modal-save-button",children:"Save"})]})})]})]})},C=e=>{let{isOpen:t,onClose:s,task:l}=e,[n,{isLoading:r}]=(0,g.DA)(),[o,c]=(0,d.useState)(""),u=async()=>{try{await n({privacy_request_id:l.privacy_request.id,manual_field_id:l.manual_field_id,skip_reason:o}).unwrap(),c(""),s()}catch(e){a.Pg3.error("Failed to skip task. Please try again.")}};return(0,i.jsxs)(a.u_l,{isOpen:t,onClose:s,size:"700px",isCentered:!0,children:[(0,i.jsx)(a.ZAr,{}),(0,i.jsxs)(a.hzk,{maxWidth:"700px","data-testid":"skip-task-modal",children:[(0,i.jsx)(a.xBx,{children:(0,i.jsx)(a.AntTypography.Title,{level:4,children:"Skip Task"})}),(0,i.jsx)(a.fef,{children:(0,i.jsxs)("div",{className:"flex flex-col space-y-6",children:[(0,i.jsx)("div",{children:(0,i.jsx)(b,{task:l})}),(0,i.jsx)(a.htM,{}),(0,i.jsx)("div",{children:(0,i.jsx)("div",{className:"flex flex-col space-y-4",children:(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("div",{className:"text-sm font-medium text-gray-700",children:"Reason for skipping (Required)"}),(0,i.jsx)(a.AntInput.TextArea,{value:o,onChange:e=>c(e.target.value),placeholder:"Please provide a reason for skipping this task...",rows:4,"data-testid":"skip-modal-comment-input"})]})})})]})}),(0,i.jsx)(a.mzw,{children:(0,i.jsxs)(a.vyj,{children:[(0,i.jsx)(a.wpx,{onClick:()=>{c(""),s()},disabled:r,"data-testid":"skip-modal-cancel-button",children:"Cancel"}),(0,i.jsx)(a.wpx,{type:"primary",onClick:u,loading:r,disabled:!o.trim(),danger:!0,"data-testid":"skip-modal-skip-button",children:"Skip Task"})]})})]})]})},k=e=>{let{task:t}=e,s=(0,r.useRouter)(),{isOpen:l,onOpen:n,onClose:d}=(0,a.qY0)(),{isOpen:o,onOpen:c,onClose:u}=(0,a.qY0)(),x=(0,m.Tg)([y.Sh.PRIVACY_REQUEST_READ]);if(t.status!==y.OS.NEW)return null;let h=[{key:"skip",label:"Skip task",onClick:c}];return x&&h.push({key:"go-to-request",label:"Go to request",onClick:()=>{s.push({pathname:p.ld,query:{id:t.privacy_request.id}})}}),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a.vyj,{size:"small",children:[(0,i.jsx)(a.wpx,{type:"default",onClick:n,size:"small",children:"Complete"}),(0,i.jsx)(a.S0p,{menu:{items:h},trigger:["click"],placement:"bottomRight",overlayStyle:{minWidth:120},children:(0,i.jsx)(a.wpx,{size:"small",icon:(0,i.jsx)(a.PJP.r43,{}),"aria-label":"More actions"})})]}),(0,i.jsx)(q,{isOpen:l,onClose:d,task:t}),(0,i.jsx)(C,{isOpen:o,onClose:u,task:t})]})},S={[y.OS.NEW]:{color:a.tAb.INFO,label:"New"},[y.OS.COMPLETED]:{color:a.tAb.SUCCESS,label:"Completed"},[y.OS.SKIPPED]:{color:a.tAb.MARBLE,label:"Skipped"}},w=[{text:"New",value:y.OS.NEW},{text:"Completed",value:y.OS.COMPLETED},{text:"Skipped",value:y.OS.SKIPPED}],E=[{text:"Access",value:y.k6.ACCESS},{text:"Erasure",value:y.k6.ERASURE}],R=e=>{let{systemFilters:t,userFilters:s,onUserClick:l,currentFilters:n,hasAccessToAllTasks:r}=e,d=[{title:"Task name",dataIndex:"name",key:"name",minWidth:100,render:e=>(0,i.jsx)(a.AntTypography.Text,{ellipsis:{tooltip:e},children:e})},{title:"Status",dataIndex:"status",key:"status",width:110,render:e=>(0,i.jsx)(a.j8w,{color:S[e].color,"data-testid":"manual-task-status-tag",children:S[e].label}),filters:w,filterMultiple:!1},{title:"System",dataIndex:["system","name"],key:"system_name",minWidth:100,render:e=>(0,i.jsx)(a.AntTypography.Text,{ellipsis:{tooltip:e},children:e}),filters:t,filterMultiple:!1},{title:"Type",dataIndex:"request_type",key:"request_type",width:80,render:e=>{let t=e===y.k6.ACCESS?y.Us.ACCESS:y.Us.ERASURE,s=f.rE.get(t)||e;return(0,i.jsx)(a.AntTypography.Text,{ellipsis:{tooltip:s},children:s})},filters:E,filterMultiple:!1},{title:"Assigned to",dataIndex:"assigned_users",key:"assigned_users",minWidth:100,render:e=>{if(!e||0===e.length)return(0,i.jsx)(a.AntTypography.Text,{children:"-"});let t=e.map(e=>({label:(0,h.gJ)(e),value:e.id})),s=e.map(e=>e.id);return(0,i.jsx)(a.d3V,{value:s,options:t,readonly:!0,onTagClick:e=>l(String(e))})},filters:s,filterMultiple:!1,defaultFilteredValue:n.assignedUsers?[n.assignedUsers]:void 0},{title:"Days left",dataIndex:["privacy_request","days_left"],key:"days_left",width:90,render:e=>(0,i.jsx)(j.Z,{daysLeft:e||0,includeText:!1,status:y.q2.PENDING})},{title:"Subject identity",dataIndex:["privacy_request","subject_identities"],key:"subject_identities",minWidth:120,render:e=>{if(!e)return(0,i.jsx)(a.AntTypography.Text,{children:"-"});let t=e.email||e.phone_number||"";return(0,i.jsx)(a.AntTypography.Text,{ellipsis:{tooltip:t},children:t})}},{title:"Actions",key:"actions",width:145,render:(e,t)=>(0,i.jsx)(k,{task:t})}];return r?d:d.filter(e=>"assigned_users"!==e.key)};var A=s(812),T=()=>{let e=(0,a.pmc)(),[t,{isFetching:s}]=(0,g.zp)();return{downloadReport:async s=>{let i=await t(s);if(i.isError)e({status:"error",description:(0,A.e$)(i.error,"A problem occurred while generating your manual tasks report. Please try again.")});else{let t=document.createElement("a"),s=new Blob([i.data],{type:"text/csv"}),a=window.URL.createObjectURL(s);t.href=a,t.download="manual-tasks-report.csv",t.click(),t.remove(),window.URL.revokeObjectURL(a),e({status:"success",description:"Successfully downloaded Manual Tasks report."})}},isDownloadingReport:s}};let I=()=>{let e=(0,r.useRouter)(),t=(0,o.C)(c.dy),[s,l]=(0,d.useState)(1),[j,f]=(0,d.useState)(25),_=(0,m.Tg)([y.Sh.MANUAL_FIELD_READ_ALL]),b=e.query.privacy_request_id||void 0,q=(0,d.useMemo)(()=>{let e={};return(null==t?void 0:t.id)&&!b&&(e.assignedUsers=t.id),b&&"string"==typeof b&&(e.privacyRequestId=b),e},[null==t?void 0:t.id,b]),[C,k]=(0,d.useState)(q),{data:S,isLoading:w,isFetching:E}=(0,g.Ym)({page:s,size:j,status:C.status,system_name:C.systemName,request_type:C.requestType,assigned_user_id:C.assignedUsers,privacy_request_id:C.privacyRequestId}),{downloadReport:A,isDownloadingReport:I}=T(),N=async()=>{await A({status:C.status,system_name:C.systemName,request_type:C.requestType,assigned_user_id:C.assignedUsers,privacy_request_id:C.privacyRequestId})},{data:P}=(0,g.Ym)({page:1,size:1}),{items:O,total:U}=(0,d.useMemo)(()=>S||{items:[],total:0,pages:0,filter_options:{assigned_users:[],systems:[]}},[S]),D=(0,d.useMemo)(()=>(null==P?void 0:P.filter_options)||{assigned_users:[],systems:[]},[P]),z=R({systemFilters:(0,d.useMemo)(()=>{var e;return(null==D?void 0:null===(e=D.systems)||void 0===e?void 0:e.map(e=>({text:e.name,value:e.name})))||[]},[null==D?void 0:D.systems]),userFilters:(0,d.useMemo)(()=>{var e;let s=(null==D?void 0:null===(e=D.assigned_users)||void 0===e?void 0:e.map(e=>({text:(0,h.gJ)(e),value:e.id})))||[];return(null==t?void 0:t.id)&&!s.some(e=>e.value===t.id)&&s.push({text:(0,h.gJ)(t,{fallbackToId:!0}),value:t.id}),s},[null==D?void 0:D.assigned_users,t]),onUserClick:t=>{e.push({pathname:p.fw,query:{id:t}})},currentFilters:C,hasAccessToAllTasks:_}),F=(0,d.useMemo)(()=>n()(C,q),[C,q]);return w?(0,i.jsx)(u.Z,{}):(0,i.jsxs)("div",{className:"mt-2 space-y-4",children:[(0,i.jsxs)(a.kCb,{gap:3,align:"center",justify:"space-between",className:"mb-4",children:[(0,i.jsx)(x.H,{globalFilter:C.privacyRequestId||"",setGlobalFilter:e=>{let t={...C};e&&e.trim()?t.privacyRequestId=e.trim():delete t.privacyRequestId,k(t),l(1)},placeholder:"Search by privacy request ID",testid:"privacy-request-id-filter"}),(0,i.jsx)(a.wpx,{"aria-label":"Export manual tasks as CSV","data-testid":"export-manual-tasks-btn",icon:(0,i.jsx)(a.PJP.UWx,{}),loading:I,onClick:N})]}),(0,i.jsx)(a.V5H,{columns:z,dataSource:O,rowKey:e=>"".concat(e.privacy_request.id,"-").concat(e.manual_field_id),pagination:{current:s,pageSize:j,pageSizeOptions:v.VZ,total:U||0,showTotal:(e,t)=>"".concat(t[0],"-").concat(t[1]," of ").concat(e," items"),onChange:(e,t)=>{l(e),t!==j&&(f(t),l(1))}},onChange:(e,t)=>{let s={privacyRequestId:C.privacyRequestId};t.status&&([s.status]=t.status),t.system_name&&([s.systemName]=t.system_name),t.request_type&&([s.requestType]=t.request_type),t.assigned_users&&([s.assignedUsers]=t.assigned_users),k(s),l(1)},locale:{emptyText:F?(0,i.jsx)("div",{"data-testid":"empty-state-current-user",className:"my-4",children:(0,i.jsxs)(a.AntTypography.Paragraph,{children:["You have no tasks assigned."," ",_&&(0,i.jsx)("span",{children:'You can modify the "Assigned to" column filter to view tasks assigned to other users.'})]})}):(0,i.jsx)("div",{"data-testid":"empty-state",className:"my-4",children:"No results found."})},loading:w||E,scroll:{scrollToFirstRowOnChange:!0},tableLayout:"fixed",className:"[&_th]:!break-normal"})]})}},98855:function(e,t,s){s.d(t,{q:function(){return m}});var i=s(24246),a=s(98227),l=s(58452),n=s(19904),r=s(7426),d=s(57526),o=s(66548),c=s(45489),u=s(65735),p=s(42478);let m=e=>{var t;let{subjectRequest:s,...m}=e,x=(0,a.qY0)(),h=(0,a.qY0)(),y=(0,a.qY0)(),v=(0,a.qY0)(),{handleApproveRequest:j,handleDenyRequest:f,handleDeleteRequest:g,handleFinalizeRequest:_,isLoading:b}=(0,c.Z)({subjectRequest:s}),{data:q}=(0,r.tB)({api_set:!1}),{data:C}=(0,p.JE)(),k=null==q?void 0:null===(t=q.notifications)||void 0===t?void 0:t.send_request_completion_notification;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a.Ugi,{...m,children:["pending"!==s.status?null:(0,i.jsx)(a.wpx,{title:"Approve","aria-label":"Approve",icon:(0,i.jsx)(a.PJP.MCw,{}),onClick:x.onOpen,loading:b,disabled:b,"data-testid":"privacy-request-approve-btn",size:"small"}),"pending"!==s.status?null:(0,i.jsx)(a.wpx,{title:"Deny","aria-label":"Deny",icon:(0,i.jsx)(a.PJP.x8P,{}),onClick:h.onOpen,loading:b,disabled:b,"data-testid":"privacy-request-deny-btn",size:"small"}),s.status!==u.q2.REQUIRES_MANUAL_FINALIZATION?null:(0,i.jsx)(n.ZP,{scopes:[u.Sh.PRIVACY_REQUEST_REVIEW],children:(0,i.jsx)(a.wpx,{title:"Finalize","aria-label":"Finalize",icon:(0,i.jsx)(a.PJP.Ok8,{}),onClick:v.onOpen,loading:b,disabled:b,"data-testid":"privacy-request-finalize-btn",size:"small"})}),(0,i.jsx)(n.ZP,{scopes:[u.Sh.PRIVACY_REQUEST_DELETE],children:(0,i.jsx)(a.wpx,{title:"Delete","aria-label":"Delete",icon:(0,i.jsx)(a.PJP.ZNm,{size:14}),onClick:y.onOpen,loading:b,disabled:b,"data-testid":"privacy-request-delete-btn",size:"small"})})]}),(0,i.jsx)(a.h_i,{children:(0,i.jsx)(d.Z,{isOpen:x.isOpen,isLoading:b,onClose:x.onClose,onApproveRequest:j,subjectRequest:s})}),(0,i.jsx)(a.h_i,{children:(0,i.jsx)(o.Z,{isOpen:h.isOpen,onClose:h.onClose,onDenyRequest:f})}),(0,i.jsx)(l.Z,{isOpen:y.isOpen,onClose:y.onClose,onConfirm:g,message:(0,i.jsx)(a.xvT,{children:"You are about to permanently delete the privacy request. Are you sure you would like to continue?"})}),(0,i.jsx)(l.Z,{isOpen:v.isOpen,onClose:v.onClose,onConfirm:()=>{_(),v.onClose()},title:"Finalize privacy request",message:(0,i.jsxs)(a.xvT,{children:['You are about to finalize this privacy request. The status will be updated to "Complete"',k&&(null==C?void 0:C.service_type)?" and the requesting user will be notified":"",". Would you like to continue?"]})})]})}},86291:function(e,t,s){s.d(t,{Z:function(){return S}});var i=s(24246),a=s(98227),l=s(27378),n=s(812),r=s(87361),d=s(46628),o=s(32885),c=s(90867),u=s(34090),p=s(55484),m=s(40324);let x=(e,t)=>null==t?void 0:t.find(t=>t.policy_key===e),h=e=>{var t,s;if(!e)return p.Ry().shape({policy_key:p.Z_().required().label("Request type")});let i=e.custom_privacy_request_fields?Object.entries(e.custom_privacy_request_fields).filter(e=>{let[,t]=e;return"field_type"in t&&"location"!==t.field_type}).map(e=>{let[t,s]=e;return{[t]:p.Ry().shape({value:s.required&&!s.hidden?p.Z_().required().label(s.label):p.Z_().nullable()})}}).reduce((e,t)=>({...e,...t}),{}):{};return p.Ry().shape({policy_key:p.Z_().required().label("Request type"),identity:p.Ry().shape({email:(null===(t=e.identity_inputs)||void 0===t?void 0:t.email)==="required"?p.Z_().email().required().label("Email address"):p.Z_().nullable(),phone_number:(null===(s=e.identity_inputs)||void 0===s?void 0:s.phone)==="required"?p.Z_().matches(/^\+?[1-9]\d{1,14}$/,"Phone number must be formatted correctly (e.g. 15555555555)").required().label("Phone number"):p.Z_().matches(/^\+?[1-9]\d{1,14}$/,"Phone number must be formatted correctly (e.g. 15555555555)").nullable()}),custom_privacy_request_fields:p.Ry().shape(i)})};var y=s(97181);let v={is_verified:!1,policy_key:"",identity:{}},j=e=>{let{identityInputs:t}=e;return t?(0,i.jsxs)(i.Fragment,{children:[t.email?(0,i.jsx)(m.j0,{name:"identity.email",label:"User email address",isRequired:"required"===t.email,variant:"stacked"}):null,t.phone?(0,i.jsx)(m.j0,{name:"identity.phone_number",label:"User phone number",isRequired:"required"===t.phone,variant:"stacked"}):null]}):null},f=e=>{var t;let{label:s,required:l,name:n}=e,[r,d,o]=(0,u.U$)(e),c=!!(d.touched&&d.error),{setValue:p}=o,{value:m}={...r,value:null!==(t=r.value)&&void 0!==t?t:""};return(0,i.jsx)(a.PPS.Item,{label:s,name:n,required:null!=l?l:void 0,layout:"vertical",validateStatus:c?"error":void 0,children:(0,i.jsx)(a.AOh,{value:m,onChange:e=>{e&&p(e)}},n)})},g=e=>{let{customFieldInputs:t}=e;if(!t)return null;let s=Object.entries(t);return(0,i.jsx)(i.Fragment,{children:s.map(e=>{let[t,s]=e;return"field_type"in s&&"location"===s.field_type?(0,i.jsx)(f,{name:t,label:s.label,required:!!s.required},t):(0,i.jsx)(m.j0,{name:"custom_privacy_request_fields.".concat(t,".value"),label:s.label,isRequired:!!s.required,variant:"stacked"},t)})})},_=e=>{let{onSubmit:t,onCancel:s,privacyCenterUrl:l}=e,{onCopy:n}=(0,a.VPI)(""),r=(0,a.pmc)();return(0,i.jsx)(u.J9,{initialValues:{identity:{email:""}},onSubmit:e=>{n("".concat(l,"?email=").concat(encodeURIComponent(e.identity.email))),t(e),r({status:"success",description:"DSR Link Copied!"})},validationSchema:()=>p.Ry().shape({identity:p.Ry().shape({email:p.Z_().email().required().label("Email Address")})}),children:e=>{let{dirty:t,isValid:l}=e;return(0,i.jsx)(u.l0,{children:(0,i.jsxs)(a.Kqy,{spacing:6,mb:2,children:[(0,i.jsx)(j,{identityInputs:{email:"required"}}),(0,i.jsxs)("div",{className:"flex gap-4 self-end",children:[(0,i.jsx)(a.wpx,{onClick:s,children:"Cancel"}),(0,i.jsx)(a.wpx,{htmlType:"submit",type:"primary",disabled:!t||!l,"data-testid":"submit-btn",icon:(0,i.jsx)(a.xPt,{}),children:"Copy"})]})]})})}})};var b=e=>{let{onSubmit:t,onCancel:s}=e,{data:l}=(0,c.xv)();return(0,i.jsx)(u.J9,{initialValues:v,onSubmit:t,validationSchema:()=>(0,p.Vo)(e=>h(x(e.policy_key,null==l?void 0:l.actions))),children:e=>{var t;let{values:n,dirty:r,isValid:d,isSubmitting:o,setFieldValue:c}=e,p=x(n.policy_key,null==l?void 0:l.actions);return(0,i.jsx)(u.l0,{children:(0,i.jsxs)(a.Kqy,{spacing:6,mb:2,children:[(0,i.jsx)(y.d,{name:"policy_key",label:"Request type",options:null!==(t=null==l?void 0:l.actions.map(e=>({label:e.title,value:e.policy_key})))&&void 0!==t?t:[],onChange:e=>{let t=x(e,null==l?void 0:l.actions);if(!(null==t?void 0:t.custom_privacy_request_fields)){c("custom_privacy_request_fields",void 0);return}c("custom_privacy_request_fields",Object.entries(t.custom_privacy_request_fields).map(e=>{let[t,s]=e;return{[t]:{label:s.label,value:s.default_value}}}).reduce((e,t)=>({...e,...t}),{}))},layout:"stacked",isRequired:!0}),(0,i.jsx)(j,{identityInputs:null==p?void 0:p.identity_inputs}),(0,i.jsx)(g,{customFieldInputs:null==p?void 0:p.custom_privacy_request_fields}),(0,i.jsx)(m.Xl,{name:"is_verified",label:"I confirm that I have verified this user information"}),(0,i.jsxs)("div",{className:"flex gap-4 self-end",children:[(0,i.jsx)(a.wpx,{onClick:s,children:"Cancel"}),(0,i.jsx)(a.wpx,{htmlType:"submit",type:"primary",disabled:!n.is_verified||!r||!d,loading:o,"data-testid":"submit-btn",children:"Create"})]})]})})}})},q=s(31883);let C=e=>{let{isOpen:t,onClose:s}=e,[l]=(0,c.M6)(),o=(0,a.pmc)(),u=async e=>{let{is_verified:t,...i}=e,a=i.custom_privacy_request_fields?Object.entries(i.custom_privacy_request_fields).map(e=>{let[t,s]=e;return s.value?{[t]:s}:{}}).reduce((e,t)=>({...e,...t}),{}):void 0,r={...i,custom_privacy_request_fields:a},c=await l([r]);(0,q.D4)(c)?o((0,d.Vo)((0,n.e$)(c.error,"An error occurred while creating this privacy request. Please try again"))):o((0,d.t5)("Privacy request created")),s()};return(0,i.jsxs)(a.u_l,{isOpen:t,onClose:s,size:"2xl",isCentered:!0,children:[(0,i.jsx)(a.ZAr,{}),(0,i.jsxs)(a.hzk,{"data-testid":"submit-request-modal",maxHeight:"80%",overflowY:"auto",children:[(0,i.jsx)(a.xBx,{children:"Create privacy request"}),(0,i.jsx)(a.fef,{children:(0,i.jsxs)(a.Kqy,{spacing:4,children:[(0,i.jsx)(r.Z,{title:"Warning: You are bypassing identity verification",text:"You are bypassing Fides' built-in identity verification step. Please ensure that you are only entering information on behalf of a verified and approved user's privacy request."}),(0,i.jsx)(b,{onSubmit:u,onCancel:()=>s()})]})})]})]})},k=e=>{let{isOpen:t,onClose:s,privacyCenterUrl:l}=e;return(0,i.jsxs)(a.u_l,{size:"md",isOpen:t,onClose:s,children:[(0,i.jsx)(a.ZAr,{}),(0,i.jsxs)(a.hzk,{children:[(0,i.jsx)(a.xBx,{children:"Create a Privacy Request Link"}),(0,i.jsxs)(a.fef,{children:[(0,i.jsx)(a.Kqy,{spacing:4}),(0,i.jsx)(_,{privacyCenterUrl:l,onSubmit:s,onCancel:s})]})]})]})};var S=()=>{var e;let[t,s]=(0,l.useState)("closed"),n=()=>s("closed"),{data:r}=(0,o.Vh)(),d=(null!==(e=null==r?void 0:r.privacy_center_url)&&void 0!==e?e:"").trim(),c=d.length>0;return(0,i.jsxs)(i.Fragment,{children:[c?(0,i.jsx)(k,{isOpen:"create-link"===t,onClose:n,privacyCenterUrl:d}):null,(0,i.jsx)(C,{isOpen:"submit-request"===t,onClose:n}),(0,i.jsx)(a.S0p.Button,{type:"primary",onClick:()=>s("submit-request"),"data-testid":"submit-request-btn",menu:{items:[{label:"Create request link",key:"create-request-link",icon:(0,i.jsx)(a.xPt,{}),onClick:()=>s("create-link"),disabled:!c}]},icon:(0,i.jsx)(a.v4q,{}),children:"Create request"})]})}},71784:function(e,t,s){s.d(t,{DE:function(){return r},I3:function(){return a},kN:function(){return n},rE:function(){return l}});var i=s(65735);let a=[...new Map([[i.q2.APPROVED,"Approved"],[i.q2.AWAITING_EMAIL_SEND,"Awaiting email send"],[i.q2.CANCELED,"Canceled"],[i.q2.COMPLETE,"Completed"],[i.q2.DENIED,"Denied"],[i.q2.ERROR,"Error"],[i.q2.IN_PROCESSING,"In progress"],[i.q2.PENDING,"New"],[i.q2.PAUSED,"Paused"],[i.q2.IDENTITY_UNVERIFIED,"Unverified"],[i.q2.REQUIRES_INPUT,"Requires input"],[i.q2.REQUIRES_MANUAL_FINALIZATION,"Requires finalization"]])].map(e=>{let[t,s]=e;return{label:s,value:t}}),l=new Map([[i.Us.ACCESS,"Access"],[i.Us.ERASURE,"Erasure"],[i.Us.CONSENT,"Consent"],[i.Us.UPDATE,"Update"]]),n=[...l].map(e=>{let[t,s]=e;return{label:s,value:t}}),r={local:"local",s3:"s3",gcs:"gcs"}},88152:function(e,t,s){s.d(t,{Y:function(){return o}});var i=s(24246),a=s(98227),l=s(27378),n=s(17245),r=s(65735),d=s(90867);let o=()=>{let{errorAlert:e}=(0,n.VY)(),[t,s]=(0,l.useState)(!1),[o,c]=(0,l.useState)({count:0,total:0}),[u,p]=(0,l.useState)(!0),m=r.q2.ERROR,{data:x}=(0,d.tE)(),{data:h}=(0,d.QA)({status:[m]},{pollingInterval:15e3,skip:u});return(0,l.useEffect)(()=>{p(!(x&&x.notify_after_failures>0))},[x]),(0,l.useEffect)(()=>{let e=(null==h?void 0:h.total)||0;e>=((null==x?void 0:x.notify_after_failures)||0)&&e>o.total?(c({count:e-o.total,total:e}),s(!0)):s(!1)},[null==h?void 0:h.total,null==x?void 0:x.notify_after_failures,o.total]),{processing:()=>{t&&e((0,i.jsxs)(a.xuv,{children:["DSR automation has failed for"," ",(0,i.jsx)(a.xvT,{as:"span",fontWeight:"semibold",children:o.count})," ","privacy request(s). Please review the event log for further details."]}),void 0,{containerStyle:{maxWidth:"max-content"},duration:null,id:"dsrErrorAlert"})}}}},49529:function(e,t,s){var i=s(98227),a=s(812),l=s(90867);t.Z=()=>{let e=(0,i.pmc)(),[t,{isFetching:s}]=(0,l.ZU)();return{downloadReport:async s=>{let i=await t(s);if(i.isError)e({status:"error",description:(0,a.e$)(i.error,"A problem occurred while generating your privacy request report. Please try again.")});else{let t=document.createElement("a"),s=new Blob([i.data],{type:"text/csv"}),a=window.URL.createObjectURL(s);t.href=a,t.download="privacy-request-report.csv",t.click(),t.remove(),window.URL.revokeObjectURL(a),e({status:"success",description:"Successfully downloaded Privacy Request report."})}},isDownloadingReport:s}}},31883:function(e,t,s){s.d(t,{Bw:function(){return i.Bw},D4:function(){return i.D4}});var i=s(19043)}}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7245],{17245:function(e,n,t){"use strict";t.d(n,{HK:function(){return s},VY:function(){return i.V},pI:function(){return d},h0:function(){return r.h},Rx:function(){return f},rK:function(){return h}});var r=t(36866),i=t(84306),o=t(812);let s=()=>{let{errorAlert:e}=(0,i.V)();return{handleError:n=>{let t="An unexpected error occurred. Please try again.";(0,o.Ot)(n)?t=n.data.detail:(0,o.tB)(n)&&(t=n.data.detail[0].msg),e(t)}}};var l=t(27378),u=t(20682),a=t(41337),c=t(65735);let d=e=>{let{data:n}=(0,u.$I)({}),t=(0,l.useMemo)(()=>(null==n?void 0:n.items)||[],[n]);return(0,l.useMemo)(()=>{var n;if(!e)return(0,a.Br)("");if(e.connection_type===c.Rj.SAAS&&(null===(n=e.saas_config)||void 0===n?void 0:n.type)){let n=t.find(n=>{var t;return n.identifier===(null===(t=e.saas_config)||void 0===t?void 0:t.type)});if(n)return(0,a.PT)(n)}return(0,a.El)(e)},[e,t])};var p=t(40431);let v=()=>({search:p.Oi.withDefault("")}),f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{defaultSearchQuery:n,onSearchChange:t,disableUrlState:r=!1}=e,[i,o]=(0,l.useState)({searchQuery:n||void 0}),s=(0,l.useMemo)(()=>r?null:v(),[r]),[u,a]=(0,p.XI)(null!=s?s:{},{history:"push"}),c=(0,l.useMemo)(()=>r?i:{searchQuery:u.search||n||void 0},[r,i,u,n]),d=(0,l.useCallback)(e=>{r?o({searchQuery:e||void 0}):a({search:e||null})},[r,a]),f=(0,l.useCallback)(()=>{r?o({searchQuery:n||void 0}):a({search:null})},[r,n,a]);return(0,l.useEffect)(()=>{t&&t(c)},[c,t]),{...c,updateSearch:d,resetSearch:f,searchProps:{value:c.searchQuery||"",onChange:d,onClear:()=>d("")}}},g=e=>({sortKey:e?(0,p.jx)([...e]):p.Oi.withDefault(""),sortOrder:(0,p.km)(["ascend","descend"])}),h=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{defaultSortKey:n,defaultSortOrder:t,onSortingChange:r,validColumns:i,disableUrlState:o=!1}=e,[s,u]=(0,l.useState)({sortKey:n,sortOrder:t}),a=(0,l.useMemo)(()=>o?null:g(i),[o,i]),[c,d]=(0,p.XI)(null!=a?a:{},{history:"push"}),v=(0,l.useMemo)(()=>{var e;return o?s:{sortKey:c.sortKey||n,sortOrder:null!==(e=c.sortOrder)&&void 0!==e?e:t}},[o,s,c,n,t]),f=(0,l.useCallback)((e,n)=>{o?u({sortKey:e,sortOrder:n}):d({sortKey:e?String(e):null,sortOrder:null!=n?n:null})},[o,d]),h=(0,l.useCallback)(()=>{o?u({sortKey:n,sortOrder:t}):d({sortKey:null,sortOrder:null})},[o,n,t,d]);return(0,l.useEffect)(()=>{r&&r(v)},[v,r]),{...v,updateSorting:f,resetSorting:h,sortingProps:{sortDirections:["ascend","descend"],defaultSortOrder:v.sortOrder,sortedInfo:v.sortKey?{field:v.sortKey,order:v.sortOrder}:void 0}}}},84306:function(e,n,t){"use strict";t.d(n,{V:function(){return o}});var r=t(24246),i=t(98227);let o=()=>{let e=(0,i.pmc)();return{errorAlert:(n,t,o)=>{let s={...o,position:(null==o?void 0:o.position)||"top",render:e=>{let{onClose:o}=e;return(0,r.jsxs)(i.bZj,{alignItems:"normal",status:"error","data-testid":"error-alert",children:[(0,r.jsx)(i.zMQ,{}),(0,r.jsxs)(i.xuv,{children:[t&&(0,r.jsx)(i.CdC,{children:t}),(0,r.jsx)(i.XaZ,{children:n})]}),(0,r.jsx)(i.PZ7,{onClick:o,position:"relative",right:0,size:"sm",top:-1})]})}};(null==o?void 0:o.id)&&e.isActive(o.id)?e.update(o.id,s):e(s)},successAlert:(n,t,o)=>{let s={...o,position:(null==o?void 0:o.position)||"top",render:e=>{let{onClose:o}=e;return(0,r.jsxs)(i.bZj,{alignItems:"normal",status:"success",variant:"subtle","data-testid":"success-alert",children:[(0,r.jsx)(i.zMQ,{}),(0,r.jsxs)(i.xuv,{children:[t&&(0,r.jsx)(i.CdC,{children:t}),(0,r.jsx)(i.XaZ,{children:n})]}),(0,r.jsx)(i.PZ7,{onClick:o,position:"relative",right:0,size:"sm",top:-1})]})}};(null==o?void 0:o.id)&&e.isActive(o.id)?e.update(o.id,s):e(s)}}}},36866:function(e,n,t){"use strict";t.d(n,{h:function(){return a}});var r=t(40431),i=t(27378),o=t(55484);let s=(0,r.jo)({parse(e){let n=parseInt(e,10);try{return o.Rx().integer().positive().validateSync(n),n}catch(e){return null}},serialize:e=>e.toString()});var l=t(32735);let u=function(){var e,n;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.pageQueryKey||"page",o=t.sizeQueryKey||"size";return{[i]:s.withDefault(l.Ej),[o]:t.pageSizeOptions?(0,r.bJ)(t.pageSizeOptions).withDefault(null!==(e=t.pageSize)&&void 0!==e?e:l.L8):s.withDefault(null!==(n=t.pageSize)&&void 0!==n?n:l.L8)}},a=function(){var e,n;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{defaultPageSize:o=l.L8,pageSizeOptions:s,showSizeChanger:a=!0,pageQueryKey:c="page",sizeQueryKey:d="size",disableUrlState:p=!1}=t,v=null!=s?s:l.VZ,[f,g]=(0,i.useState)({pageIndex:l.Ej,pageSize:o}),h=(0,i.useMemo)(()=>p?null:u({pageSize:o,pageSizeOptions:s,pageQueryKey:c,sizeQueryKey:d}),[o,s,c,d,p]),[y,m]=(0,r.XI)(null!=h?h:{},{history:"push"}),x=p?f:{pageIndex:null!==(e=y[c])&&void 0!==e?e:l.Ej,pageSize:null!==(n=y[d])&&void 0!==n?n:o};return{...x,updatePageIndex:e=>{p?g(n=>({...n,pageIndex:e})):m({[c]:e})},updatePageSize:e=>{p?g({pageIndex:e!==x.pageSize?l.Ej:x.pageIndex,pageSize:e}):m({[c]:e!==x.pageSize?l.Ej:x.pageIndex,[d]:e})},resetPagination:()=>{p?g({pageIndex:l.Ej,pageSize:o}):m({[c]:l.Ej,[d]:o})},nextPage:()=>{p?g(e=>({...e,pageIndex:e.pageIndex+1})):m(e=>({[c]:e[c]+1,[d]:e[d]}))},previousPage:()=>{p?g(e=>({...e,pageIndex:e.pageIndex-1})):m(e=>({[c]:e[c]-1,[d]:e[d]}))},pageSizeOptions:v,showSizeChanger:a}}},41337:function(e,n,t){"use strict";t.d(n,{AZ:function(){return g},Br:function(){return y},El:function(){return f},PT:function(){return h},hY:function(){return i}});var r,i,o=t(24246),s=t(98227),l=t(27378),u=t(88337),a=t(16394),c=t(9934),d=t.n(c),p=t(14746);(r=i||(i={})).CONNECTION="connection",r.SYSTEM="system",r.STATIC="static";let v=e=>{var n,t,r,i,o,s;return{kind:"connection",connectionType:e.connection_type,name:null!==(r=e.name)&&void 0!==r?r:null,key:null!==(i=e.key)&&void 0!==i?i:null,saasType:null!==(o=null===(n=e.saas_config)||void 0===n?void 0:n.type)&&void 0!==o?o:null,websiteUrl:null!==(s=null===(t=e.secrets)||void 0===t?void 0:t.url)&&void 0!==s?s:null}},f=e=>v(e),g=e=>v(e),h=e=>{var n;return{kind:"system",identifier:e.identifier,humanReadable:e.human_readable,encodedIcon:null!==(n=e.encoded_icon)&&void 0!==n?n:null}},y=e=>({kind:"static",key:e}),m=e=>e===u.R.WEBSITE||e===u.R.TEST_WEBSITE,x=e=>{if(e)return p.LN.get(e)},S=e=>{if(!e)return;if(e.startsWith("data:")||e.startsWith("http"))return e;let n=e.endsWith(".svg")?e:"".concat(e,".svg");return p.Ny+n},j=(e,n)=>{if("system"===e.kind){if(e.encodedIcon)return"data:image/svg+xml;base64,".concat(e.encodedIcon);let n=[...p.iW].find(n=>{let[t]=n;return t.toLowerCase()===e.identifier.toLowerCase()});return n?p.Ny+n[1]:void 0}if("connection"===e.kind){if(m(e.connectionType)){if(!e.websiteUrl)return;let t=(0,a.ge)(e.websiteUrl);return(0,a.Ms)(t,(null!=n?n:32)*2)}if(e.connectionType===u.R.SAAS){let n=x(e.saasType);if(n)return p.Ny+n}let t=p.iW.get(e.connectionType);return t?p.Ny+t:void 0}if(e.key)return S(e.key)},I=e=>{if("connection"===e.kind){var n,t;return null!==(t=null!==(n=e.name)&&void 0!==n?n:e.key)&&void 0!==t?t:"connection"}return"system"===e.kind?e.humanReadable:e.key||"connection"},k=(e,n)=>"connection"===e.kind&&m(e.connectionType)?(0,o.jsx)(s.PJP.huD,{size:n}):(0,o.jsx)(s.PJP.ehp,{size:n});n.ZP=e=>{let{data:n,size:t,...r}=e,i=(0,l.useMemo)(()=>j(n,t),[n,t]),u=(0,l.useMemo)(()=>k(n,null!=t?t:32),[n,t]),a=(0,l.useMemo)(()=>I(n),[n]);return n?(0,o.jsx)(s.t3Z,{shape:"square",src:i,size:null!=t?t:32,icon:u,alt:a,...r,className:r.className?"".concat(r.className," ").concat(d().connectionTypeLogo):d().connectionTypeLogo}):null}},9934:function(e){e.exports={connectionTypeLogo:"ConnectionTypeLogo_connectionTypeLogo__dOKpm"}}}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7245],{17245:function(e,n,t){"use strict";t.d(n,{HK:function(){return s},VY:function(){return i.V},pI:function(){return d},h0:function(){return r.h},Rx:function(){return f},rK:function(){return h}});var r=t(36866),i=t(84306),o=t(812);let s=()=>{let{errorAlert:e}=(0,i.V)();return{handleError:n=>{let t="An unexpected error occurred. Please try again.";(0,o.Ot)(n)?t=n.data.detail:(0,o.tB)(n)&&(t=n.data.detail[0].msg),e(t)}}};var l=t(27378),u=t(20682),a=t(41337),c=t(65735);let d=e=>{let{data:n}=(0,u.$I)({}),t=(0,l.useMemo)(()=>(null==n?void 0:n.items)||[],[n]);return(0,l.useMemo)(()=>{var n;if(!e)return(0,a.Br)("");if(e.connection_type===c.Rj.SAAS&&(null===(n=e.saas_config)||void 0===n?void 0:n.type)){let n=t.find(n=>{var t;return n.identifier===(null===(t=e.saas_config)||void 0===t?void 0:t.type)});if(n)return(0,a.PT)(n)}return(0,a.El)(e)},[e,t])};var p=t(40431);let v=()=>({search:p.Oi.withDefault("")}),f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{defaultSearchQuery:n,onSearchChange:t,disableUrlState:r=!1}=e,[i,o]=(0,l.useState)({searchQuery:n||void 0}),s=(0,l.useMemo)(()=>r?null:v(),[r]),[u,a]=(0,p.XI)(null!=s?s:{},{history:"push"}),c=(0,l.useMemo)(()=>r?i:{searchQuery:u.search||n||void 0},[r,i,u,n]),d=(0,l.useCallback)(e=>{r?o({searchQuery:e||void 0}):a({search:e||null})},[r,a]),f=(0,l.useCallback)(()=>{r?o({searchQuery:n||void 0}):a({search:null})},[r,n,a]);return(0,l.useEffect)(()=>{t&&t(c)},[c,t]),{...c,updateSearch:d,resetSearch:f,searchProps:{value:c.searchQuery||"",onChange:d,onClear:()=>d("")}}},g=e=>({sortKey:e?(0,p.jx)([...e]):p.Oi.withDefault(""),sortOrder:(0,p.km)(["ascend","descend"])}),h=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{defaultSortKey:n,defaultSortOrder:t,onSortingChange:r,validColumns:i,disableUrlState:o=!1}=e,[s,u]=(0,l.useState)({sortKey:n,sortOrder:t}),a=(0,l.useMemo)(()=>o?null:g(i),[o,i]),[c,d]=(0,p.XI)(null!=a?a:{},{history:"push"}),v=(0,l.useMemo)(()=>{var e;return o?s:{sortKey:c.sortKey||n,sortOrder:null!==(e=c.sortOrder)&&void 0!==e?e:t}},[o,s,c,n,t]),f=(0,l.useCallback)((e,n)=>{o?u({sortKey:e,sortOrder:n}):d({sortKey:e?String(e):null,sortOrder:null!=n?n:null})},[o,d]),h=(0,l.useCallback)(()=>{o?u({sortKey:n,sortOrder:t}):d({sortKey:null,sortOrder:null})},[o,n,t,d]);return(0,l.useEffect)(()=>{r&&r(v)},[v,r]),{...v,updateSorting:f,resetSorting:h,sortingProps:{sortDirections:["ascend","descend"],defaultSortOrder:v.sortOrder,sortedInfo:v.sortKey?{field:v.sortKey,order:v.sortOrder}:void 0}}}},84306:function(e,n,t){"use strict";t.d(n,{V:function(){return o}});var r=t(24246),i=t(98227);let o=()=>{let e=(0,i.pmc)();return{errorAlert:(n,t,o)=>{let s={...o,position:(null==o?void 0:o.position)||"top",render:e=>{let{onClose:o}=e;return(0,r.jsxs)(i.bZj,{alignItems:"normal",status:"error","data-testid":"error-alert",children:[(0,r.jsx)(i.zMQ,{}),(0,r.jsxs)(i.xuv,{children:[t&&(0,r.jsx)(i.CdC,{children:t}),(0,r.jsx)(i.XaZ,{children:n})]}),(0,r.jsx)(i.PZ7,{onClick:o,position:"relative",right:0,size:"sm",top:-1})]})}};(null==o?void 0:o.id)&&e.isActive(o.id)?e.update(o.id,s):e(s)},successAlert:(n,t,o)=>{let s={...o,position:(null==o?void 0:o.position)||"top",render:e=>{let{onClose:o}=e;return(0,r.jsxs)(i.bZj,{alignItems:"normal",status:"success",variant:"subtle","data-testid":"success-alert",children:[(0,r.jsx)(i.zMQ,{}),(0,r.jsxs)(i.xuv,{children:[t&&(0,r.jsx)(i.CdC,{children:t}),(0,r.jsx)(i.XaZ,{children:n})]}),(0,r.jsx)(i.PZ7,{onClick:o,position:"relative",right:0,size:"sm",top:-1})]})}};(null==o?void 0:o.id)&&e.isActive(o.id)?e.update(o.id,s):e(s)}}}},36866:function(e,n,t){"use strict";t.d(n,{h:function(){return a}});var r=t(40431),i=t(27378),o=t(55484);let s=(0,r.jo)({parse(e){let n=parseInt(e,10);try{return o.Rx().integer().positive().validateSync(n),n}catch(e){return null}},serialize:e=>e.toString()});var l=t(32735);let u=function(){var e,n;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.pageQueryKey||"page",o=t.sizeQueryKey||"size";return{[i]:s.withDefault(l.Ej),[o]:t.pageSizeOptions?(0,r.bJ)(t.pageSizeOptions).withDefault(null!==(e=t.pageSize)&&void 0!==e?e:l.L8):s.withDefault(null!==(n=t.pageSize)&&void 0!==n?n:l.L8)}},a=function(){var e,n;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{defaultPageSize:o=l.L8,pageSizeOptions:s,showSizeChanger:a=!0,pageQueryKey:c="page",sizeQueryKey:d="size",disableUrlState:p=!1}=t,v=null!=s?s:l.VZ,[f,g]=(0,i.useState)({pageIndex:l.Ej,pageSize:o}),h=(0,i.useMemo)(()=>p?null:u({pageSize:o,pageSizeOptions:s,pageQueryKey:c,sizeQueryKey:d}),[o,s,c,d,p]),[y,m]=(0,r.XI)(null!=h?h:{},{history:"push"}),x=p?f:{pageIndex:null!==(e=y[c])&&void 0!==e?e:l.Ej,pageSize:null!==(n=y[d])&&void 0!==n?n:o},S=(0,i.useCallback)(()=>{p?g({pageIndex:l.Ej,pageSize:o}):m({[c]:l.Ej,[d]:o})},[p,o,c,d,m,g]);return{...x,updatePageIndex:e=>{p?g(n=>({...n,pageIndex:e})):m({[c]:e})},updatePageSize:e=>{p?g({pageIndex:e!==x.pageSize?l.Ej:x.pageIndex,pageSize:e}):m({[c]:e!==x.pageSize?l.Ej:x.pageIndex,[d]:e})},resetPagination:S,nextPage:()=>{p?g(e=>({...e,pageIndex:e.pageIndex+1})):m(e=>({[c]:e[c]+1,[d]:e[d]}))},previousPage:()=>{p?g(e=>({...e,pageIndex:e.pageIndex-1})):m(e=>({[c]:e[c]-1,[d]:e[d]}))},pageSizeOptions:v,showSizeChanger:a}}},41337:function(e,n,t){"use strict";t.d(n,{AZ:function(){return g},Br:function(){return y},El:function(){return f},PT:function(){return h},hY:function(){return i}});var r,i,o=t(24246),s=t(98227),l=t(27378),u=t(88337),a=t(16394),c=t(9934),d=t.n(c),p=t(14746);(r=i||(i={})).CONNECTION="connection",r.SYSTEM="system",r.STATIC="static";let v=e=>{var n,t,r,i,o,s;return{kind:"connection",connectionType:e.connection_type,name:null!==(r=e.name)&&void 0!==r?r:null,key:null!==(i=e.key)&&void 0!==i?i:null,saasType:null!==(o=null===(n=e.saas_config)||void 0===n?void 0:n.type)&&void 0!==o?o:null,websiteUrl:null!==(s=null===(t=e.secrets)||void 0===t?void 0:t.url)&&void 0!==s?s:null}},f=e=>v(e),g=e=>v(e),h=e=>{var n;return{kind:"system",identifier:e.identifier,humanReadable:e.human_readable,encodedIcon:null!==(n=e.encoded_icon)&&void 0!==n?n:null}},y=e=>({kind:"static",key:e}),m=e=>e===u.R.WEBSITE||e===u.R.TEST_WEBSITE,x=e=>{if(e)return p.LN.get(e)},S=e=>{if(!e)return;if(e.startsWith("data:")||e.startsWith("http"))return e;let n=e.endsWith(".svg")?e:"".concat(e,".svg");return p.Ny+n},j=(e,n)=>{if("system"===e.kind){if(e.encodedIcon)return"data:image/svg+xml;base64,".concat(e.encodedIcon);let n=[...p.iW].find(n=>{let[t]=n;return t.toLowerCase()===e.identifier.toLowerCase()});return n?p.Ny+n[1]:void 0}if("connection"===e.kind){if(m(e.connectionType)){if(!e.websiteUrl)return;let t=(0,a.ge)(e.websiteUrl);return(0,a.Ms)(t,(null!=n?n:32)*2)}if(e.connectionType===u.R.SAAS){let n=x(e.saasType);if(n)return p.Ny+n}let t=p.iW.get(e.connectionType);return t?p.Ny+t:void 0}if(e.key)return S(e.key)},I=e=>{if("connection"===e.kind){var n,t;return null!==(t=null!==(n=e.name)&&void 0!==n?n:e.key)&&void 0!==t?t:"connection"}return"system"===e.kind?e.humanReadable:e.key||"connection"},k=(e,n)=>"connection"===e.kind&&m(e.connectionType)?(0,o.jsx)(s.PJP.huD,{size:n}):(0,o.jsx)(s.PJP.ehp,{size:n});n.ZP=e=>{let{data:n,size:t,...r}=e,i=(0,l.useMemo)(()=>j(n,t),[n,t]),u=(0,l.useMemo)(()=>k(n,null!=t?t:32),[n,t]),a=(0,l.useMemo)(()=>I(n),[n]);return n?(0,o.jsx)(s.t3Z,{shape:"square",src:i,size:null!=t?t:32,icon:u,alt:a,...r,className:r.className?"".concat(r.className," ").concat(d().connectionTypeLogo):d().connectionTypeLogo}):null}},9934:function(e){e.exports={connectionTypeLogo:"ConnectionTypeLogo_connectionTypeLogo__dOKpm"}}}]);