ui(admin): add "working" React admin ui

This commit is contained in:
Matthew Penner 2022-12-15 19:06:14 -07:00
parent d1c7494933
commit 5402584508
No known key found for this signature in database
199 changed files with 13387 additions and 151 deletions

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminAllocationStore {
selectedAllocations: number[];
setSelectedAllocations: Action<AdminAllocationStore, number[]>;
appendSelectedAllocation: Action<AdminAllocationStore, number>;
removeSelectedAllocation: Action<AdminAllocationStore, number>;
}
const allocations: AdminAllocationStore = {
selectedAllocations: [],
setSelectedAllocations: action((state, payload) => {
state.selectedAllocations = payload;
}),
appendSelectedAllocation: action((state, payload) => {
state.selectedAllocations = state.selectedAllocations.filter(id => id !== payload).concat(payload);
}),
removeSelectedAllocation: action((state, payload) => {
state.selectedAllocations = state.selectedAllocations.filter(id => id !== payload);
}),
};
export type { AdminAllocationStore };
export default allocations;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminDatabaseStore {
selectedDatabases: number[];
setSelectedDatabases: Action<AdminDatabaseStore, number[]>;
appendSelectedDatabase: Action<AdminDatabaseStore, number>;
removeSelectedDatabase: Action<AdminDatabaseStore, number>;
}
const databases: AdminDatabaseStore = {
selectedDatabases: [],
setSelectedDatabases: action((state, payload) => {
state.selectedDatabases = payload;
}),
appendSelectedDatabase: action((state, payload) => {
state.selectedDatabases = state.selectedDatabases.filter(id => id !== payload).concat(payload);
}),
removeSelectedDatabase: action((state, payload) => {
state.selectedDatabases = state.selectedDatabases.filter(id => id !== payload);
}),
};
export type { AdminDatabaseStore };
export default databases;

View file

