diff --git a/src/components/GroupDetail.svelte b/src/components/GroupDetail.svelte index 5f76c6c8..5c434392 100644 --- a/src/components/GroupDetail.svelte +++ b/src/components/GroupDetail.svelte @@ -3,54 +3,39 @@ import lodashIsEqual from "lodash.isequal"; import store from "../store"; import { - RunnerService, - RunnerTeamService, - RunnerOrganizationService, + UserGroupService } 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); + const promise = UserGroupService.userGroupControllerGetOne(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 !== ""; + $: isGroupnameValid = editable.name !== ""; $: save_enabled = - changes_performed && isFirstnameValid && isLastnameValid && isEmailValid; - runner_promise.then((data) => { + changes_performed && isGroupnameValid + promise.then((data) => { + console.log(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"), + text: $_('updating-group'), duration: 2500, }).showToast(); - RunnerService.runnerControllerPut(original_data.id, editable) + UserGroupService.userGroupControllerPut(original_data.id, editable) .then((resp) => { Object.assign(original_data, editable); original_data = editable; Object.assign(original_data, editable); Toastify({ - text: $_("runner-updated"), + text: $_('group-updated'), duration: 2500, backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", }).showToast(); @@ -59,8 +44,8 @@ } else { } } - function deleteRunner() { - RunnerService.runnerControllerRemove(original_data.id, true) + function deleteGroup() { + UserGroupService.userGroupControllerRemove(original_data.id, true) .then((resp) => { location.replace("./"); }) @@ -68,8 +53,8 @@ } -{#await runner_promise} - {$_('loading-runners')} +{#await promise} + {$_('loading-group-detail')} {:then}
@@ -77,18 +62,10 @@
- {original_data.firstname} - {original_data.middlename || ''} - {original_data.lastname} - - {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:DELETE')} + {original_data.name} + + {#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:DELETE')} {#if delete_triggered} + 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-group')} {/if} {/if} {#if !delete_triggered} @@ -152,111 +125,40 @@
+ for="title" + class="font-medium text-gray-700">{$_('name')} + {#if !isGroupnameValid} + + Group name is required + + {/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 + {$_('permissions')}
{:catch error} diff --git a/src/components/Groups.svelte b/src/components/Groups.svelte index 37203e68..d56e0925 100644 --- a/src/components/Groups.svelte +++ b/src/components/Groups.svelte @@ -2,8 +2,8 @@ import { _ } from "svelte-i18n"; import store from "../store"; import AddGroupModal from "./AddGroupModal.svelte"; - import RunnersOverview from "./RunnersOverview.svelte"; - $: current_runners = []; + import UserGroupsOverview from "./UserGroupsOverview.svelte"; + $: current_groups = []; export let modal_open = false; @@ -21,9 +21,9 @@ {/if} - + {#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:CREATE')} - + {/if} diff --git a/src/components/UserGroupsEmptyState.svelte b/src/components/UserGroupsEmptyState.svelte new file mode 100644 index 00000000..271e62ae --- /dev/null +++ b/src/components/UserGroupsEmptyState.svelte @@ -0,0 +1,12 @@ + + +
+

+ + There are no group added yet.
+ Add your first group +

+
\ No newline at end of file diff --git a/src/components/UserGroupsOverview.svelte b/src/components/UserGroupsOverview.svelte new file mode 100644 index 00000000..21270b98 --- /dev/null +++ b/src/components/UserGroupsOverview.svelte @@ -0,0 +1,125 @@ + + +{#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:GET')} + {#await groups_promise} + + {:then} + {#if current_groups.length === 0} + + {:else} + +
+ + + + + + + + + + {#each current_groups as group} + {#if Object.values(group) + .toString() + .toLowerCase() + .includes(searchvalue)} + + + + {#if active_deletes[group.id] === true} + + {:else} + + {/if} + + {/if} + {/each} + +
+ {$_('name')} + + {$_('description')} + + {$_('action')} +
+
+
+
+ {group.name} +
+
+
+
+ {group.description} + + + + + Edit + {#if store.state.jwtinfo.userdetails.permissions.includes('USERGROUP:DELETE')} + + {/if} +
+
+ {/if} + {:catch error} +
+ + {$_('general_promise_error')} + {error} + +
+ {/await} +{/if} diff --git a/src/components/groups_empty.svg b/src/components/groups_empty.svg new file mode 100644 index 00000000..32053770 --- /dev/null +++ b/src/components/groups_empty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json index dd9ccd3e..471509b8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -49,11 +49,13 @@ "an_error_happened_while_fetching_the_data": "An error happened while fetching the data" }, "delete": "Delete", + "delete-group": "Delete Group", "delete-organization": "Delete Organization", "delete-runner": "Delete Runner", "delete-team": "Delete Team", "delete-user": "Delete User", "dependency_name": "Name", + "description": "Description", "distance": "Distance", "distance-in-km": "Distance in km", "dont-have-your-email-connected": "Don't have your email connected?", @@ -92,7 +94,9 @@ "go-to-login": "Go To Login", "goback": "Go Home", "group": "Group", + "group-updated": "Group updated!", "groups": "Groups", + "groups-are-being-loaded": "Groups are being loaded...", "hallo": "hello", "icon-image-credits": "We also want to thank these projects for illustrations and icons:", "import-runners": "Import runners", @@ -106,6 +110,7 @@ "lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.", "license": "License", "licenses-are-being-loaded": "Licenses are being loaded...", + "loading-group-detail": "Loading group detail...", "loading-runners": "loading runners...", "log_in": "Log in", "log_in_to_your_account": "Log in to your account", @@ -168,6 +173,7 @@ "track-length-in-m": "Track Length in m", "track-name": "Track name", "tracks": "Tracks", + "updating-group": "Updating group...", "updating-runner": "Updating runner...", "updating-user": "updating user...", "user-updated": "User updated",