diff --git a/Sveltekit-App/src/lib/sidebar/navigation.ts b/Sveltekit-App/src/lib/sidebar/navigation.ts index c6f4652..02cb86c 100644 --- a/Sveltekit-App/src/lib/sidebar/navigation.ts +++ b/Sveltekit-App/src/lib/sidebar/navigation.ts @@ -22,6 +22,11 @@ export const navigation = [ name: 'Example Form', description: 'A form example using the IdentityNow SDK.' }, + { + url: '/home/transform-editor', + name: 'Transform Editor', + description: 'A form example to edit a transform.' + }, { url: '/home/form-integration', name: 'SailPoint Form Integration', diff --git a/Sveltekit-App/src/routes/home/transform-editor/+page.server.ts b/Sveltekit-App/src/routes/home/transform-editor/+page.server.ts new file mode 100644 index 0000000..2afa7f0 --- /dev/null +++ b/Sveltekit-App/src/routes/home/transform-editor/+page.server.ts @@ -0,0 +1,89 @@ +import { createConfiguration } from '$lib/sailpoint/sdk'; +import { + Paginator, + TransformsApi, + type Transform, + TransformTypeEnum, + type TransformsApiUpdateTransformRequest, + type TransformsApiCreateTransformRequest, + type TransformRead +} from 'sailpoint-api-client'; +import type { Actions } from './$types'; +import { Axios, AxiosError, isAxiosError, type AxiosResponse } from 'axios'; +import { fail } from '@sveltejs/kit'; + +const createTransform: Transform = { name: 'Create New', type: TransformTypeEnum.AccountAttribute, attributes: null } + +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 TransformsApi(config); + try { + let resp: AxiosResponse + if ( JSON.parse(data.get('transform')?.toString() || '{}').id === undefined) { + console.log('creating new transform') + resp = await createNewTransform(data, api); + } else { + console.log('updating transform') + resp = await updateTransform(data, api); + } + + + return { status: 'success' }; + } catch (error) { + if (error && isAxiosError(error) && error.response) { + return fail(error.response.status, {message: error.message}) + } + } + + } +} satisfies Actions; + +async function updateTransform(data: FormData, api: TransformsApi) { + const transform = JSON.parse(data.get('transform')?.toString() || '{}'); + const updatedTransform = JSON.parse(data.get('updatedTransform')?.toString()!); + + + const params: TransformsApiUpdateTransformRequest= { + id: transform.id, + transform: updatedTransform + }; + + const resp = await api.updateTransform(params); + return resp; + +} + +async function createNewTransform(data: FormData, api: TransformsApi) { + const updatedTransform = JSON.parse(data.get('updatedTransform')?.toString()!); + + + const params: TransformsApiCreateTransformRequest= { + transform: updatedTransform + }; + + const resp = await api.createTransform(params); + return resp; + +} + +export const load = async ({ locals }) => { + const config = createConfiguration(locals.session!.baseUrl, locals.idnSession!.access_token); + const api = new TransformsApi(config); + + const transformResp = Paginator.paginate(api, api.listTransforms, { limit: 1000 }); + + const transforms = new Promise((resolve) => { + transformResp.then((response) => { + + resolve([createTransform, ...response.data]); + }); + }); + + return { transforms }; +}; diff --git a/Sveltekit-App/src/routes/home/transform-editor/+page.svelte b/Sveltekit-App/src/routes/home/transform-editor/+page.svelte new file mode 100644 index 0000000..d66af9f --- /dev/null +++ b/Sveltekit-App/src/routes/home/transform-editor/+page.svelte @@ -0,0 +1,88 @@ + + +{#if form} + {#if form.status === 'success'} +
+

updated transform

+
+ {/if} + {#if form.message} +
+

{form.message}

+
+ {/if} +{/if} + +
+
+

Transform Editor

+
+
+

Update Transform

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