From 45be6c2b45d68147cf5978d865e69ab42143bce7 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Mon, 8 Apr 2024 17:23:49 +0300 Subject: [PATCH] refactor(tags): migrate tags to react [EE-4707] (#10771) --- .../tags-datatable/tagsDatatable.html | 91 ------------------- .../tags-datatable/tagsDatatable.js | 13 --- .../react/components/environments.ts | 7 +- app/portainer/views/tags/tags.html | 6 +- app/portainer/views/tags/tagsController.js | 12 --- .../portainer/environments/TagsView/.keep | 0 .../environments/TagsView/TagsDatatable.tsx | 50 ++++++++++ 7 files changed, 54 insertions(+), 125 deletions(-) delete mode 100644 app/portainer/components/datatables/tags-datatable/tagsDatatable.html delete mode 100644 app/portainer/components/datatables/tags-datatable/tagsDatatable.js delete mode 100644 app/react/portainer/environments/TagsView/.keep create mode 100644 app/react/portainer/environments/TagsView/TagsDatatable.tsx diff --git a/app/portainer/components/datatables/tags-datatable/tagsDatatable.html b/app/portainer/components/datatables/tags-datatable/tagsDatatable.html deleted file mode 100644 index cc53d049c..000000000 --- a/app/portainer/components/datatables/tags-datatable/tagsDatatable.html +++ /dev/null @@ -1,91 +0,0 @@ -
- - -
-
-
- -
- {{ $ctrl.titleText }} -
- -
- -
-
-
- - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- - - - - {{ item.Name }} -
Loading...
No tag available.
-
- -
-
-
diff --git a/app/portainer/components/datatables/tags-datatable/tagsDatatable.js b/app/portainer/components/datatables/tags-datatable/tagsDatatable.js deleted file mode 100644 index b34f7d015..000000000 --- a/app/portainer/components/datatables/tags-datatable/tagsDatatable.js +++ /dev/null @@ -1,13 +0,0 @@ -angular.module('portainer.app').component('tagsDatatable', { - templateUrl: './tagsDatatable.html', - controller: 'GenericDatatableController', - bindings: { - titleText: '@', - titleIcon: '@', - dataset: '<', - tableKey: '@', - orderBy: '@', - reverseOrder: '<', - removeAction: '<', - }, -}); diff --git a/app/portainer/react/components/environments.ts b/app/portainer/react/components/environments.ts index 057f4ce42..4c5a95c7b 100644 --- a/app/portainer/react/components/environments.ts +++ b/app/portainer/react/components/environments.ts @@ -3,11 +3,10 @@ import angular from 'angular'; import { r2a } from '@/react-tools/react2angular'; import { EdgeKeyDisplay } from '@/react/portainer/environments/ItemView/EdgeKeyDisplay'; import { KVMControl } from '@/react/portainer/environments/KvmView/KVMControl'; +import { TagsDatatable } from '@/react/portainer/environments/TagsView/TagsDatatable'; export const environmentsModule = angular .module('portainer.app.react.components.environments', []) .component('edgeKeyDisplay', r2a(EdgeKeyDisplay, ['edgeKey'])) - .component( - 'kvmControl', - r2a(KVMControl, ['deviceId', 'server', 'token']) - ).name; + .component('kvmControl', r2a(KVMControl, ['deviceId', 'server', 'token'])) + .component('tagsDatatable', r2a(TagsDatatable, ['dataset', 'onRemove'])).name; diff --git a/app/portainer/views/tags/tags.html b/app/portainer/views/tags/tags.html index 7b1e3df37..f8deb85f2 100644 --- a/app/portainer/views/tags/tags.html +++ b/app/portainer/views/tags/tags.html @@ -60,8 +60,4 @@ -
-
- -
-
+ diff --git a/app/portainer/views/tags/tagsController.js b/app/portainer/views/tags/tagsController.js index 51e1aedeb..ae86039a9 100644 --- a/app/portainer/views/tags/tagsController.js +++ b/app/portainer/views/tags/tagsController.js @@ -1,7 +1,5 @@ import angular from 'angular'; import _ from 'lodash-es'; -import { confirmDestructive } from '@@/modals/confirm'; -import { buildConfirmButton } from '@@/modals/utils'; angular.module('portainer.app').controller('TagsController', TagsController); @@ -32,16 +30,6 @@ function TagsController($scope, $state, $async, TagService, Notifications) { } async function removeActionAsync(tags) { - const confirmed = await confirmDestructive({ - title: 'Are you sure?', - message: 'Are you sure you want to remove the selected tag(s)?', - confirmButton: buildConfirmButton('Remove', 'danger'), - }); - - if (!confirmed) { - return; - } - for (let tag of tags) { try { await TagService.deleteTag(tag.Id); diff --git a/app/react/portainer/environments/TagsView/.keep b/app/react/portainer/environments/TagsView/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/react/portainer/environments/TagsView/TagsDatatable.tsx b/app/react/portainer/environments/TagsView/TagsDatatable.tsx new file mode 100644 index 000000000..42201e3d1 --- /dev/null +++ b/app/react/portainer/environments/TagsView/TagsDatatable.tsx @@ -0,0 +1,50 @@ +import { TagIcon } from 'lucide-react'; +import { createColumnHelper } from '@tanstack/react-table'; + +import { Tag } from '@/portainer/tags/types'; + +import { Datatable } from '@@/datatables'; +import { createPersistedStore } from '@@/datatables/types'; +import { useTableState } from '@@/datatables/useTableState'; +import { DeleteButton } from '@@/buttons/DeleteButton'; + +const columnHelper = createColumnHelper(); + +const columns = [ + columnHelper.accessor('Name', { + header: 'Name', + }), +]; + +const tableKey = 'tags-table'; + +const store = createPersistedStore(tableKey); + +export function TagsDatatable({ + dataset, + onRemove, +}: { + dataset: Array | undefined; + onRemove: (selectedItems: Array) => void; +}) { + const tableState = useTableState(store, tableKey); + + return ( + ( + onRemove(selectedItems)} + /> + )} + /> + ); +}