Working with long lists
Every list in the panel — your accounts, the audit log, your servers — works the same way. That is deliberate: learn one and you have learned all of them. This page explains how, and above all what the list is actually promising you. Becaus
Written for: Administrator, Reseller, Customer
Every list in the panel — your accounts, the audit log, your servers — works the same way. That is deliberate: learn one and you have learned all of them. This page explains how, and above all what the list is actually promising you. Because the difference between "these are all the results" and "this is the first page of the results" is exactly the difference between finding a customer and concluding they do not exist.
Since this round the server does the work. Searching, filtering, sorting and loading more all happen on the panel's side, not in your browser. On a list of ten rows you will never notice. For a reseller with nine hundred domains it is the difference between a screen that is ready at once and a screen that spends half a minute thinking.
The counter under the table
There is one line under every list, and it matters more than it looks:
- "50 of 918" — you are looking at fifty rows, and 918 match your search and your filters. There is more, and scrolling will show it.
- "918 in total" — you are looking at all of them. Nothing more is coming.
- "50 of 10000+" — there are so many that the panel stopped counting. That only happens on the audit log, which never shrinks. Narrow the search and the number becomes exact again.
If it still says "50 of 918" right after you typed a search, your search narrowed nothing. If it says "3 of 3", you have everything.
Searching
Type in the box above the table. The panel waits a fraction of a second for you to stop typing and then asks the server once — not once per keystroke.
What it searches differs per list, but it is always everything you can see in the columns, and sometimes more. For hosting accounts it searches:
- the account name and the note beside it
- the server the account lives on
- the plan and the owner
- and every website of that account — including the ones that did not fit on the row
That last one is the most useful and the least visible. A customer has twelve domains, the row shows two of them and a "+10". Search for the eleventh and you still find that customer. The search runs over the whole list on the server, not over whatever happens to be on your screen.
Two things worth knowing:
- A
%or a_is a character, not a wildcard. Searching for%finds the accounts with a per-cent sign in their name, not the entire fleet. - On the audit log you search the technical name of an operation (
mailbox.create), not its English description. The description is composed in your browser, so the server cannot match on it. Typemailboxand you get everything that happened to a mailbox.
Filtering
Beside the search box are that list's own filters — for accounts, the server and the state. They behave like the search: the question goes to the server, the counter follows, and you start at the top of the list again.
Filters live in the web address. If you are on https://panel1.corecp.dev/accounts?state=suspended, you can paste that link into a ticket or a chat and the other person sees exactly the same list. It works the other way round too: the panel links to such lists itself, for example from "three accounts are suspended" on the dashboard.
The search box is deliberately not in there — it would add a step to your browser history on every keystroke and make the back button useless.
Sorting
Click a column header to order by it. Click again to reverse; the arrow in the header shows which way. A header that is not clickable is a column with no sensible order.
Sorting happens on the server, and that is the whole point: click Websites and you get the customer with the most websites in the whole list at the top — not the one with the most websites among the fifty rows that happened to be loaded.
Sorting is in the web address as well (?sort=domains:desc), so "the accounts with the most websites, biggest first" is a link you can keep.
From the keyboard: tab to the header and press Enter or Space. A screen reader announces the column as sortable and says which way it is currently ordered.
Loading more
Scroll down and the next page loads by itself. Under the last row there is also a Load more button, and it is not a fallback: it is there for the keyboard, and for when you deliberately want one more page without scrolling past fifty rows first.
The same row never appears twice, not even if an account is added or removed while you are reading. The panel does not remember "I was at row 50" but "I was at this account", and that does not shift when something above you changes.
Quick actions on a row
At the right of every row is a small button with three dots. It holds the things you often want to do to that row without leaving the page — for an account: open it, go to its mail, go to its files, and suspend it or lift the suspension.
Clicking the row itself opens the detail panel. Clicking the dots does not: the two do not get in each other's way.
Suspending happens immediately, without a confirmation, with a message at the bottom of the screen that offers Undo. That is on purpose: suspending is reversible, and a confirmation dialog for something one click undoes teaches people to dismiss dialogs without reading them — which is exactly what you do not want on the actions that do need reading.
On your phone
On a phone the rows become cards, carrying the same fields underneath that the table shows as columns. Searching, filtering and loading more work identically. If you would rather have the dense table — to compare rows, say — there is a Cards / Table switch at the top right. The panel remembers that choice, and it applies to every list at once.
If you use the API
The same list is readable over the API, and the paging travels in the response headers so that the body stays a plain JSON array:
# one page, and the three facts about it
curl -si -b cookies.txt 'https://panel1.corecp.dev/api/v1/accounts?limit=25' \
| grep -i '^x-corecp-'
# X-CoreCP-Total: 918 ← how many rows match the filter
# X-CoreCP-Next: dGVzdDEw… ← the cursor for the next page
# search, filter and sort, all in the query string
curl -s -b cookies.txt \
'https://panel1.corecp.dev/api/v1/accounts?limit=25&q=shop&sort=domains&dir=desc'
# passing no limit still gives you the whole list, exactly as before
curl -s -b cookies.txt 'https://panel1.corecp.dev/api/v1/accounts' | jq 'length'Hand the cursor back the way you received it; it is opaque and what is inside it may change. A cursor you invented yourself simply returns the first page rather than an error.