@ -0,0 +1,44 @@
import { createContextStore } from 'easy-peasy';
import type { AdminAllocationStore } from '@/state/admin/allocations';
import allocations from '@/state/admin/allocations';
import type { AdminDatabaseStore } from '@/state/admin/databases';
import databases from '@/state/admin/databases';
import type { AdminLocationStore } from '@/state/admin/locations';
import locations from '@/state/admin/locations';
import type { AdminMountStore } from '@/state/admin/mounts';
import mounts from '@/state/admin/mounts';
import type { AdminNestStore } from '@/state/admin/nests';
import nests from '@/state/admin/nests';
import type { AdminNodeStore } from '@/state/admin/nodes';
import nodes from '@/state/admin/nodes';
import type { AdminRoleStore } from '@/state/admin/roles';
import roles from '@/state/admin/roles';
import type { AdminServerStore } from '@/state/admin/servers';
import servers from '@/state/admin/servers';
import type { AdminUserStore } from '@/state/admin/users';
import users from '@/state/admin/users';
interface AdminStore {
allocations: AdminAllocationStore;
databases: AdminDatabaseStore;
locations: AdminLocationStore;
mounts: AdminMountStore;
nests: AdminNestStore;
nodes: AdminNodeStore;
roles: AdminRoleStore;
servers: AdminServerStore;
users: AdminUserStore;
}
export const AdminContext = createContextStore<AdminStore>({
allocations,
databases,
locations,
mounts,
nests,
nodes,
roles,
servers,
users,
});

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminLocationStore {
selectedLocations: number[];
setSelectedLocations: Action<AdminLocationStore, number[]>;
appendSelectedLocation: Action<AdminLocationStore, number>;
removeSelectedLocation: Action<AdminLocationStore, number>;
}
const locations: AdminLocationStore = {
selectedLocations: [],
setSelectedLocations: action((state, payload) => {
state.selectedLocations = payload;
}),
appendSelectedLocation: action((state, payload) => {
state.selectedLocations = state.selectedLocations.filter(id => id !== payload).concat(payload);
}),
removeSelectedLocation: action((state, payload) => {
state.selectedLocations = state.selectedLocations.filter(id => id !== payload);
}),
};
export type { AdminLocationStore };
export default locations;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminMountStore {
selectedMounts: number[];
setSelectedMounts: Action<AdminMountStore, number[]>;
appendSelectedMount: Action<AdminMountStore, number>;
removeSelectedMount: Action<AdminMountStore, number>;
}
const mounts: AdminMountStore = {
selectedMounts: [],
setSelectedMounts: action((state, payload) => {
state.selectedMounts = payload;
}),
appendSelectedMount: action((state, payload) => {
state.selectedMounts = state.selectedMounts.filter(id => id !== payload).concat(payload);
}),
removeSelectedMount: action((state, payload) => {
state.selectedMounts = state.selectedMounts.filter(id => id !== payload);
}),
};
export type { AdminMountStore };
export default mounts;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminNestStore {
selectedNests: number[];
setSelectedNests: Action<AdminNestStore, number[]>;
appendSelectedNest: Action<AdminNestStore, number>;
removeSelectedNest: Action<AdminNestStore, number>;
}
const nests: AdminNestStore = {
selectedNests: [],
setSelectedNests: action((state, payload) => {
state.selectedNests = payload;
}),
appendSelectedNest: action((state, payload) => {
state.selectedNests = state.selectedNests.filter(id => id !== payload).concat(payload);
}),
removeSelectedNest: action((state, payload) => {
state.selectedNests = state.selectedNests.filter(id => id !== payload);
}),
};
export type { AdminNestStore };
export default nests;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminNodeStore {
selectedNodes: number[];
setSelectedNodes: Action<AdminNodeStore, number[]>;
appendSelectedNode: Action<AdminNodeStore, number>;
removeSelectedNode: Action<AdminNodeStore, number>;
}
const nodes: AdminNodeStore = {
selectedNodes: [],
setSelectedNodes: action((state, payload) => {
state.selectedNodes = payload;
}),
appendSelectedNode: action((state, payload) => {
state.selectedNodes = state.selectedNodes.filter(id => id !== payload).concat(payload);
}),
removeSelectedNode: action((state, payload) => {
state.selectedNodes = state.selectedNodes.filter(id => id !== payload);
}),
};
export type { AdminNodeStore };
export default nodes;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminRoleStore {
selectedRoles: number[];
setSelectedRoles: Action<AdminRoleStore, number[]>;
appendSelectedRole: Action<AdminRoleStore, number>;
removeSelectedRole: Action<AdminRoleStore, number>;
}
const roles: AdminRoleStore = {
selectedRoles: [],
setSelectedRoles: action((state, payload) => {
state.selectedRoles = payload;
}),
appendSelectedRole: action((state, payload) => {
state.selectedRoles = state.selectedRoles.filter(id => id !== payload).concat(payload);
}),
removeSelectedRole: action((state, payload) => {
state.selectedRoles = state.selectedRoles.filter(id => id !== payload);
}),
};
export type { AdminRoleStore };
export default roles;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminServerStore {
selectedServers: number[];
setSelectedServers: Action<AdminServerStore, number[]>;
appendSelectedServer: Action<AdminServerStore, number>;
removeSelectedServer: Action<AdminServerStore, number>;
}
const servers: AdminServerStore = {
selectedServers: [],
setSelectedServers: action((state, payload) => {
state.selectedServers = payload;
}),
appendSelectedServer: action((state, payload) => {
state.selectedServers = state.selectedServers.filter(id => id !== payload).concat(payload);
}),
removeSelectedServer: action((state, payload) => {
state.selectedServers = state.selectedServers.filter(id => id !== payload);
}),
};
export type { AdminServerStore };
export default servers;

View file

@ -0,0 +1,29 @@
import type { Action } from 'easy-peasy';
import { action } from 'easy-peasy';
interface AdminUserStore {
selectedUsers: number[];
setSelectedUsers: Action<AdminUserStore, number[]>;
appendSelectedUser: Action<AdminUserStore, number>;
removeSelectedUser: Action<AdminUserStore, number>;
}
const users: AdminUserStore = {
selectedUsers: [],
setSelectedUsers: action((state, payload) => {
state.selectedUsers = payload;
}),
appendSelectedUser: action((state, payload) => {
state.selectedUsers = state.selectedUsers.filter(id => id !== payload).concat(payload);
}),
removeSelectedUser: action((state, payload) => {
state.selectedUsers = state.selectedUsers.filter(id => id !== payload);
}),
};
export type { AdminUserStore };
export default users;