Skip to content

Commit

Permalink
Add triage
Browse files Browse the repository at this point in the history
  • Loading branch information
Pierstoval committed Jan 22, 2024
1 parent c24a52f commit 71be3f0
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 13 deletions.
5 changes: 4 additions & 1 deletion src/lib/crud/Dashboard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import ListBoxes from "carbon-icons-svelte/lib/ListBoxes.svelte";
import Tag from "carbon-icons-svelte/lib/Tag.svelte";
import TagGroup from "carbon-icons-svelte/lib/TagGroup.svelte";
import FetchUpload from "carbon-icons-svelte/lib/FetchUpload.svelte";
import ListCheckedMirror from "carbon-icons-svelte/lib/ListCheckedMirror.svelte";

import OperationCrud from '$lib/crud/cruds/OperationCrud';
import BankAccountsCrud from "$lib/crud/cruds/BankAccountsCrud";
import TagRulesCrud from "$lib/crud/cruds/TagRulesCrud";
import TagsCrud from "$lib/crud/cruds/TagsCrud";
import TriageCrud from "$lib/crud/cruds/TriageCrud";

export const dashboard = new DashboardDefinition({
adminConfig: {
Expand All @@ -28,7 +30,7 @@ export const dashboard = new DashboardDefinition({
new UrlAction('Operations', '/crud/operations/list', ListBoxes),
new UrlAction('Tags', '/crud/tags/list', Tag),
new UrlAction('Tag rules', '/crud/tag-rules/list', TagGroup),
// new UrlAction('Triage', '/crud/triage/list'),
new UrlAction('Triage', '/crud/triage/list', ListCheckedMirror),
new UrlAction('Bank accounts', '/crud/bank-accounts/list', PiggyBank),
new UrlAction('Import', '/import', FetchUpload),
],
Expand All @@ -38,5 +40,6 @@ export const dashboard = new DashboardDefinition({
BankAccountsCrud,
TagRulesCrud,
TagsCrud,
TriageCrud,
]
});
2 changes: 1 addition & 1 deletion src/lib/crud/cruds/OperationCrud.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export default new CrudDefinition<Operation>('operations', {
new TextField('type_display', 'Type 2'),
new TextField('details', 'Details'),
new TextField('tags', 'Tags'),
new NumberField('amount', 'Montant'),
new NumberField('amount_display', 'Montant'),
],
[
new UrlAction('View', '/crud/operations/view'),
Expand Down
108 changes: 108 additions & 0 deletions src/lib/crud/cruds/TriageCrud.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import {
CallbackStateProcessor,
CallbackStateProvider,
CrudDefinition, DateField, Delete, Edit,
List,
NumberField,
PaginatedResults,
TextField,
UrlAction,
View
} from "@orbitale/svelte-admin";
import type {CrudOperation} from "@orbitale/svelte-admin/dist/Crud/Operations";
import type {RequestParameters} from "@orbitale/svelte-admin/dist/request";
import type {StateProcessorInput} from "@orbitale/svelte-admin/dist/State/Processor";

import {
deleteOperation,
getOperationById,
getTriageOperations,
getTriageOperationsCount, updateOperationDetails
} from "$lib/db/operations";
import type Operation from "$lib/entities/Operation";
import {success} from "$lib/utils/message";
import {goto} from "$app/navigation";

export default new CrudDefinition<Operation>('triage', {
defaultOperationName: "list",
label: {plural: "Triaged operations", singular: "Triaged operation"},
// minStateLoadingTimeMs: 0,

operations: [
new List(
[
new DateField('operation_date', 'Date'),
new TextField('op_type', 'Type 1'),
new TextField('type_display', 'Type 2'),
new TextField('details', 'Details'),
new NumberField('amount_display', 'Montant'),
],
[
new UrlAction('View', '/crud/triage/view'),
new UrlAction('Edit', '/crud/triage/edit'),
new UrlAction('Delete', '/crud/triage/delete')
],
{
pagination: {
enabled: true,
itemsPerPage: 20,
}
}),
new Delete([], new UrlAction('', '/crud/triage/list')),
new Edit([
new TextField('details', 'Details'),
]),
new View([
new TextField('id', 'ID'),
new DateField('operation_date', 'Date'),
new TextField('op_type', 'Type 1'),
new TextField('type_display', 'Type 2'),
new TextField('details', 'Details'),
new NumberField('amount_in_cents', 'Montant (in cents)'),
new NumberField('amount', 'Montant'),
new NumberField('hash', 'Hash'),
new TextField('bank_account', 'Bank account'),
]),
],

stateProvider: new CallbackStateProvider<Operation>(async (operation: CrudOperation, requestParameters: RequestParameters) => {
if (typeof window === 'undefined') {
// SSR, can't call Tauri API then.
return Promise.resolve([]);
}

if (operation.name === 'list') {
const results = await getTriageOperations(requestParameters.page||1);
const numberOfItems = await getTriageOperationsCount();
return Promise.resolve(new PaginatedResults(requestParameters.page, numberOfItems / operation.options.pagination.itemsPerPage, numberOfItems, results));
}

if (operation.name === 'view' || operation.name === 'edit') {
return getOperationById(requestParameters.id);
}

return Promise.resolve(null);
}),
stateProcessor: new CallbackStateProcessor<Operation>(async (data: StateProcessorInput<Operation>, operation: CrudOperation, requestParameters: RequestParameters) => {

if (operation.name === 'edit' || operation.name === 'delete') {
const operationObject = await getOperationById(requestParameters.id);
if (!operationObject) {
throw new Error(`Could not find operation with id "${requestParameters.id}".`);
}

if (operation.name === 'edit') {
operationObject.details = data.details;
await updateOperationDetails(operationObject);
}

if (operation.name === 'delete') {
await deleteOperation(operationObject);
}

success('Success!');
await goto('/crud/triage/list');
return;
}
})
});
12 changes: 1 addition & 11 deletions src/lib/db/operations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ import {OrderBy, orderByToString} from '$lib/admin/src/OrderBy';
import type FilterWithValue from '$lib/admin/src/FilterWithValue';
import type SavedFilter from '$lib/admin/src/SavedFilter';

const lastTriageCall = {
page: 1
};

export default class DeserializedOperation {
public readonly id!: number;
public readonly operation_date!: string;
Expand Down Expand Up @@ -80,11 +76,7 @@ export async function getTriageOperations(page: number = 1): Promise<Array<Opera
throw 'No results from the API';
}

const triage = await deserializeAndNormalizeDatabaseResult(res);

lastTriageCall.page = page;

return triage;
return await deserializeAndNormalizeDatabaseResult(res);
}

export async function getTriageOperationsCount(): Promise<number> {
Expand Down Expand Up @@ -118,8 +110,6 @@ export async function deleteOperation(operation: Operation) {
const id = operation.id.toString(10);

await api_call('operation_delete', { id: id });

await getTriageOperations(lastTriageCall.page);
}

export async function getOperationById(id: number): Promise<Operation | null> {
Expand Down

0 comments on commit 71be3f0

Please sign in to comment.