Reach parity with last web iteration. (#162)

* feat: add Api and Session contexts

* feat(web): add machinery/new-session

* feat(web): add servers page

* chore(web): AppRouter spacing/ordering

* feat(web): add picker, missing update-roles call for now

* feat(web): add picker saves

* chore: add roleTransactions tests

* feat(web): add auth/login
This commit is contained in:
41666 2021-03-13 04:42:07 -05:00 committed by GitHub
parent f65779f925
commit cd448b56c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 567 additions and 7 deletions

View file

@ -0,0 +1,25 @@
import { RoleTransaction, TransactionType } from '@roleypoly/types';
import { makeRoleTransactions } from './roleTransactions';
it('creates a transactional diff of two sets of roles', () => {
const currentRoles = ['aaa', 'bbb', 'ccc', 'ddd'];
const nextRoles = ['bbb', 'ccc', 'ddd', 'eee', 'fff']; // removes aaa, adds eee + fff
const transactions = makeRoleTransactions(currentRoles, nextRoles);
expect(transactions).toEqual(
expect.arrayContaining<RoleTransaction>([
{
id: 'aaa',
action: TransactionType.Remove,
},
{
id: 'fff',
action: TransactionType.Add,
},
{
id: 'eee',
action: TransactionType.Add,
},
])
);
});

View file

@ -0,0 +1,30 @@
import { Role, RoleTransaction, TransactionType } from '@roleypoly/types';
export const makeRoleTransactions = (
oldRoles: Role['id'][],
newRoles: Role['id'][]
): RoleTransaction[] => {
const transactions: RoleTransaction[] = [];
// Removes: old roles not in new roles
for (let oldID of oldRoles) {
if (!newRoles.includes(oldID)) {
transactions.push({
id: oldID,
action: TransactionType.Remove,
});
}
}
// Adds: new roles not in old roles
for (let newID of newRoles) {
if (!oldRoles.includes(newID)) {
transactions.push({
id: newID,
action: TransactionType.Add,
});
}
}
return transactions;
};