From 429442e3fc85faea917a332757bd6595d1bc0d00 Mon Sep 17 00:00:00 2001 From: luke-hagar-sp <98849695+luke-hagar-sp@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:39:05 -0600 Subject: [PATCH 01/12] Update title in app.html --- Sveltekit-App/src/app.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sveltekit-App/src/app.html b/Sveltekit-App/src/app.html index 9b16c20..d57c4f3 100644 --- a/Sveltekit-App/src/app.html +++ b/Sveltekit-App/src/app.html @@ -1,10 +1,10 @@ - + - IdentityNow Admin Console + IdentityNow Starter Application %sveltekit.head% From 90087e2b05709edef4838b2b32a5ef837ef450a3 Mon Sep 17 00:00:00 2001 From: luke-hagar-sp <98849695+luke-hagar-sp@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:39:22 -0600 Subject: [PATCH 02/12] Update getLimit function to default to '5' instead of '250' --- Sveltekit-App/src/lib/Utils.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Sveltekit-App/src/lib/Utils.ts b/Sveltekit-App/src/lib/Utils.ts index 12d3a3b..33da7f6 100644 --- a/Sveltekit-App/src/lib/Utils.ts +++ b/Sveltekit-App/src/lib/Utils.ts @@ -7,7 +7,7 @@ export function formatDate(date: string | null | undefined) { } export function getLimit(url: URL) { - return url.searchParams.get('limit') || '250'; + return url.searchParams.get('limit') || '5'; } export function getFilters(url: URL) { @@ -71,10 +71,10 @@ export function createOnGo(params: PaginationParams, path: string) { if (e.type !== 'click' && (e as KeyboardEvent).key !== 'Enter') return; const urlParams = new URLSearchParams(); - urlParams.set('page', params.page); - urlParams.set('limit', params.limit); - urlParams.set('sorters', params.sorters); - urlParams.set('filters', params.filters); + if (params.page != '') urlParams.set('page', params.page); + if (params.limit != '') urlParams.set('limit', params.limit); + if (params.sorters != '') urlParams.set('sorters', params.sorters); + if (params.filters != '') urlParams.set('filters', params.filters); console.log(`${path}?${urlParams.toString()}`); From 13a1873343dfe480af2c8887181cf12f56031245 Mon Sep 17 00:00:00 2001 From: luke-hagar-sp <98849695+luke-hagar-sp@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:39:33 -0600 Subject: [PATCH 03/12] Refactor Paginator component to handle undefined filters and sorters --- .../src/lib/Components/Paginator.svelte | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/Sveltekit-App/src/lib/Components/Paginator.svelte b/Sveltekit-App/src/lib/Components/Paginator.svelte index 3f67d84..a07e381 100644 --- a/Sveltekit-App/src/lib/Components/Paginator.svelte +++ b/Sveltekit-App/src/lib/Components/Paginator.svelte @@ -6,29 +6,35 @@ export let onPageChange: (e: CustomEvent) => void; export let onAmountChange: (e: CustomEvent) => void; export let onGo: (e: KeyboardEvent | MouseEvent) => void; - export let filters: string = ''; - export let sorters: string = ''; + export let filters: string | undefined = undefined; + export let sorters: string | undefined = undefined;
- - - + {#if filters !== undefined} + + {/if} + {#if sorters !== undefined} + + {/if} + {#if filters !== undefined || sorters !== undefined} + + {/if}

Total Count: {totalCount}

Date: Tue, 13 Feb 2024 10:39:45 -0600 Subject: [PATCH 04/12] Refactor navigation in sidebar --- Sveltekit-App/src/lib/sidebar/navigation.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Sveltekit-App/src/lib/sidebar/navigation.ts b/Sveltekit-App/src/lib/sidebar/navigation.ts index cfdd042..4a1dc44 100644 --- a/Sveltekit-App/src/lib/sidebar/navigation.ts +++ b/Sveltekit-App/src/lib/sidebar/navigation.ts @@ -1,5 +1,4 @@ import HomeSvg from '$lib/Components/SVGs/HomeSVG.svelte'; -import MessagesSvg from '$lib/Components/SVGs/MessagesSVG.svelte'; import ReportsSvg from '$lib/Components/SVGs/ReportsSVG.svelte'; export const navigation = [ @@ -13,10 +12,15 @@ export const navigation = [ icon: HomeSvg }, { - url: '/home/Example Pages', - name: 'Reports', + url: '/home/reports', + name: 'Example Pages', description: 'a list of example pages showcasing how to implement the IdentityNow SDK.', icon: ReportsSvg + }, + { + url: '/home/example-form', + name: 'Example Form', + description: 'A form example using the IdentityNow SDK.' } ] } From 416ac9daca12e6739a81535270e2911a5ff11acb Mon Sep 17 00:00:00 2001 From: luke-hagar-sp <98849695+luke-hagar-sp@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:40:13 -0600 Subject: [PATCH 05/12] Add example-form page and server logic to handle source retrieval and updating source descriptions --- .../routes/home/example-form/+page.server.ts | 51 ++++++++++++++ .../src/routes/home/example-form/+page.svelte | 68 +++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 Sveltekit-App/src/routes/home/example-form/+page.server.ts create mode 100644 Sveltekit-App/src/routes/home/example-form/+page.svelte diff --git a/Sveltekit-App/src/routes/home/example-form/+page.server.ts b/Sveltekit-App/src/routes/home/example-form/+page.server.ts new file mode 100644 index 0000000..fe29597 --- /dev/null +++ b/Sveltekit-App/src/routes/home/example-form/+page.server.ts @@ -0,0 +1,51 @@ +import { createConfiguration } from '$lib/sailpoint/sdk'; +import { + Paginator, + SourcesApi, + type Source, + type SourcesApiUpdateSourceRequest +} from 'sailpoint-api-client'; +import type { Actions } from './$types'; + +export const actions = { + default: async ({ locals, request }) => { + const data = await request.formData(); + + console.log('default action'); + console.log('data', data); + + const config = createConfiguration(locals.session!.baseUrl, locals.idnSession!.access_token); + const api = new SourcesApi(config); + + const source = JSON.parse(data.get('source')?.toString() || '{}'); + const updatedDescription = data.get('updatedDescription')?.toString(); + + const params: SourcesApiUpdateSourceRequest = { + id: source.id, + jsonPatchOperation: [{ op: 'replace', path: '/description', value: updatedDescription }] + }; + + const resp = await api.updateSource(params); + + if (resp.status !== 200) { + return { status: 'error', error: resp.statusText }; + } + + return { status: 'success' }; + } +} satisfies Actions; + +export const load = async ({ locals }) => { + const config = createConfiguration(locals.session!.baseUrl, locals.idnSession!.access_token); + const api = new SourcesApi(config); + + const sourceResp = Paginator.paginate(api, api.listSources, { limit: 1000 }); + + const sources = new Promise((resolve) => { + sourceResp.then((response) => { + resolve(response.data); + }); + }); + + return { sources }; +}; diff --git a/Sveltekit-App/src/routes/home/example-form/+page.svelte b/Sveltekit-App/src/routes/home/example-form/+page.svelte new file mode 100644 index 0000000..ac7baa2 --- /dev/null +++ b/Sveltekit-App/src/routes/home/example-form/+page.svelte @@ -0,0 +1,68 @@ + + +
+
+

Example Form

+
+
+

Update Source Description

+
+ {#await data.sources} +
+ +
+ {:then sources} + + +