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; + }}> + + + + + + + + + + + + + + + {$_('create-a-new-runner')} + + + + {$_('please-provide-the-required-information-to-add-a-new-runner')} + + + + + {$_('first-name')} + + {#if !isFirstnameValid} + + {$_('first-name-is-required')} + + {/if} + + + {$_('middle-name')} + + + + Last Name + + {#if !isLastnameValid} + + {$_('last-name-is-required')} + + {/if} + + + {$_('team')} + + {#each teams as team} + + {team.parentGroup.name} + > + {team.name} + + {/each} + {#each orgs as org} + {org.name} + {/each} + + + + Phone + + {#if !isPhoneValidOrEmpty} + + {$_('the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number')} + + {/if} + + + {$_('e-mail-adress')} + + {#if !isEmailValidOrEmpty} + + {$_('valid-email-is-required')} + + {/if} + + + + + + + + {$_('create')} + + { + modal_open = false; + }} + type="button" + class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"> + {$_('cancel')} + + + + + +{/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} + + + + + + + + + + + {$_('runners')} + + + + {original_data.firstname} + {original_data.middlename || ''} + {original_data.lastname} + + + + + + + {original_data.firstname} + {original_data.middlename || ''} + {original_data.lastname} + + {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:DELETE')} + {#if delete_triggered} + {$_('confirm-deletion')} + { + delete_triggered = !delete_triggered; + }} + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-400 text-base font-medium text-white sm:w-auto sm:text-sm">{$_('cancel')} + {/if} + {#if !delete_triggered} + { + delete_triggered = true; + }} + type="button" + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">{$_('delete-runner')} + {/if} + {/if} + {#if !delete_triggered} + {$_('save-changes')} + {/if} + + + + + {$_('first-name')} + + {#if !isFirstnameValid} + + {$_('first-name-is-required')} + + {/if} + + + {$_('middle-name')} + + + + {$_('last-name')} + + {#if !isLastnameValid} + + {$_('last-name-is-required')} + + {/if} + + + {$_('e-mail-adress')} + + {#if !isEmailValid} + + {$_('valid-email-is-required')} + + {/if} + + + {$_('phone')} + + + + {$_('group')} + + {#each teams as team} + + {team.parentGroup.name} + > + {team.name} + + {/each} + {#each orgs as org} + {org.name} + {/each} + + + + {$_('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')} + { + modal_open = true; + }} + type="button" + class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"> + Add User Group + + {/if} + + + + +{#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:CREATE')} + +{/if}
+ {$_('please-provide-the-required-information-to-add-a-new-runner')} +