+ {value.map(([projectId, mappedValue], index) => {
+ const project = sentryProjectsById[projectId];
+ const mappedItem = mappedItemsByValue[mappedValue];
+
+ return (
+
+
+
+ {mappedItem ? (
+
+ {getIcon(config.iconType)}
+ {mappedItem.label}
+ {mappedItem.url && (
+
+
+
+ )}
+
+ ) : (
+ {t('Deleted')}
+ )}
+
+
+
+ {project ? (
+
+ ) : (
+ {t('Deleted')}
+ )}
+
+ }
+ size="sm"
+ disabled={disabled}
+ onClick={() => handleDelete(index)}
+ aria-label={t('Delete')}
+ />
+ {/* Reserve space to align with the indicator next to the Add button */}
+
+
+
+ );
+ })}
+
+ );
+}
diff --git a/static/app/components/backendJsonFormAdapter/tableAdapter.spec.tsx b/static/app/components/backendJsonFormAdapter/tableAdapter.spec.tsx
new file mode 100644
index 00000000000000..337560ae5b5014
--- /dev/null
+++ b/static/app/components/backendJsonFormAdapter/tableAdapter.spec.tsx
@@ -0,0 +1,293 @@
+import {OrganizationFixture} from 'sentry-fixture/organization';
+
+import {
+ render,
+ renderGlobalModal,
+ screen,
+ userEvent,
+ waitFor,
+} from 'sentry-test/reactTestingLibrary';
+
+import type {JsonFormAdapterFieldConfig} from './types';
+import {BackendJsonFormAdapter} from './';
+
+function makeConfig(
+ overrides?: Partial