Skip to content

front end UI style and experience optimization#84

Merged
FouoF merged 1 commit intoProject-HAMi:mainfrom
Shenhan11:feature/ui-redesign
Mar 31, 2026
Merged

front end UI style and experience optimization#84
FouoF merged 1 commit intoProject-HAMi:mainfrom
Shenhan11:feature/ui-redesign

Conversation

@Shenhan11
Copy link
Copy Markdown
Contributor

No description provided.

@Shenhan11 Shenhan11 force-pushed the feature/ui-redesign branch from 057f677 to 61b8eb9 Compare March 18, 2026 12:06
@Shenhan11 Shenhan11 force-pushed the feature/ui-redesign branch 6 times, most recently from 23f2610 to b12a7c5 Compare March 26, 2026 04:07
@Shenhan11 Shenhan11 force-pushed the feature/ui-redesign branch from b12a7c5 to af1d7e6 Compare March 27, 2026 08:40
},
},
]);
const fetchTableData = async () => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P1: Detail pages pass deviceId/nodeUid only after their own detail request resolves, but this table fetches only on mount and never refetches when props.filters changes. On card and node detail pages the embedded workload table can therefore stay global instead of being scoped to the current resource.


const handleClick = async (params) => {
const handleClick = (params) => {
const name = params.data.name;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P2: The preview widget is cluster-wide, but this click path now resolves against the currently filtered tableData only. After filtering by IP/type/status, clicking a Top-5 node that is outside the filtered subset will incorrectly show "node not found". The previous implementation looked this up from the full node list, so this is a behavior regression.

const { t, locale } = useI18n();
const tableData = ref([]);
const tableLoading = ref(false);
const filters = reactive({
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P1: This page has the same regression as the card list: filters start from an empty reactive object and do not read route.query. The overview still links to /admin/vgpu/node/admin?isSchedulable=..., so node-status drill-downs and bookmarked filtered URLs silently lose their filter.

},
);

const fetchTableData = async () => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P1: Node detail renders this list before detail.uid is loaded, yet the table only fetches on mount. Because there is no watcher on props.filters, the embedded GPU list can remain global instead of refreshing to the current node once detail.uid arrives.

const currentType = computed(() => filters.type || '');
const tableData = ref([]);
const tableLoading = ref(false);
const filters = reactive({
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P1: This page now initializes local filters from a blank reactive object and never merges route.query. The dashboard still navigates here as /admin/vgpu/card/admin?type=..., so card-type drill-downs and bookmarked filtered URLs stop applying their filter after the TablePlus removal.

@Nimbus318
Copy link
Copy Markdown
Collaborator

Nimbus318 commented Mar 30, 2026

Summary of the review findings:

  • P1: Drill-down / deep-link regression after removing TablePlus. The dashboard still navigates to filtered list URLs like /admin/vgpu/card/admin?type=... and /admin/vgpu/node/admin?isSchedulable=..., but the rewritten card/node list pages now initialize filters from local reactive state only and no longer hydrate from route.query. This breaks both overview drill-downs and bookmarked filtered URLs. This is the common root cause behind findings 2 and 3.
image
  • P1: Embedded sub-list regression in detail pages. The rewritten card/task tables fetch once on mount and do not refetch when props.filters changes. On node/card detail pages those filters (detail.uid, detail.uuid) arrive only after the parent detail request resolves, so the embedded GPU/workload lists can stay global instead of being scoped to the current resource. This is the common root cause behind findings 4 and 5.
image
  • P2: The node Top-5 click path now resolves against the currently filtered table subset instead of the full node dataset, so after filtering the list it can incorrectly show node not found for valid Top entries.
image

@Shenhan11 Shenhan11 force-pushed the feature/ui-redesign branch from af1d7e6 to 1c3734c Compare March 31, 2026 06:24
Signed-off-by: Shenhan11 <han.shen@dynamia.ai>
@Shenhan11 Shenhan11 force-pushed the feature/ui-redesign branch from 1c3734c to fe53a64 Compare March 31, 2026 06:25
@FouoF
Copy link
Copy Markdown
Contributor

FouoF commented Mar 31, 2026

/lgtm

@hami-robot hami-robot bot added the lgtm label Mar 31, 2026
@hami-robot
Copy link
Copy Markdown

hami-robot bot commented Mar 31, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: FouoF, Shenhan11

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@FouoF FouoF merged commit 4546a4f into Project-HAMi:main Mar 31, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants