From 241c31d0c2bcb9f21ba0a8d50dad45bf2f59c4ca Mon Sep 17 00:00:00 2001 From: IngMyr Date: Mon, 23 Sep 2024 16:03:23 +0200 Subject: [PATCH 01/12] Add generic search component and add search to group members --- app/components/common/Search/RoleSearch.tsx | 6 +++++ .../Search/index.tsx} | 26 +++++++++++-------- app/data/fetch-roles.ts | 4 +-- app/routes/assignment.resource.$id.role.tsx | 2 +- app/routes/resources.$id.role-assignments.tsx | 2 +- app/routes/roles.$id.members.tsx | 13 +++++++--- app/routes/roles._index.tsx | 2 +- 7 files changed, 36 insertions(+), 19 deletions(-) create mode 100644 app/components/common/Search/RoleSearch.tsx rename app/components/{role/RoleSearch.tsx => common/Search/index.tsx} (61%) diff --git a/app/components/common/Search/RoleSearch.tsx b/app/components/common/Search/RoleSearch.tsx new file mode 100644 index 0000000..afb2e83 --- /dev/null +++ b/app/components/common/Search/RoleSearch.tsx @@ -0,0 +1,6 @@ +import React from "react"; +import { Search } from "~/components/common/Search"; + +export const RoleSearch = () => ( + +); \ No newline at end of file diff --git a/app/components/role/RoleSearch.tsx b/app/components/common/Search/index.tsx similarity index 61% rename from app/components/role/RoleSearch.tsx rename to app/components/common/Search/index.tsx index 54eb2de..e8bea98 100644 --- a/app/components/role/RoleSearch.tsx +++ b/app/components/common/Search/index.tsx @@ -1,4 +1,4 @@ -import {Search} from "@navikt/ds-react"; +import {Search as AkselSearch} from "@navikt/ds-react"; import React, {useState} from "react"; import {Form, useSearchParams} from "@remix-run/react"; import { @@ -7,25 +7,29 @@ import { handleSearchFieldString } from "~/components/common/CommonFunctions"; -export const RoleSearch = () => { +type SearchInputProps = { + label: string + id: string +} +export const Search = ({label, id}: SearchInputProps) => { const [searchString, setSearchString] = useState("") const [searchParams, setSearchParams] = useSearchParams() const pageParam = searchParams.get("page") return ( -
{ - handleSearchFieldString(event, setSearchParams, searchString) - setSearchString("") - filterResetPageParam(pageParam, setSearchParams) - }} + { + handleSearchFieldString(event, setSearchParams, searchString) + filterResetPageParam(pageParam, setSearchParams) + }} > - } -export const fetchMembers = async (request: Request, id: string | undefined, size: string, page: string, search: string) => { - const response = await fetch(`${ROLE_API_URL}${BASE_PATH}/api/roles/${id}/members?size=${size}&page=${page}&search=${search}`, { +export const fetchMembers = async (request: Request, id: string | undefined, size: string, page: string, name: string) => { + const response = await fetch(`${ROLE_API_URL}${BASE_PATH}/api/roles/${id}/members?size=${size}&page=${page}&name=${name}`, { headers: request.headers }); diff --git a/app/routes/assignment.resource.$id.role.tsx b/app/routes/assignment.resource.$id.role.tsx index bc6fe79..846dcf6 100644 --- a/app/routes/assignment.resource.$id.role.tsx +++ b/app/routes/assignment.resource.$id.role.tsx @@ -14,7 +14,7 @@ import {BASE_PATH} from "../../environment"; import {getSizeCookieFromRequestHeader} from "~/components/common/CommonFunctions"; import {ResponseAlert} from "~/components/common/ResponseAlert"; import ChipsFilters from "~/components/common/ChipsFilters"; -import {RoleSearch} from "~/components/role/RoleSearch"; +import {RoleSearch} from "~/components/common/Search/RoleSearch"; export async function loader({params, request}: LoaderFunctionArgs): Promise & { json(): Promise diff --git a/app/routes/resources.$id.role-assignments.tsx b/app/routes/resources.$id.role-assignments.tsx index 38b182c..71bd0db 100644 --- a/app/routes/resources.$id.role-assignments.tsx +++ b/app/routes/resources.$id.role-assignments.tsx @@ -14,7 +14,7 @@ import {fetchResourceById} from "~/data/fetch-resources"; import {getSizeCookieFromRequestHeader} from "~/components/common/CommonFunctions"; import ChipsFilters from "~/components/common/ChipsFilters"; import {ResponseAlert} from "~/components/common/ResponseAlert"; -import {RoleSearch} from "~/components/role/RoleSearch"; +import {RoleSearch} from "~/components/common/Search/RoleSearch"; export function links() { return [{rel: 'stylesheet', href: styles}] diff --git a/app/routes/roles.$id.members.tsx b/app/routes/roles.$id.members.tsx index b3b3ea1..dc870f4 100644 --- a/app/routes/roles.$id.members.tsx +++ b/app/routes/roles.$id.members.tsx @@ -1,11 +1,12 @@ import React from 'react'; -import {Alert, Box, Detail, Heading, Tabs, VStack} from "@navikt/ds-react"; +import {Alert, Box, Detail, Heading, HStack, Tabs, VStack} from "@navikt/ds-react"; import {Link, Links, Meta, Scripts, useLoaderData, useRouteError} from "@remix-run/react"; -import {LoaderFunctionArgs} from "@remix-run/router"; +import {LoaderFunctionArgs} from "@remix-run/router"; import {fetchMembers} from "~/data/fetch-roles"; import {json} from "@remix-run/node"; import {MemberTable} from "~/components/role/MemberTable"; import {getSizeCookieFromRequestHeader} from "~/components/common/CommonFunctions"; +import {Search} from "~/components/common/Search"; export async function loader({params, request}: LoaderFunctionArgs) { const url = new URL(request.url); @@ -37,7 +38,13 @@ export default function Members() { Medlemmer av gruppen - Antall medlemmer i gruppen: {members.totalItems} + + Antall medlemmer i gruppen: {members.totalItems} + + diff --git a/app/routes/roles._index.tsx b/app/routes/roles._index.tsx index fe94e0f..69a9668 100644 --- a/app/routes/roles._index.tsx +++ b/app/routes/roles._index.tsx @@ -6,7 +6,7 @@ import type {IRoleList, IUnitItem, IUnitTree} from "~/data/types"; import type {LoaderFunctionArgs} from "@remix-run/router"; import {fetchRoles} from "~/data/fetch-roles"; import {RoleTable} from "~/components/role/RoleTable"; -import {RoleSearch} from "~/components/role/RoleSearch"; +import {RoleSearch} from "~/components/common/Search/RoleSearch"; import {fetchOrgUnits} from "~/data/fetch-resources"; import OrgUnitFilterModal from "../components/org-unit-filter/OrgUnitFilterModal"; import ChipsFilters from "~/components/common/ChipsFilters"; From 20ccced0cfd11094d22f0b537aa20731a301a866 Mon Sep 17 00:00:00 2001 From: IngMyr Date: Tue, 24 Sep 2024 10:37:57 +0200 Subject: [PATCH 02/12] Add chip --- app/components/common/Search/index.tsx | 1 + app/routes/roles.$id.members.tsx | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/components/common/Search/index.tsx b/app/components/common/Search/index.tsx index e8bea98..a43ff81 100644 --- a/app/components/common/Search/index.tsx +++ b/app/components/common/Search/index.tsx @@ -23,6 +23,7 @@ export const Search = ({label, id}: SearchInputProps) => { className={"searchField"} onSubmit={(event) => { handleSearchFieldString(event, setSearchParams, searchString) + setSearchString("") filterResetPageParam(pageParam, setSearchParams) }} > diff --git a/app/routes/roles.$id.members.tsx b/app/routes/roles.$id.members.tsx index dc870f4..549b86d 100644 --- a/app/routes/roles.$id.members.tsx +++ b/app/routes/roles.$id.members.tsx @@ -7,6 +7,7 @@ import {json} from "@remix-run/node"; import {MemberTable} from "~/components/role/MemberTable"; import {getSizeCookieFromRequestHeader} from "~/components/common/CommonFunctions"; import {Search} from "~/components/common/Search"; +import ChipsFilters from "~/components/common/ChipsFilters"; export async function loader({params, request}: LoaderFunctionArgs) { const url = new URL(request.url); @@ -45,6 +46,9 @@ export default function Members() { id={"search-member"} /> + + + From f9e6585c2c2d8674390aebb37ffddbdb8f82c8a6 Mon Sep 17 00:00:00 2001 From: IngMyr Date: Fri, 27 Sep 2024 12:47:47 +0200 Subject: [PATCH 03/12] Replace most of the search components --- .../assignment/AssignedRolesSearch.tsx | 27 ++----------- .../assignment/AssignedUsersSearch.tsx | 2 +- .../assignment/NewAssignmentRoleSearch.tsx | 1 + .../assignment/NewAssignmentUserSearch.tsx | 1 + .../common/{Search/index.tsx => Search.tsx} | 0 .../resource-admin/ResourceSearch.tsx | 34 ---------------- .../ResourceModuleSearch.tsx | 23 +++-------- app/components/resource/ResourceSearch.tsx | 39 ++----------------- .../{common/Search => role}/RoleSearch.tsx | 0 app/components/user/UserSearch.tsx | 38 ++---------------- app/routes/assignment.resource.$id.role.tsx | 2 +- app/routes/resource-admin._index.tsx | 5 +-- app/routes/resource-module-admin._index.tsx | 2 +- ...urce-module-admin.opprett-ny-tildeling.tsx | 2 +- app/routes/resources.$id.role-assignments.tsx | 2 +- app/routes/roles.$id.members.tsx | 10 ++--- app/routes/roles._index.tsx | 2 +- 17 files changed, 29 insertions(+), 161 deletions(-) rename app/components/common/{Search/index.tsx => Search.tsx} (100%) delete mode 100644 app/components/resource-admin/ResourceSearch.tsx rename app/components/{common/Search => role}/RoleSearch.tsx (100%) diff --git a/app/components/assignment/AssignedRolesSearch.tsx b/app/components/assignment/AssignedRolesSearch.tsx index 4834728..cea8cf7 100644 --- a/app/components/assignment/AssignedRolesSearch.tsx +++ b/app/components/assignment/AssignedRolesSearch.tsx @@ -1,29 +1,8 @@ -import {Search} from "@navikt/ds-react"; -import React, {useState} from "react"; -import {Form, useParams, useSubmit} from "@remix-run/react"; +import React from "react"; +import {Search} from "~/components/common/Search"; export const AssignedRolesSearch = () => { - - const submit = useSubmit(); - const [searchString, setSearchString] = useState("") - const params = useParams(); - return ( - { - submit({search: searchString}, {method: "GET", action: `/resources/${params.id}/role-assignments`}) - event.preventDefault() - }}> - setSearchString(event)} - onClear={event => { - submit({search: ""}, {method: "GET", action: `/resources/${params.id}/role-assignments`}) - }} - /> - + ); }; \ No newline at end of file diff --git a/app/components/assignment/AssignedUsersSearch.tsx b/app/components/assignment/AssignedUsersSearch.tsx index b620f73..abc4d97 100644 --- a/app/components/assignment/AssignedUsersSearch.tsx +++ b/app/components/assignment/AssignedUsersSearch.tsx @@ -4,7 +4,7 @@ import {Form, useParams, useSearchParams, useSubmit} from "@remix-run/react"; import {handleClearSearchFieldString, handleSearchFieldString} from "~/components/common/CommonFunctions"; export const AssignedUsersSearch = () => { - +// TODO: replace with common/search const submit = useSubmit(); const [searchString, setSearchString] = useState("") const params = useParams(); diff --git a/app/components/assignment/NewAssignmentRoleSearch.tsx b/app/components/assignment/NewAssignmentRoleSearch.tsx index cae16b9..b05d68e 100644 --- a/app/components/assignment/NewAssignmentRoleSearch.tsx +++ b/app/components/assignment/NewAssignmentRoleSearch.tsx @@ -4,6 +4,7 @@ import {Form, useParams, useSubmit} from "@remix-run/react"; export const NewAssignmentRoleSearch = () => { +// TODO: replace with common/search const submit = useSubmit(); const params = useParams(); diff --git a/app/components/assignment/NewAssignmentUserSearch.tsx b/app/components/assignment/NewAssignmentUserSearch.tsx index ee342f1..bdc9786 100644 --- a/app/components/assignment/NewAssignmentUserSearch.tsx +++ b/app/components/assignment/NewAssignmentUserSearch.tsx @@ -4,6 +4,7 @@ import {Form, useParams, useSubmit} from "@remix-run/react"; export const NewAssignmentUserSearch = () => { +// TODO: replace with common/search const submit = useSubmit(); const params = useParams(); diff --git a/app/components/common/Search/index.tsx b/app/components/common/Search.tsx similarity index 100% rename from app/components/common/Search/index.tsx rename to app/components/common/Search.tsx diff --git a/app/components/resource-admin/ResourceSearch.tsx b/app/components/resource-admin/ResourceSearch.tsx deleted file mode 100644 index a050218..0000000 --- a/app/components/resource-admin/ResourceSearch.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import {Search} from "@navikt/ds-react"; -import {Form, useSearchParams, useSubmit} from "@remix-run/react"; -import {filterResetPageParam} from "~/components/common/CommonFunctions"; -import {useState} from "react"; -import {handleClearSearchFieldString, handleSearchFieldString} from "~/components/common/CommonFunctions"; - -export const ResourceSearch = () => { - - const [searchString, setSearchString] = useState("") - const [searchParams, setSearchParams] = useSearchParams() - - const pageParam = searchParams.get("page") - return ( -
{ - filterResetPageParam(pageParam, setSearchParams) - handleSearchFieldString(event, setSearchParams, searchString) - setSearchString("") - }} - > - setSearchString(event)} - onClear={() => { - handleClearSearchFieldString(setSearchParams) - }} - /> - - ); -}; \ No newline at end of file diff --git a/app/components/resource-module-admin/ResourceModuleSearch.tsx b/app/components/resource-module-admin/ResourceModuleSearch.tsx index af4701e..4b4505a 100644 --- a/app/components/resource-module-admin/ResourceModuleSearch.tsx +++ b/app/components/resource-module-admin/ResourceModuleSearch.tsx @@ -1,23 +1,12 @@ -import {Search} from "@navikt/ds-react"; -import {useSearchParams} from "@remix-run/react"; -import React, {useState} from "react"; +import React from "react"; +import {Search} from "~/components/common/Search"; const ResourceModuleSearch = () => { - const [searchValue, setSearchValue] = useState("") - const [, setSearchParams] = useSearchParams() - - const handleSearch = (event: React.FormEvent) => { - setSearchParams(searchParams => { - searchValue ? searchParams.set("name", searchValue) : searchParams.delete("name") - return searchParams - }) - event.preventDefault() // Prevent refresh of page - } - return ( -
handleSearch(event)}> - setSearchValue(event)} /> - + ) } diff --git a/app/components/resource/ResourceSearch.tsx b/app/components/resource/ResourceSearch.tsx index 2c08293..d6f1616 100644 --- a/app/components/resource/ResourceSearch.tsx +++ b/app/components/resource/ResourceSearch.tsx @@ -1,39 +1,6 @@ -import {Search} from "@navikt/ds-react"; -import {useState} from "react"; -import {Form, useSearchParams} from "@remix-run/react"; -import { - filterResetPageParam, - handleClearSearchFieldString, - handleSearchFieldString -} from "~/components/common/CommonFunctions"; +import React from "react"; +import {Search} from "~/components/common/Search"; export const ResourceSearch = () => { - - const [searchString, setSearchString] = useState("") - const [searchParams, setSearchParams] = useSearchParams() - - const pageParam = searchParams.get("page") - - return ( -
{ - handleSearchFieldString(event, setSearchParams, searchString) - setSearchString("") - filterResetPageParam(pageParam, setSearchParams) - }} - > - setSearchString(event)} - onClear={() => { - handleClearSearchFieldString(setSearchParams) - }} - /> - - ); + return }; \ No newline at end of file diff --git a/app/components/common/Search/RoleSearch.tsx b/app/components/role/RoleSearch.tsx similarity index 100% rename from app/components/common/Search/RoleSearch.tsx rename to app/components/role/RoleSearch.tsx diff --git a/app/components/user/UserSearch.tsx b/app/components/user/UserSearch.tsx index f63a9d4..156bc1a 100644 --- a/app/components/user/UserSearch.tsx +++ b/app/components/user/UserSearch.tsx @@ -1,40 +1,8 @@ -import {Search} from "@navikt/ds-react"; -import React, {useState} from "react"; -import {Form, useSearchParams} from "@remix-run/react"; -import { - filterResetPageParam, - handleClearSearchFieldString, - handleSearchFieldString -} from "~/components/common/CommonFunctions"; - +import React from "react"; +import {Search} from "~/components/common/Search"; export const UserSearch = () => { - - const [searchString, setSearchString] = useState("") - const [searchParams, setSearchParams] = useSearchParams() - - const pageParam = searchParams.get("page") - return ( -
{ - handleSearchFieldString(event, setSearchParams, searchString) - setSearchString("") - filterResetPageParam(pageParam, setSearchParams) - }} - > - setSearchString(event)} - onClear={() => { - handleClearSearchFieldString(setSearchParams) - }} - /> - + ); }; \ No newline at end of file diff --git a/app/routes/assignment.resource.$id.role.tsx b/app/routes/assignment.resource.$id.role.tsx index 846dcf6..bc6fe79 100644 --- a/app/routes/assignment.resource.$id.role.tsx +++ b/app/routes/assignment.resource.$id.role.tsx @@ -14,7 +14,7 @@ import {BASE_PATH} from "../../environment"; import {getSizeCookieFromRequestHeader} from "~/components/common/CommonFunctions"; import {ResponseAlert} from "~/components/common/ResponseAlert"; import ChipsFilters from "~/components/common/ChipsFilters"; -import {RoleSearch} from "~/components/common/Search/RoleSearch"; +import {RoleSearch} from "~/components/role/RoleSearch"; export async function loader({params, request}: LoaderFunctionArgs): Promise & { json(): Promise diff --git a/app/routes/resource-admin._index.tsx b/app/routes/resource-admin._index.tsx index 203347c..8308e48 100644 --- a/app/routes/resource-admin._index.tsx +++ b/app/routes/resource-admin._index.tsx @@ -4,7 +4,7 @@ import {Links, Meta, Scripts, useLoaderData, useRouteError} from "@remix-run/rea import {IResourceAdminList, IUnitItem, IUnitTree} from "~/data/types"; import type {LoaderFunctionArgs} from "@remix-run/router"; import {fetchApplicationCategory, fetchOrgUnits, fetchResourcesForAdmin} from "~/data/fetch-resources"; -import {ResourceSearch} from "~/components/resource-admin/ResourceSearch"; +import {Search} from "~/components/common/Search"; import {ResourceAdminTable} from "~/components/resource-admin/ResourceAdminTable"; import ChipsFilters from "~/components/common/ChipsFilters"; import {ResourceSelectApplicationCategory} from "~/components/resource-admin/ResourceSelectApplicationCategory"; @@ -97,8 +97,7 @@ export default function ResourceAdminIndex() { ))} */} - - + diff --git a/app/routes/resource-module-admin._index.tsx b/app/routes/resource-module-admin._index.tsx index c07f21b..5a92f71 100644 --- a/app/routes/resource-module-admin._index.tsx +++ b/app/routes/resource-module-admin._index.tsx @@ -25,7 +25,7 @@ export async function loader({request}: LoaderFunctionArgs) { const size = Number(url.searchParams.get("size") ?? "10"); const page = Number(url.searchParams.get("page") ?? "0"); const orgunits: string[] = url.searchParams.get("orgUnits")?.split(",") ?? [""]; - const name = url.searchParams.get("name") ?? ""; + const name = url.searchParams.get("search") ?? ""; const role = url.searchParams.get("accessroleid") ?? ""; const responseUsersPage = await fetchUsersWithAssignment(auth, page, size, orgunits, name, role); diff --git a/app/routes/resource-module-admin.opprett-ny-tildeling.tsx b/app/routes/resource-module-admin.opprett-ny-tildeling.tsx index 76e470d..85685aa 100644 --- a/app/routes/resource-module-admin.opprett-ny-tildeling.tsx +++ b/app/routes/resource-module-admin.opprett-ny-tildeling.tsx @@ -55,7 +55,7 @@ export async function loader({request}: LoaderFunctionArgs) { const itemsPerPage = url.searchParams.get("size") ?? "10"; const currentPage = url.searchParams.get("page") ?? "0"; const orgUnitIds = url.searchParams.get("orgUnits")?.split(",") ?? []; - const name = url.searchParams.get("name") ?? ""; + const name = url.searchParams.get("search") ?? ""; const roleFilter = url.searchParams.get("accessroleid") ?? "" const usersPageResponse = await fetchUsersWhoCanGetAssignments(auth, Number(currentPage), Number(itemsPerPage), orgUnitIds, name, roleFilter); diff --git a/app/routes/resources.$id.role-assignments.tsx b/app/routes/resources.$id.role-assignments.tsx index 71bd0db..38b182c 100644 --- a/app/routes/resources.$id.role-assignments.tsx +++ b/app/routes/resources.$id.role-assignments.tsx @@ -14,7 +14,7 @@ import {fetchResourceById} from "~/data/fetch-resources"; import {getSizeCookieFromRequestHeader} from "~/components/common/CommonFunctions"; import ChipsFilters from "~/components/common/ChipsFilters"; import {ResponseAlert} from "~/components/common/ResponseAlert"; -import {RoleSearch} from "~/components/common/Search/RoleSearch"; +import {RoleSearch} from "~/components/role/RoleSearch"; export function links() { return [{rel: 'stylesheet', href: styles}] diff --git a/app/routes/roles.$id.members.tsx b/app/routes/roles.$id.members.tsx index 549b86d..fedcc56 100644 --- a/app/routes/roles.$id.members.tsx +++ b/app/routes/roles.$id.members.tsx @@ -26,7 +26,7 @@ export async function loader({params, request}: LoaderFunctionArgs) { export const handle = { // @ts-ignore - breadcrumb: ({ params, data }) => Medlemmer + breadcrumb: ({params, data}) => Medlemmer } export default function Members() { @@ -41,22 +41,20 @@ export default function Members() { Medlemmer av gruppen Antall medlemmer i gruppen: {members.totalItems} - + - +
); } + export function ErrorBoundary() { const error: any = useRouteError(); // console.error(error); diff --git a/app/routes/roles._index.tsx b/app/routes/roles._index.tsx index 69a9668..fe94e0f 100644 --- a/app/routes/roles._index.tsx +++ b/app/routes/roles._index.tsx @@ -6,7 +6,7 @@ import type {IRoleList, IUnitItem, IUnitTree} from "~/data/types"; import type {LoaderFunctionArgs} from "@remix-run/router"; import {fetchRoles} from "~/data/fetch-roles"; import {RoleTable} from "~/components/role/RoleTable"; -import {RoleSearch} from "~/components/common/Search/RoleSearch"; +import {RoleSearch} from "~/components/role/RoleSearch"; import {fetchOrgUnits} from "~/data/fetch-resources"; import OrgUnitFilterModal from "../components/org-unit-filter/OrgUnitFilterModal"; import ChipsFilters from "~/components/common/ChipsFilters"; From 1aac7d167dc52495008ed40043cb9dcd9f2ef2aa Mon Sep 17 00:00:00 2001 From: IngMyr Date: Mon, 30 Sep 2024 09:46:25 +0200 Subject: [PATCH 04/12] Delete unused components --- .../assignment/AssignedRolesSearch.tsx | 8 ----- .../assignment/AssignedUsersSearch.tsx | 32 ------------------- .../assignment/NewAssignmentRoleSearch.tsx | 31 ------------------ .../assignment/NewAssignmentUserSearch.tsx | 32 ------------------- 4 files changed, 103 deletions(-) delete mode 100644 app/components/assignment/AssignedRolesSearch.tsx delete mode 100644 app/components/assignment/AssignedUsersSearch.tsx delete mode 100644 app/components/assignment/NewAssignmentRoleSearch.tsx delete mode 100644 app/components/assignment/NewAssignmentUserSearch.tsx diff --git a/app/components/assignment/AssignedRolesSearch.tsx b/app/components/assignment/AssignedRolesSearch.tsx deleted file mode 100644 index cea8cf7..0000000 --- a/app/components/assignment/AssignedRolesSearch.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import {Search} from "~/components/common/Search"; - -export const AssignedRolesSearch = () => { - return ( - - ); -}; \ No newline at end of file diff --git a/app/components/assignment/AssignedUsersSearch.tsx b/app/components/assignment/AssignedUsersSearch.tsx deleted file mode 100644 index abc4d97..0000000 --- a/app/components/assignment/AssignedUsersSearch.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import {Search} from "@navikt/ds-react"; -import React, {useState} from "react"; -import {Form, useParams, useSearchParams, useSubmit} from "@remix-run/react"; -import {handleClearSearchFieldString, handleSearchFieldString} from "~/components/common/CommonFunctions"; - -export const AssignedUsersSearch = () => { -// TODO: replace with common/search - const submit = useSubmit(); - const [searchString, setSearchString] = useState("") - const params = useParams(); - const [, setSearchParams] = useSearchParams() - - return ( -
handleSearchFieldString(event, setSearchParams, searchString)} - > - setSearchString(event)} - onClear={() => { - handleClearSearchFieldString(setSearchParams) - }} - /> - - ); -}; \ No newline at end of file diff --git a/app/components/assignment/NewAssignmentRoleSearch.tsx b/app/components/assignment/NewAssignmentRoleSearch.tsx deleted file mode 100644 index b05d68e..0000000 --- a/app/components/assignment/NewAssignmentRoleSearch.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import {Search} from "@navikt/ds-react"; -import React, {useState} from "react"; -import {Form, useParams, useSubmit} from "@remix-run/react"; - - -export const NewAssignmentRoleSearch = () => { -// TODO: replace with common/search - - const submit = useSubmit(); - const params = useParams(); - const [searchString, setSearchString] = useState(""); - - return ( -
{ - submit({search: searchString}, {method: "GET", action: `/assignment/resource/${params.id}/role`}) - event.preventDefault() - }}> - setSearchString(event)} - onClear={event => { - submit({search: ""}, {method: "GET", action: `/assignment/resource/${params.id}/role`}) - }} - /> - - ); -}; \ No newline at end of file diff --git a/app/components/assignment/NewAssignmentUserSearch.tsx b/app/components/assignment/NewAssignmentUserSearch.tsx deleted file mode 100644 index bdc9786..0000000 --- a/app/components/assignment/NewAssignmentUserSearch.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import {Search} from "@navikt/ds-react"; -import React, {useState} from "react"; -import {Form, useParams, useSubmit} from "@remix-run/react"; - - -export const NewAssignmentUserSearch = () => { -// TODO: replace with common/search - - const submit = useSubmit(); - const params = useParams(); - const [searchString, setSearchString] = useState(""); - - return ( -
{ - submit({search: searchString}, {method: "GET", action: `/assignment/resource/${params.id}/user`}) - event.preventDefault() - }}> - setSearchString(event)} - onClear={event => { - submit({search: ""}, {method: "GET", action: `/assignment/resource/${params.id}/user`}) - }} - /> - - ); -}; \ No newline at end of file From 9d0aeac63aa03ec532a4e364b3936b79b3d9f786 Mon Sep 17 00:00:00 2001 From: IngMyr Date: Tue, 1 Oct 2024 15:05:41 +0200 Subject: [PATCH 05/12] Add spinner to search button --- app/components/common/Search.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/components/common/Search.tsx b/app/components/common/Search.tsx index a43ff81..2978e1c 100644 --- a/app/components/common/Search.tsx +++ b/app/components/common/Search.tsx @@ -1,6 +1,6 @@ import {Search as AkselSearch} from "@navikt/ds-react"; import React, {useState} from "react"; -import {Form, useSearchParams} from "@remix-run/react"; +import {Form, useNavigation, useSearchParams} from "@remix-run/react"; import { filterResetPageParam, handleClearSearchFieldString, @@ -16,6 +16,9 @@ export const Search = ({label, id}: SearchInputProps) => { const [searchString, setSearchString] = useState("") const [searchParams, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const searching = navigation.location && new URLSearchParams(navigation.location.search).has("search"); + const pageParam = searchParams.get("page") return ( @@ -38,7 +41,8 @@ export const Search = ({label, id}: SearchInputProps) => { onClear={() => { handleClearSearchFieldString(setSearchParams) }} - /> + > + ); }; \ No newline at end of file From 84af4d355274363d0a6ae9cd08ffb65b918ef741 Mon Sep 17 00:00:00 2001 From: IngMyr Date: Tue, 1 Oct 2024 15:06:13 +0200 Subject: [PATCH 06/12] Prevent button text form breacking --- app/styles/main.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/styles/main.css b/app/styles/main.css index b884270..58e972a 100644 --- a/app/styles/main.css +++ b/app/styles/main.css @@ -156,4 +156,8 @@ table { .navds-tag-in-table{ margin: var(--a-spacing-3) var(--a-spacing-5); -} \ No newline at end of file +} + +button { + white-space: nowrap; +} From c7346df6a462f61eb7efa52c6ecbfa6d8ef51610 Mon Sep 17 00:00:00 2001 From: IngMyr Date: Tue, 1 Oct 2024 15:09:09 +0200 Subject: [PATCH 07/12] Add Skeleton to tables with data fetching --- .../assignment/AssignedRolesTable.tsx | 9 ++- .../assignment/AssignedUsersTable.tsx | 9 ++- .../assignment/NewAssignmentRoleTable.tsx | 9 ++- .../assignment/NewAssignmentUserTable.tsx | 9 ++- app/components/common/CommonFunctions.ts | 4 ++ app/components/common/Table/TableSkeleton.tsx | 26 ++++++++ .../resource-admin/ResourceAdminTable.tsx | 9 ++- .../ResourceModuleAdminUsersTable.tsx | 34 +++++----- .../administer/RoleAssignmentTable.tsx | 9 ++- app/components/resource/ResourceTable.tsx | 9 ++- .../role/AssignResourceToRoleTable.tsx | 9 ++- app/components/role/MemberTable.tsx | 9 ++- app/components/role/RoleTable.tsx | 64 ++++++++++--------- .../user/AssignResourceToUserTable.tsx | 9 ++- .../user/AssignmentsForUserTable.tsx | 9 ++- app/components/user/UserTable.tsx | 10 +-- 16 files changed, 155 insertions(+), 82 deletions(-) create mode 100644 app/components/common/Table/TableSkeleton.tsx diff --git a/app/components/assignment/AssignedRolesTable.tsx b/app/components/assignment/AssignedRolesTable.tsx index ccb1e25..781381f 100644 --- a/app/components/assignment/AssignedRolesTable.tsx +++ b/app/components/assignment/AssignedRolesTable.tsx @@ -1,9 +1,10 @@ import {Box, Button, Heading, Link, Pagination, Select, Table, VStack} from "@navikt/ds-react"; import type {IAssignedRoles} from "~/data/types"; import React from "react"; -import {Outlet, useParams, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigation, useParams, useSearchParams} from "@remix-run/react"; import {TrashIcon} from "@navikt/aksel-icons"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; export const AssignedRolesTable: any = (props: { assignedRoles: IAssignedRoles, @@ -15,6 +16,8 @@ export const AssignedRolesTable: any = (props: { const [searchParams, setSearchParams] = useSearchParams() const params = useParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -41,7 +44,7 @@ export const AssignedRolesTable: any = (props: { - {props.assignedRoles.roles.map((role) => ( + {loading ? : props.assignedRoles.roles.map((role) => ( {role.roleName} {role.roleType} diff --git a/app/components/assignment/AssignedUsersTable.tsx b/app/components/assignment/AssignedUsersTable.tsx index 8746b93..0b4983a 100644 --- a/app/components/assignment/AssignedUsersTable.tsx +++ b/app/components/assignment/AssignedUsersTable.tsx @@ -1,9 +1,10 @@ import {Box, Button, Heading, Link, Pagination, Select, Table, Tag, VStack} from "@navikt/ds-react"; import type {IAssignedUsers} from "~/data/types"; import React from "react"; -import {Outlet, useParams, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigation, useParams, useSearchParams} from "@remix-run/react"; import {TrashIcon} from "@navikt/aksel-icons"; -import {prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface AssignedUsersTableProps { assignedUsers: IAssignedUsers, size: string @@ -14,6 +15,8 @@ export const AssignedUsersTable = ({ assignedUsers, size, basePath }: AssignedUs const [searchParams, setSearchParams] = useSearchParams() const params = useParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -41,7 +44,7 @@ export const AssignedUsersTable = ({ assignedUsers, size, basePath }: AssignedUs - {assignedUsers.users.map((user) => ( + {loading ? : assignedUsers.users.map((user) => ( {user.assigneeFirstName} {user.assigneeLastName} {user.assigneeUserType} diff --git a/app/components/assignment/NewAssignmentRoleTable.tsx b/app/components/assignment/NewAssignmentRoleTable.tsx index 8971997..0cbaf7d 100644 --- a/app/components/assignment/NewAssignmentRoleTable.tsx +++ b/app/components/assignment/NewAssignmentRoleTable.tsx @@ -1,9 +1,10 @@ import {Box, Button, Heading, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; import type {IRole} from "~/data/types"; import React from "react"; -import {Outlet, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; export const AssignRoleTable: any = (props: { isAssignedRoles: IRole[], @@ -16,6 +17,8 @@ export const AssignRoleTable: any = (props: { }) => { const [searchParams, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -39,7 +42,7 @@ export const AssignRoleTable: any = (props: { - {props.isAssignedRoles.map((role: IRole) => ( + {loading ? : props.isAssignedRoles.map((role: IRole) => ( {role.roleName} {role.roleType} diff --git a/app/components/assignment/NewAssignmentUserTable.tsx b/app/components/assignment/NewAssignmentUserTable.tsx index 90c807b..74006f0 100644 --- a/app/components/assignment/NewAssignmentUserTable.tsx +++ b/app/components/assignment/NewAssignmentUserTable.tsx @@ -1,9 +1,10 @@ import {Box, Button, Heading, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; import type {IUser, IUserItem} from "~/data/types"; import React from "react"; -import {Outlet, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface AssignUserTableProps { @@ -23,6 +24,8 @@ export const AssignUserTable = ({ basePath, }: AssignUserTableProps) => { const [searchParams, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -48,7 +51,7 @@ export const AssignUserTable = ({ - {isAssignedUsers.map((user: IUserItem) => ( + {loading ? : isAssignedUsers.map((user: IUserItem) => ( {user.fullName} {user.userType} diff --git a/app/components/common/CommonFunctions.ts b/app/components/common/CommonFunctions.ts index 07398a9..0526859 100644 --- a/app/components/common/CommonFunctions.ts +++ b/app/components/common/CommonFunctions.ts @@ -1,6 +1,7 @@ import React from "react"; import {SetURLSearchParams} from "react-router-dom"; import {ICookie} from "~/data/types"; +import {Navigation} from "@remix-run/react"; // Discovers all query params and formats them. Returns a string prepared for insertion in an url. export const prepareQueryParams = (searchParams: URLSearchParams): string => { @@ -95,3 +96,6 @@ export const getSizeCookieFromRequestHeader = (request: Request): ICookie | null } return null; }; + +export const isLoading = ({location}: Navigation) => + location && new URLSearchParams(location.search).size > 0; diff --git a/app/components/common/Table/TableSkeleton.tsx b/app/components/common/Table/TableSkeleton.tsx new file mode 100644 index 0000000..087ca76 --- /dev/null +++ b/app/components/common/Table/TableSkeleton.tsx @@ -0,0 +1,26 @@ +import {Skeleton, Table} from "@navikt/ds-react"; +import React from "react"; + +type LoadingSpinnerProps = { + columns?: number + rows?: number + height?: number +} + +const SkeletonRow = ({ columns = 4, height = 50 }: LoadingSpinnerProps) => ( + + {Array.from({ length: columns }).map((_, index) => ( + + + + ))} + +); + +export const TableSkeleton = ({ rows = 4, columns = 4, height = 50 }: LoadingSpinnerProps) => ( + <> + {Array.from({ length: rows }).map((_, index) => ( + + ))} + +); \ No newline at end of file diff --git a/app/components/resource-admin/ResourceAdminTable.tsx b/app/components/resource-admin/ResourceAdminTable.tsx index 936a4f4..e18d769 100644 --- a/app/components/resource-admin/ResourceAdminTable.tsx +++ b/app/components/resource-admin/ResourceAdminTable.tsx @@ -1,10 +1,11 @@ import {Button, Dropdown, HStack, Link, Pagination, Select, Table} from "@navikt/ds-react"; import {FunnelIcon, InformationSquareIcon, MinusIcon, TrashIcon} from "@navikt/aksel-icons"; -import {Form, Outlet, useNavigate, useSearchParams} from "@remix-run/react"; +import {Form, Outlet, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; import type {IResourceAdminList} from "~/data/types"; import React from "react"; -import {prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; import {StatusTag} from "~/components/resource-admin/StatusTag"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface ResourceTableProps { resourcePage: IResourceAdminList, @@ -16,6 +17,8 @@ export const ResourceAdminTable = ({resourcePage, size, basePath}: ResourceTable const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const setStatusFilter = (event: string) => { setSearchParams(searchParams => { @@ -78,7 +81,7 @@ export const ResourceAdminTable = ({resourcePage, size, basePath}: ResourceTable - {resourcePage.resources.map((resource) => ( + {loading ? : resourcePage.resources.map((resource) => ( {resource.resourceName} {resource.resourceType} diff --git a/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx b/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx index ba9748d..4c3ac99 100644 --- a/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx +++ b/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx @@ -1,5 +1,5 @@ import {Button, Pagination, Select, Table} from "@navikt/ds-react"; -import {Form, useNavigate, useSearchParams} from "@remix-run/react"; +import {Form, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; import React from "react"; import { IResourceModuleAccessRole, @@ -7,7 +7,8 @@ import { IResourceModuleUsersPage } from "~/data/resourceModuleAdmin/types"; import {IUnitItem} from "~/data/types"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface ResourceModuleAdminUsersTableI { usersPage: IResourceModuleUsersPage @@ -17,8 +18,9 @@ interface ResourceModuleAdminUsersTableI { const ResourceModuleAdminUsersTable = ({usersPage}: ResourceModuleAdminUsersTableI) => { const navigate = useNavigate() - + const navigation = useNavigation() const [params, setSearchParams] = useSearchParams() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -39,18 +41,20 @@ const ResourceModuleAdminUsersTable = ({usersPage}: ResourceModuleAdminUsersTabl - {usersPage.users.map((user: IResourceModuleUser, index) => { - return ( - - {user.firstName + " " + user.lastName} - {user.userName} - - - - ) - })} + {loading ? + : usersPage.users.map((user: IResourceModuleUser, index) => { + return ( + + {user.firstName + " " + user.lastName} + {user.userName} + + + + ) + })} {usersPage.users.length > 0 && diff --git a/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx b/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx index 6e16691..9efc2b6 100644 --- a/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx +++ b/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx @@ -1,6 +1,6 @@ import {Alert, Button, Pagination, Select, Table} from "@navikt/ds-react"; import React, {useState} from "react"; -import {Form, useSearchParams} from "@remix-run/react"; +import {Form, useNavigation, useSearchParams} from "@remix-run/react"; import { IResourceModuleAccessRole, IResourceModuleOrgUnitDetail, @@ -8,7 +8,8 @@ import { } from "~/data/resourceModuleAdmin/types"; import {TrashIcon} from "@navikt/aksel-icons"; import DeleteOrgUnitInAssignment from "~/components/resource-module-admin/administer/DeleteOrgUnitInAssignment"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface RoleAssignmentTableProps { selectedRole: IResourceModuleAccessRole @@ -19,6 +20,8 @@ const RoleAssignmentTable = ({selectedRole, userAssignmentsPaginated}:RoleAssign const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false) const [orgUnit, setOrgUnit] = useState() const [scopeId, setScopeId] = useState("") + const navigation = useNavigation() + const loading = isLoading(navigation) const [params, setSearchParams] = useSearchParams() @@ -66,7 +69,7 @@ const RoleAssignmentTable = ({selectedRole, userAssignmentsPaginated}:RoleAssign - {userAssignmentsPaginated?.accessRoles.length !== 0 ? ( + {loading ? :userAssignmentsPaginated?.accessRoles.length !== 0 ? ( userAssignmentsPaginated?.accessRoles.map((scope) => scope.orgUnits.map((orgUnit) => ( { const navigate = useNavigate(); const [, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -34,7 +37,7 @@ export const ResourceTable = ({resourcePage, size}: ResourceTableProps) => { - {resourcePage.resources.map((resource) => ( + {loading ? : resourcePage.resources.map((resource) => ( {resource.resourceName} {resource.resourceType} diff --git a/app/components/role/AssignResourceToRoleTable.tsx b/app/components/role/AssignResourceToRoleTable.tsx index 22e1c6c..9548f03 100644 --- a/app/components/role/AssignResourceToRoleTable.tsx +++ b/app/components/role/AssignResourceToRoleTable.tsx @@ -1,9 +1,10 @@ import {Box, Button, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; import type {IResourceForList} from "~/data/types"; import React from "react"; -import {Outlet, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; -import {prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface AssignResourceToRoleTableProps { @@ -28,6 +29,8 @@ export const AssignResourceToRoleTable = ( }: AssignResourceToRoleTableProps) => { const [searchParams, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -50,7 +53,7 @@ export const AssignResourceToRoleTable = ( - {isAssignedResources.map((resource: IResourceForList) => ( + {loading ? : isAssignedResources.map((resource: IResourceForList) => ( {resource.resourceName} diff --git a/app/components/role/MemberTable.tsx b/app/components/role/MemberTable.tsx index 085c299..3af3e39 100644 --- a/app/components/role/MemberTable.tsx +++ b/app/components/role/MemberTable.tsx @@ -1,8 +1,9 @@ import {Pagination, Select, Table} from "@navikt/ds-react"; -import {Form, useSearchParams} from "@remix-run/react"; +import {Form, useNavigation, useSearchParams} from "@remix-run/react"; import type {IMemberPage} from "~/data/types"; import React from "react"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface MembersTableProps { @@ -13,6 +14,8 @@ interface MembersTableProps { export const MemberTable = ({ memberPage, size }: MembersTableProps) => { const [, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -32,7 +35,7 @@ export const MemberTable = ({ memberPage, size }: MembersTableProps) => { - {memberPage.members.map((member) => ( + {loading ? : memberPage.members.map((member) => ( {member.firstName} {member.lastName} {member.userType} diff --git a/app/components/role/RoleTable.tsx b/app/components/role/RoleTable.tsx index 56ea17f..f42d5e8 100644 --- a/app/components/role/RoleTable.tsx +++ b/app/components/role/RoleTable.tsx @@ -1,9 +1,10 @@ import {Button, Pagination, Select, Table} from "@navikt/ds-react"; import {InformationSquareIcon} from "@navikt/aksel-icons"; -import {Form, useNavigate, useSearchParams} from "@remix-run/react"; +import {Form, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; import type {IRoleList} from "~/data/types"; import React from "react"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; interface RoleTableProps { rolePage: IRoleList @@ -13,6 +14,8 @@ export const RoleTable = ({ rolePage, size }: RoleTableProps) => { const navigate = useNavigate(); const [, setSearchParams] = useSearchParams() + const navigation = useNavigation() + const loading = isLoading(navigation) const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setSizeCookieClientSide(event.target.value) @@ -34,37 +37,38 @@ export const RoleTable = ({ rolePage, size }: RoleTableProps) => { - {rolePage.roles.map((role) => ( - - {role.roleName} - {role.organisationUnitName} - {role.roleType} - - - - - ))} + {loading ? : + rolePage.roles.map((role) => ( + + {role.roleName} + {role.organisationUnitName} + {role.roleType} + + + + + ))} -
+ - - - - - - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={props.assignedRoles.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/assignment/AssignedUsersTable.tsx b/app/components/assignment/AssignedUsersTable.tsx index 0b4983a..046108a 100644 --- a/app/components/assignment/AssignedUsersTable.tsx +++ b/app/components/assignment/AssignedUsersTable.tsx @@ -1,10 +1,11 @@ -import {Box, Button, Heading, Link, Pagination, Select, Table, Tag, VStack} from "@navikt/ds-react"; +import {Button, Heading, Link, Table, Tag, VStack} from "@navikt/ds-react"; import type {IAssignedUsers} from "~/data/types"; import React from "react"; import {Outlet, useNavigation, useParams, useSearchParams} from "@remix-run/react"; import {TrashIcon} from "@navikt/aksel-icons"; -import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface AssignedUsersTableProps { assignedUsers: IAssignedUsers, size: string @@ -13,19 +14,11 @@ interface AssignedUsersTableProps { export const AssignedUsersTable = ({ assignedUsers, size, basePath }: AssignedUsersTableProps) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const params = useParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
@@ -75,34 +68,7 @@ export const AssignedUsersTable = ({ assignedUsers, size, basePath }: AssignedUs - - - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={assignedUsers.totalPages} - size="small" - prevNextTexts - /> - +
); }; \ No newline at end of file diff --git a/app/components/assignment/NewAssignmentRoleTable.tsx b/app/components/assignment/NewAssignmentRoleTable.tsx index 0cbaf7d..76c4ef9 100644 --- a/app/components/assignment/NewAssignmentRoleTable.tsx +++ b/app/components/assignment/NewAssignmentRoleTable.tsx @@ -1,10 +1,11 @@ -import {Box, Button, Heading, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; +import {Button, Heading, Link, Table, Tag} from "@navikt/ds-react"; import type {IRole} from "~/data/types"; import React from "react"; import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; export const AssignRoleTable: any = (props: { isAssignedRoles: IRole[], @@ -16,18 +17,10 @@ export const AssignRoleTable: any = (props: { basePath?: string }) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
Grupper @@ -69,33 +62,7 @@ export const AssignRoleTable: any = (props: { ))} - - - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={props.totalPages} - size="small" - prevNextTexts - /> - +
); }; \ No newline at end of file diff --git a/app/components/assignment/NewAssignmentUserTable.tsx b/app/components/assignment/NewAssignmentUserTable.tsx index 74006f0..a36d7fc 100644 --- a/app/components/assignment/NewAssignmentUserTable.tsx +++ b/app/components/assignment/NewAssignmentUserTable.tsx @@ -1,10 +1,11 @@ -import {Box, Button, Heading, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; -import type {IUser, IUserItem} from "~/data/types"; +import {Button, Heading, Link, Table, Tag} from "@navikt/ds-react"; +import type {IUserItem} from "~/data/types"; import React from "react"; import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface AssignUserTableProps { @@ -23,18 +24,10 @@ export const AssignUserTable = ({ currentPage, basePath, }: AssignUserTableProps) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
Brukere @@ -80,33 +73,7 @@ export const AssignUserTable = ({ ))} - - - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={totalPages} - size="small" - prevNextTexts - /> - +
); }; \ No newline at end of file diff --git a/app/components/common/Table/TablePagination.tsx b/app/components/common/Table/TablePagination.tsx new file mode 100644 index 0000000..278633f --- /dev/null +++ b/app/components/common/Table/TablePagination.tsx @@ -0,0 +1,54 @@ +import {Form, useSearchParams} from "@remix-run/react"; +import {Select, Pagination as AkselPagination} from "@navikt/ds-react"; +import React from "react"; +import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; + +type PaginationProps = { + currentPage: number + totalPages?: number + size?: string | number | readonly string[] | undefined +} + +export const TablePagination = ({totalPages = 1, size = 25, currentPage}: PaginationProps) => { + const [, setSearchParams] = useSearchParams() + + const handleChangeRowsPerPage = (event: React.ChangeEvent) => { + setSizeCookieClientSide(event.target.value) + setSearchParams(searchParams => { + searchParams.set("page", "0") + return searchParams; + }) + } + + return ( + + ny + + { + setSearchParams(searchParams => { + searchParams.set("page", (e - 1).toString()); + return searchParams; + }) + }} + count={totalPages} + size="small" + prevNextTexts + /> + + ) +} \ No newline at end of file diff --git a/app/components/resource-admin/ResourceAdminTable.tsx b/app/components/resource-admin/ResourceAdminTable.tsx index e18d769..e559ddc 100644 --- a/app/components/resource-admin/ResourceAdminTable.tsx +++ b/app/components/resource-admin/ResourceAdminTable.tsx @@ -1,11 +1,12 @@ -import {Button, Dropdown, HStack, Link, Pagination, Select, Table} from "@navikt/ds-react"; +import {Button, Dropdown, HStack, Link, Table} from "@navikt/ds-react"; import {FunnelIcon, InformationSquareIcon, MinusIcon, TrashIcon} from "@navikt/aksel-icons"; -import {Form, Outlet, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; import type {IResourceAdminList} from "~/data/types"; import React from "react"; -import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams} from "~/components/common/CommonFunctions"; import {StatusTag} from "~/components/resource-admin/StatusTag"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface ResourceTableProps { resourcePage: IResourceAdminList, @@ -31,14 +32,6 @@ export const ResourceAdminTable = ({resourcePage, size, basePath}: ResourceTable }); }; - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -132,33 +125,7 @@ export const ResourceAdminTable = ({resourcePage, size, basePath}: ResourceTable ))}
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={resourcePage.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx b/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx index 4c3ac99..10a69df 100644 --- a/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx +++ b/app/components/resource-module-admin/ResourceModuleAdminUsersTable.tsx @@ -1,5 +1,5 @@ -import {Button, Pagination, Select, Table} from "@navikt/ds-react"; -import {Form, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; +import {Button, Table} from "@navikt/ds-react"; +import {useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; import React from "react"; import { IResourceModuleAccessRole, @@ -7,8 +7,9 @@ import { IResourceModuleUsersPage } from "~/data/resourceModuleAdmin/types"; import {IUnitItem} from "~/data/types"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface ResourceModuleAdminUsersTableI { usersPage: IResourceModuleUsersPage @@ -19,17 +20,9 @@ interface ResourceModuleAdminUsersTableI { const ResourceModuleAdminUsersTable = ({usersPage}: ResourceModuleAdminUsersTableI) => { const navigate = useNavigate() const navigation = useNavigation() - const [params, setSearchParams] = useSearchParams() + const [params] = useSearchParams() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
@@ -58,32 +51,11 @@ const ResourceModuleAdminUsersTable = ({usersPage}: ResourceModuleAdminUsersTabl
{usersPage.users.length > 0 && -
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={usersPage.totalPages} - size="small" - prevNextTexts - /> - + }
) diff --git a/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx b/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx index 9efc2b6..2057aae 100644 --- a/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx +++ b/app/components/resource-module-admin/administer/RoleAssignmentTable.tsx @@ -1,6 +1,6 @@ -import {Alert, Button, Pagination, Select, Table} from "@navikt/ds-react"; +import {Alert, Table} from "@navikt/ds-react"; import React, {useState} from "react"; -import {Form, useNavigation, useSearchParams} from "@remix-run/react"; +import {useNavigation, useSearchParams} from "@remix-run/react"; import { IResourceModuleAccessRole, IResourceModuleOrgUnitDetail, @@ -8,22 +8,23 @@ import { } from "~/data/resourceModuleAdmin/types"; import {TrashIcon} from "@navikt/aksel-icons"; import DeleteOrgUnitInAssignment from "~/components/resource-module-admin/administer/DeleteOrgUnitInAssignment"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface RoleAssignmentTableProps { selectedRole: IResourceModuleAccessRole userAssignmentsPaginated: IResourceModuleUserAssignmentsPaginated } -const RoleAssignmentTable = ({selectedRole, userAssignmentsPaginated}:RoleAssignmentTableProps) => { +const RoleAssignmentTable = ({selectedRole, userAssignmentsPaginated}: RoleAssignmentTableProps) => { const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false) const [orgUnit, setOrgUnit] = useState() const [scopeId, setScopeId] = useState("") const navigation = useNavigation() const loading = isLoading(navigation) - const [params, setSearchParams] = useSearchParams() + const [params] = useSearchParams() const toggleDeleteOrgUnitModal = (scopeId: number, orgUnit: IResourceModuleOrgUnitDetail) => { setOrgUnit(orgUnit) @@ -31,14 +32,6 @@ const RoleAssignmentTable = ({selectedRole, userAssignmentsPaginated}:RoleAssign setIsDeleteModalOpen(true) } - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
{isDeleteModalOpen && orgUnit && ( @@ -114,32 +107,11 @@ const RoleAssignmentTable = ({selectedRole, userAssignmentsPaginated}:RoleAssign {userAssignmentsPaginated?.accessRoles.length > 0 && -
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={userAssignmentsPaginated.totalPages} - size="small" - prevNextTexts - /> - + }
) diff --git a/app/components/resource/ResourceTable.tsx b/app/components/resource/ResourceTable.tsx index ce1c821..e1e60e2 100644 --- a/app/components/resource/ResourceTable.tsx +++ b/app/components/resource/ResourceTable.tsx @@ -1,10 +1,11 @@ -import {Button, Pagination, Select, Table} from "@navikt/ds-react"; +import {Button, Table} from "@navikt/ds-react"; import {InformationSquareIcon} from "@navikt/aksel-icons"; -import {Form, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; +import {useNavigate, useNavigation} from "@remix-run/react"; import type {IResourceList} from "~/data/types"; import React from "react"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface ResourceTableProps { resourcePage: IResourceList @@ -14,18 +15,9 @@ interface ResourceTableProps { export const ResourceTable = ({resourcePage, size}: ResourceTableProps) => { const navigate = useNavigate(); - const [, setSearchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -64,33 +56,7 @@ export const ResourceTable = ({resourcePage, size}: ResourceTableProps) => { ))}
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={resourcePage.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/role/AssignResourceToRoleTable.tsx b/app/components/role/AssignResourceToRoleTable.tsx index 9548f03..af5dca3 100644 --- a/app/components/role/AssignResourceToRoleTable.tsx +++ b/app/components/role/AssignResourceToRoleTable.tsx @@ -1,11 +1,11 @@ -import {Box, Button, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; +import {Button, Link, Table, Tag} from "@navikt/ds-react"; import type {IResourceForList} from "~/data/types"; import React from "react"; import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; -import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; - +import {TablePagination} from "~/components/common/Table/TablePagination"; interface AssignResourceToRoleTableProps { isAssignedResources: IResourceForList[], @@ -28,18 +28,10 @@ export const AssignResourceToRoleTable = ( basePath }: AssignResourceToRoleTableProps) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
@@ -80,33 +72,7 @@ export const AssignResourceToRoleTable = ( - - - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={totalPages} - size="small" - prevNextTexts - /> - +
); }; \ No newline at end of file diff --git a/app/components/role/AssignmentsForRoleTable.tsx b/app/components/role/AssignmentsForRoleTable.tsx index 95c542d..e35999a 100644 --- a/app/components/role/AssignmentsForRoleTable.tsx +++ b/app/components/role/AssignmentsForRoleTable.tsx @@ -1,9 +1,10 @@ -import {Button, Link, Pagination, Select, Table} from "@navikt/ds-react"; -import type {IAssignmentPage, IResource, IResourceAssignment} from "~/data/types"; -import {Form, Outlet, useParams, useSearchParams} from "@remix-run/react"; +import {Button, Link, Table} from "@navikt/ds-react"; +import type {IAssignmentPage, IResourceAssignment} from "~/data/types"; +import {Outlet, useParams, useSearchParams} from "@remix-run/react"; import React from "react"; import {TrashIcon} from "@navikt/aksel-icons"; -import {prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {prepareQueryParams} from "~/components/common/CommonFunctions"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface AssignmentsForRoleTableProps { @@ -18,17 +19,9 @@ export const AssignmentsForRoleTable = ({ basePath }: AssignmentsForRoleTableProps) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const params = useParams() - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -67,33 +60,7 @@ export const AssignmentsForRoleTable = ({
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={assignmentsForRole.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/role/MemberTable.tsx b/app/components/role/MemberTable.tsx index 3af3e39..584f58b 100644 --- a/app/components/role/MemberTable.tsx +++ b/app/components/role/MemberTable.tsx @@ -1,9 +1,10 @@ -import {Pagination, Select, Table} from "@navikt/ds-react"; -import {Form, useNavigation, useSearchParams} from "@remix-run/react"; +import {Table} from "@navikt/ds-react"; +import {useNavigation} from "@remix-run/react"; import type {IMemberPage} from "~/data/types"; import React from "react"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface MembersTableProps { @@ -13,18 +14,9 @@ interface MembersTableProps { export const MemberTable = ({ memberPage, size }: MembersTableProps) => { - const [, setSearchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -64,34 +56,7 @@ export const MemberTable = ({ memberPage, size }: MembersTableProps) => {
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={memberPage.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/role/RoleTable.tsx b/app/components/role/RoleTable.tsx index f42d5e8..ec6bafc 100644 --- a/app/components/role/RoleTable.tsx +++ b/app/components/role/RoleTable.tsx @@ -1,10 +1,11 @@ -import {Button, Pagination, Select, Table} from "@navikt/ds-react"; +import {Button, Table} from "@navikt/ds-react"; import {InformationSquareIcon} from "@navikt/aksel-icons"; -import {Form, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; +import {useNavigate, useNavigation} from "@remix-run/react"; import type {IRoleList} from "~/data/types"; import React from "react"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface RoleTableProps { rolePage: IRoleList @@ -13,18 +14,9 @@ interface RoleTableProps { export const RoleTable = ({ rolePage, size }: RoleTableProps) => { const navigate = useNavigate(); - const [, setSearchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -68,34 +60,7 @@ export const RoleTable = ({ rolePage, size }: RoleTableProps) => {
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={rolePage.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/user/AssignResourceToUserTable.tsx b/app/components/user/AssignResourceToUserTable.tsx index 6770797..d992a4e 100644 --- a/app/components/user/AssignResourceToUserTable.tsx +++ b/app/components/user/AssignResourceToUserTable.tsx @@ -1,11 +1,11 @@ -import {Box, Button, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; -import type {IResource, IResourceAssignment, IResourceForList} from "~/data/types"; +import {Button, Link, Table, Tag} from "@navikt/ds-react"; +import type {IResourceForList} from "~/data/types"; import React from "react"; import {Outlet, useNavigation, useSearchParams} from "@remix-run/react"; import {PlusIcon} from "@navikt/aksel-icons"; import {isLoading, prepareQueryParams} from "~/components/common/CommonFunctions"; -import {setSizeCookieClientSide} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface AssignResourceToUserTableProps { @@ -27,18 +27,10 @@ export const AssignResourceToUserTable = ({ basePath }: AssignResourceToUserTableProps) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return (
@@ -76,33 +68,7 @@ export const AssignResourceToUserTable = ({ ))} - - - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={totalPages} - size="small" - prevNextTexts - /> - +
); }; \ No newline at end of file diff --git a/app/components/user/AssignmentsForUserTable.tsx b/app/components/user/AssignmentsForUserTable.tsx index 213505c..c80afc4 100644 --- a/app/components/user/AssignmentsForUserTable.tsx +++ b/app/components/user/AssignmentsForUserTable.tsx @@ -1,10 +1,11 @@ -import {Button, Link, Pagination, Select, Table, Tag} from "@navikt/ds-react"; +import {Button, Link, Table, Tag} from "@navikt/ds-react"; import type {IAssignmentPage} from "~/data/types"; -import {Form, Outlet, useNavigation, useParams, useSearchParams} from "@remix-run/react"; +import {Outlet, useNavigation, useParams, useSearchParams} from "@remix-run/react"; import React from "react"; import {TrashIcon} from "@navikt/aksel-icons"; -import {isLoading, prepareQueryParams, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading, prepareQueryParams} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface AssignmentsForUserTableProps { assignmentsForUser: IAssignmentPage @@ -14,19 +15,11 @@ interface AssignmentsForUserTableProps { export const AssignmentsForUserTable = ({assignmentsForUser, size, basePath}: AssignmentsForUserTableProps) => { - const [searchParams, setSearchParams] = useSearchParams() + const [searchParams] = useSearchParams() const params = useParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -72,34 +65,7 @@ export const AssignmentsForUserTable = ({assignmentsForUser, size, basePath}: As
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={assignmentsForUser.totalPages} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file diff --git a/app/components/user/UserTable.tsx b/app/components/user/UserTable.tsx index 8f5aa98..dea5c13 100644 --- a/app/components/user/UserTable.tsx +++ b/app/components/user/UserTable.tsx @@ -1,10 +1,11 @@ -import {Button, Pagination, Select, Table} from "@navikt/ds-react"; +import {Button, Table} from "@navikt/ds-react"; import {InformationSquareIcon} from "@navikt/aksel-icons"; -import {Form, useNavigate, useNavigation, useSearchParams} from "@remix-run/react"; +import {useNavigate, useNavigation} from "@remix-run/react"; import {IUserItem, IUserPage} from "~/data/types"; import React from "react"; -import {isLoading, setSizeCookieClientSide} from "~/components/common/CommonFunctions"; +import {isLoading} from "~/components/common/CommonFunctions"; import {TableSkeleton} from "~/components/common/Table/TableSkeleton"; +import {TablePagination} from "~/components/common/Table/TablePagination"; interface UserTableProps { userPage: IUserPage @@ -13,18 +14,9 @@ interface UserTableProps { export const UserTable = ({userPage, size}: UserTableProps) => { const navigate = useNavigate(); - const [, setSearchParams] = useSearchParams() const navigation = useNavigation() const loading = isLoading(navigation) - const handleChangeRowsPerPage = (event: React.ChangeEvent) => { - setSizeCookieClientSide(event.target.value) - setSearchParams(searchParams => { - searchParams.set("page", "0") - return searchParams; - }) - } - return ( <> @@ -67,34 +59,7 @@ export const UserTable = ({userPage, size}: UserTableProps) => {
-
- - { - setSearchParams(searchParams => { - searchParams.set("page", (e - 1).toString()); - return searchParams; - }) - }} - count={userPage.totalPages || 1} - size="small" - prevNextTexts - /> - + ); }; \ No newline at end of file From 591c2815aa85d99ec39195c79ead0d535c2690a5 Mon Sep 17 00:00:00 2001 From: IngMyr Date: Wed, 2 Oct 2024 09:28:40 +0200 Subject: [PATCH 09/12] Update tests --- app/components/common/Table/TablePagination.tsx | 1 - cypress/e2e/ressurser/resource.cy.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/components/common/Table/TablePagination.tsx b/app/components/common/Table/TablePagination.tsx index 278633f..8fb97d3 100644 --- a/app/components/common/Table/TablePagination.tsx +++ b/app/components/common/Table/TablePagination.tsx @@ -22,7 +22,6 @@ export const TablePagination = ({totalPages = 1, size = 25, currentPage}: Pagina return (
- ny */} - + {/**/} diff --git a/cypress/e2e/ressurser/forvalte-ressurser/slettRessurs.cy.ts b/cypress/e2e/ressurser/forvalte-ressurser/slettRessurs.cy.ts index 3b5c386..2fba9ab 100644 --- a/cypress/e2e/ressurser/forvalte-ressurser/slettRessurs.cy.ts +++ b/cypress/e2e/ressurser/forvalte-ressurser/slettRessurs.cy.ts @@ -1,3 +1,4 @@ +/* describe('Test delete resource', () => { it('Navigate to resource-admin and click delete on resource in table', () => { cy.goToResourceAdmin(); @@ -41,4 +42,4 @@ describe('Test delete resource', () => { }); }); -}); \ No newline at end of file +});*/