diff --git a/src/App.svelte b/src/App.svelte index e88cfdea..5a992616 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -53,6 +53,8 @@ import Imprint from "./components/Imprint.svelte"; import Privacy from "./components/Privacy.svelte"; import ResetPassword from "./components/ResetPassword.svelte"; +import Groups from "./components/Groups.svelte"; +import GroupDetail from "./components/GroupDetail.svelte"; store.init(); registerSW(); @@ -111,6 +113,14 @@ import ResetPassword from "./components/ResetPassword.svelte"; + + + + + + + + diff --git a/src/components/AddGroupModal.svelte b/src/components/AddGroupModal.svelte new file mode 100644 index 00000000..32c0da99 --- /dev/null +++ b/src/components/AddGroupModal.svelte @@ -0,0 +1,312 @@ + + +{#if modal_open} +
{ + modal_open = false; + }}> +
+ +
+{/if} diff --git a/src/components/Dashboard.svelte b/src/components/Dashboard.svelte index 23de2d92..1e77bf0a 100644 --- a/src/components/Dashboard.svelte +++ b/src/components/Dashboard.svelte @@ -122,6 +122,15 @@ {$_('tracks')} {/if} + {#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:GET')} + + + UserGroups + + {/if} + import { _ } from "svelte-i18n"; + import lodashIsEqual from "lodash.isequal"; + import store from "../store"; + import { + RunnerService, + RunnerTeamService, + RunnerOrganizationService, + } from "@odit/lfk-client-js"; + import Toastify from "toastify-js"; + import PromiseError from "./PromiseError.svelte"; + import isEmail from "validator/es/lib/isEmail"; + let data_loaded = false; + export let params; + const runner_promise = RunnerService.runnerControllerGetOne(params.groupid); + $: delete_triggered = false; + $: original_data = {}; + $: editable = {}; + $: changes_performed = !lodashIsEqual(original_data, editable); + $: isEmailValid = + (editable.email || "") === "" || + (editable.email && isEmail(editable.email || "")); + $: isFirstnameValid = editable.firstname !== ""; + $: isLastnameValid = editable.lastname !== ""; + $: save_enabled = + changes_performed && isFirstnameValid && isLastnameValid && isEmailValid; + runner_promise.then((data) => { + data_loaded = true; + original_data = Object.assign(original_data, data); + original_data.group = original_data.group.id; + editable = Object.assign(editable, original_data); + }); + let orgs = []; + RunnerOrganizationService.runnerOrganizationControllerGetAll().then((val) => { + orgs = val; + }); + let teams = []; + RunnerTeamService.runnerTeamControllerGetAll().then((val) => { + teams = val; + }); + function submit() { + if (data_loaded === true && save_enabled) { + Toastify({ + text: $_("updating-runner"), + duration: 2500, + }).showToast(); + RunnerService.runnerControllerPut(original_data.id, editable) + .then((resp) => { + Object.assign(original_data, editable); + original_data = editable; + Object.assign(original_data, editable); + Toastify({ + text: $_("runner-updated"), + duration: 2500, + backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", + }).showToast(); + }) + .catch((err) => {}); + } else { + } + } + function deleteRunner() { + RunnerService.runnerControllerRemove(original_data.id, true) + .then((resp) => { + location.replace("./"); + }) + .catch((err) => {}); + } + + +{#await runner_promise} + {$_('loading-runners')} +{:then} +
+
+
+ +
+
+
+ {original_data.firstname} + {original_data.middlename || ''} + {original_data.lastname} + + {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:DELETE')} + {#if delete_triggered} + + + {/if} + {#if !delete_triggered} + + {/if} + {/if} + {#if !delete_triggered} + + {/if} + +
+ +
+ + + {#if !isFirstnameValid} + + {$_('first-name-is-required')} + + {/if} +
+
+ + +
+
+ + + {#if !isLastnameValid} + + {$_('last-name-is-required')} + + {/if} +
+
+ + + {#if !isEmailValid} + + {$_('valid-email-is-required')} + + {/if} +
+
+ + +
+
+ {$_('group')} + +
+
+ {$_('distance')} +
+ {original_data.distance} km +
+
+{:catch error} + +{/await} diff --git a/src/components/Groups.svelte b/src/components/Groups.svelte new file mode 100644 index 00000000..37203e68 --- /dev/null +++ b/src/components/Groups.svelte @@ -0,0 +1,29 @@ + + +
+ + User Groups + {#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:CREATE')} + + {/if} + + +
+ +{#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:CREATE')} + +{/if}