summaryrefslogtreecommitdiffstats
path: root/apps/projects/src/app/lib/stores/labels.ts
blob: d5ffaa99a8d4d742f40d0b793e1fda8e0d08bde5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import {writable, get} from "svelte/store";
import {create_time_label, delete_time_label, get_time_labels} from "$shared/lib/api/time-entry";
import type {IInternalFetchResponse} from "$shared/lib/models/IInternalFetchResponse";
import type {TimeLabelDto} from "$shared/lib/models/TimeLabelDto";

const labels = writable<Array<TimeLabelDto>>([]);

export async function reload_labels() {
    const get_labels_response = await get_time_labels();
    if (!get_labels_response.ok) {
        clear_labels();
        return;
    }
    labels.set(get_labels_response.data ?? []);
}

export function clear_labels() {
    labels.set([]);
}

export async function create_label_async(request: TimeLabelDto): Promise<IInternalFetchResponse> {
    const create_label_response = await create_time_label(request);
    if (create_label_response.ok) {
        const stored_entries = get(labels) ?? [];
        stored_entries.push(create_label_response.data);
        labels.set(stored_entries);
    }
    return create_label_response;
}

export async function edit_label_async(entry: TimeLabelDto) {
    if (!entry.id) throw new Error("Label id is required");
}

export async function delete_label_async(entry: TimeLabelDto) {
    if (!entry.id) return;
    const http_request = await delete_time_label(entry.id);
    if (http_request.ok) {
        const stored_entries = get(labels) ?? [];
        labels.set(stored_entries.filter(e => e.id !== entry.id));
    }
}

export default labels;