mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-31 19:02:59 +01:00
Fixed sorting of other pad columns
This commit is contained in:
parent
d658ff7865
commit
f7b1311e36
2 changed files with 79 additions and 50 deletions
|
@ -112,19 +112,19 @@ export const PadPage = ()=>{
|
||||||
ascending: !searchParams.ascending
|
ascending: !searchParams.ascending
|
||||||
})
|
})
|
||||||
}}><Trans i18nKey="ep_admin_pads:ep_adminpads2_padname"/></th>
|
}}><Trans i18nKey="ep_admin_pads:ep_adminpads2_padname"/></th>
|
||||||
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'lastEdited')} onClick={()=>{
|
|
||||||
setSearchParams({
|
|
||||||
...searchParams,
|
|
||||||
sortBy: 'lastEdited',
|
|
||||||
ascending: !searchParams.ascending
|
|
||||||
})
|
|
||||||
}}><Trans i18nKey="ep_admin_pads:ep_adminpads2_pad-user-count"/></th>
|
|
||||||
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'userCount')} onClick={()=>{
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'userCount')} onClick={()=>{
|
||||||
setSearchParams({
|
setSearchParams({
|
||||||
...searchParams,
|
...searchParams,
|
||||||
sortBy: 'userCount',
|
sortBy: 'userCount',
|
||||||
ascending: !searchParams.ascending
|
ascending: !searchParams.ascending
|
||||||
})
|
})
|
||||||
|
}}><Trans i18nKey="ep_admin_pads:ep_adminpads2_pad-user-count"/></th>
|
||||||
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'lastEdited')} onClick={()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
sortBy: 'lastEdited',
|
||||||
|
ascending: !searchParams.ascending
|
||||||
|
})
|
||||||
}}><Trans i18nKey="ep_admin_pads:ep_adminpads2_last-edited"/></th>
|
}}><Trans i18nKey="ep_admin_pads:ep_adminpads2_last-edited"/></th>
|
||||||
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'revisionNumber')} onClick={()=>{
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'revisionNumber')} onClick={()=>{
|
||||||
setSearchParams({
|
setSearchParams({
|
||||||
|
|
|
@ -128,6 +128,7 @@ exports.socketio = (hookName: string, {io}: any) => {
|
||||||
maxResult = 0;
|
maxResult = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset to default values if out of bounds
|
||||||
if (query.offset && query.offset < 0) {
|
if (query.offset && query.offset < 0) {
|
||||||
query.offset = 0;
|
query.offset = 0;
|
||||||
} else if (query.offset > maxResult) {
|
} else if (query.offset > maxResult) {
|
||||||
|
@ -135,11 +136,14 @@ exports.socketio = (hookName: string, {io}: any) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.limit && query.limit < 0) {
|
if (query.limit && query.limit < 0) {
|
||||||
|
// Too small
|
||||||
query.limit = 0;
|
query.limit = 0;
|
||||||
} else if (query.limit > queryPadLimit) {
|
} else if (query.limit > queryPadLimit) {
|
||||||
|
// Too big
|
||||||
query.limit = queryPadLimit;
|
query.limit = queryPadLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (query.sortBy === 'padName') {
|
if (query.sortBy === 'padName') {
|
||||||
result = result.sort((a, b) => {
|
result = result.sort((a, b) => {
|
||||||
if (a < b) return query.ascending ? -1 : 1;
|
if (a < b) return query.ascending ? -1 : 1;
|
||||||
|
@ -160,53 +164,78 @@ exports.socketio = (hookName: string, {io}: any) => {
|
||||||
revisionNumber
|
revisionNumber
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
} else {
|
} else if (query.sortBy === "revisionNumber") {
|
||||||
const currentWinners: PadQueryResult[] = []
|
const currentWinners: PadQueryResult[] = []
|
||||||
let queryOffsetCounter = 0
|
const padMapping = [] as {padId: string, revisionNumber: number}[]
|
||||||
for (let res of result) {
|
for (let res of result) {
|
||||||
|
|
||||||
const pad = await padManager.getPad(res);
|
const pad = await padManager.getPad(res);
|
||||||
const padType = {
|
const revisionNumber = pad.getHeadRevisionNumber()
|
||||||
padName: res,
|
padMapping.push({padId: res, revisionNumber})
|
||||||
lastEdited: await pad.getLastEdit(),
|
|
||||||
userCount: api.padUsersCount(res).padUsersCount,
|
|
||||||
revisionNumber: pad.getHeadRevisionNumber()
|
|
||||||
};
|
|
||||||
|
|
||||||
if (currentWinners.length < query.limit) {
|
|
||||||
if (queryOffsetCounter < query.offset) {
|
|
||||||
queryOffsetCounter++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
currentWinners.push({
|
|
||||||
padName: res,
|
|
||||||
lastEdited: await pad.getLastEdit(),
|
|
||||||
userCount: api.padUsersCount(res).padUsersCount,
|
|
||||||
revisionNumber: pad.getHeadRevisionNumber()
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
// Kick out worst pad and replace by current pad
|
|
||||||
let worstPad = currentWinners.sort((a, b) => {
|
|
||||||
if (a[query.sortBy] < b[query.sortBy]) return query.ascending ? -1 : 1;
|
|
||||||
if (a[query.sortBy] > b[query.sortBy]) return query.ascending ? 1 : -1;
|
|
||||||
return 0;
|
|
||||||
})
|
|
||||||
if (worstPad[0] && worstPad[0][query.sortBy] < padType[query.sortBy]) {
|
|
||||||
if (queryOffsetCounter < query.offset) {
|
|
||||||
queryOffsetCounter++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
currentWinners.splice(currentWinners.indexOf(worstPad[0]), 1)
|
|
||||||
currentWinners.push({
|
|
||||||
padName: res,
|
|
||||||
lastEdited: await pad.getLastEdit(),
|
|
||||||
userCount: api.padUsersCount(res).padUsersCount,
|
|
||||||
revisionNumber: pad.getHeadRevisionNumber()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
data.results = currentWinners;
|
padMapping.sort((a, b) => {
|
||||||
|
if (a.revisionNumber < b.revisionNumber) return query.ascending ? -1 : 1;
|
||||||
|
if (a.revisionNumber > b.revisionNumber) return query.ascending ? 1 : -1;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
for (const padRetrieval of padMapping.slice(query.offset, query.offset + query.limit)) {
|
||||||
|
let pad = await padManager.getPad(padRetrieval.padId);
|
||||||
|
currentWinners.push({
|
||||||
|
padName: padRetrieval.padId,
|
||||||
|
lastEdited: await pad.getLastEdit(),
|
||||||
|
userCount: api.padUsersCount(pad.padName).padUsersCount,
|
||||||
|
revisionNumber: padRetrieval.revisionNumber
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
data.results = currentWinners;
|
||||||
|
} else if (query.sortBy === "userCount") {
|
||||||
|
const currentWinners: PadQueryResult[] = []
|
||||||
|
const padMapping = [] as {padId: string, userCount: number}[]
|
||||||
|
for (let res of result) {
|
||||||
|
const userCount = api.padUsersCount(res).padUsersCount
|
||||||
|
padMapping.push({padId: res, userCount})
|
||||||
|
}
|
||||||
|
padMapping.sort((a, b) => {
|
||||||
|
if (a.userCount < b.userCount) return query.ascending ? -1 : 1;
|
||||||
|
if (a.userCount > b.userCount) return query.ascending ? 1 : -1;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
for (const padRetrieval of padMapping.slice(query.offset, query.offset + query.limit)) {
|
||||||
|
let pad = await padManager.getPad(padRetrieval.padId);
|
||||||
|
currentWinners.push({
|
||||||
|
padName: padRetrieval.padId,
|
||||||
|
lastEdited: await pad.getLastEdit(),
|
||||||
|
userCount: padRetrieval.userCount,
|
||||||
|
revisionNumber: pad.getHeadRevisionNumber()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
data.results = currentWinners;
|
||||||
|
} else if (query.sortBy === "lastEdited") {
|
||||||
|
const currentWinners: PadQueryResult[] = []
|
||||||
|
const padMapping = [] as {padId: string, lastEdited: string}[]
|
||||||
|
for (let res of result) {
|
||||||
|
const pad = await padManager.getPad(res);
|
||||||
|
const lastEdited = await pad.getLastEdit();
|
||||||
|
padMapping.push({padId: res, lastEdited})
|
||||||
|
}
|
||||||
|
padMapping.sort((a, b) => {
|
||||||
|
if (a.lastEdited < b.lastEdited) return query.ascending ? -1 : 1;
|
||||||
|
if (a.lastEdited > b.lastEdited) return query.ascending ? 1 : -1;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
for (const padRetrieval of padMapping.slice(query.offset, query.offset + query.limit)) {
|
||||||
|
let pad = await padManager.getPad(padRetrieval.padId);
|
||||||
|
currentWinners.push({
|
||||||
|
padName: padRetrieval.padId,
|
||||||
|
lastEdited: padRetrieval.lastEdited,
|
||||||
|
userCount: api.padUsersCount(pad.padName).padUsersCount,
|
||||||
|
revisionNumber: pad.getHeadRevisionNumber()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
data.results = currentWinners;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.emit('results:padLoad', data);
|
socket.emit('results:padLoad', data);
|
||||||
|
|
Loading…
Reference in a new issue