From ad8ba17833d7db4d4435c7a964513700e48bbcdf Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 7 Nov 2022 12:42:40 +0100 Subject: [PATCH] feat: create symmetric difference --- src/lib/components/permissions/permissions.svelte | 7 ++----- src/lib/components/permissions/roles.svelte | 4 ++-- src/lib/helpers/array.ts | 4 ++++ .../document-[document]/+page.svelte | 7 ++----- .../collection-[collection]/settings/+page.svelte | 7 ++----- .../function-[function]/settings/+page.svelte | 12 +++--------- .../keys/[key]/+page@project-[project].svelte | 7 ++----- .../project-[project]/overview/keys/scopes.svelte | 7 ++----- .../settings/webhooks/[webhook]/+page.svelte | 7 ++----- .../storage/bucket-[bucket]/file-[file]/+page.svelte | 7 ++----- .../storage/bucket-[bucket]/settings/+page.svelte | 7 ++----- 11 files changed, 25 insertions(+), 51 deletions(-) diff --git a/src/lib/components/permissions/permissions.svelte b/src/lib/components/permissions/permissions.svelte index b9d9ea7f6..35a3bdb6e 100644 --- a/src/lib/components/permissions/permissions.svelte +++ b/src/lib/components/permissions/permissions.svelte @@ -19,7 +19,7 @@ TableHeader, TableRow } from '$lib/elements/table'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { onDestroy, onMount } from 'svelte'; import { writable, type Unsubscriber } from 'svelte/store'; import Actions from './actions.svelte'; @@ -40,10 +40,7 @@ permissions.forEach(fromPermissionString); unsubscribe = groups.subscribe(() => { const current = exportRoles(); - if ( - difference(current, permissions).length || - difference(permissions, current).length - ) { + if (symmetricDifference(current, permissions).length) { permissions = current; } }); diff --git a/src/lib/components/permissions/roles.svelte b/src/lib/components/permissions/roles.svelte index 2bcca253f..39c39bef1 100644 --- a/src/lib/components/permissions/roles.svelte +++ b/src/lib/components/permissions/roles.svelte @@ -9,7 +9,7 @@ TableHeader, TableRow } from '$lib/elements/table'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { onDestroy, onMount } from 'svelte'; import { writable, type Unsubscriber } from 'svelte/store'; import Actions from './actions.svelte'; @@ -30,7 +30,7 @@ roles.forEach(addRole); unsubscribe = groups.subscribe((n) => { const current = Array.from(n.keys()); - if (difference(current, roles).length || difference(roles, current).length) { + if (symmetricDifference(current, roles).length) { roles = current; } }); diff --git a/src/lib/helpers/array.ts b/src/lib/helpers/array.ts index 602c886ad..cd7a923fb 100644 --- a/src/lib/helpers/array.ts +++ b/src/lib/helpers/array.ts @@ -8,3 +8,7 @@ export function difference(arr1: unknown[], arr2: unknown[]) { const intersection = new Set(arr1.filter((elem) => !set.has(elem))); return Array.from(intersection); } + +export function symmetricDifference(arr1: unknown[], arr2: unknown[]) { + return difference(arr1, arr2).concat(difference(arr2, arr1)); +} diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte index afb7b82db..7456810de 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/document-[document]/+page.svelte @@ -8,7 +8,7 @@ import { toLocaleDateTime } from '$lib/helpers/date'; import Document from './document.svelte'; import Delete from './delete.svelte'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { Permissions } from '$lib/components/permissions'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; @@ -41,10 +41,7 @@ } $: if (permissions) { - if ( - difference(permissions, $doc.$permissions).length || - difference($doc.$permissions, permissions).length - ) { + if (symmetricDifference(permissions, $doc.$permissions).length) { arePermsDisabled = false; } else arePermsDisabled = true; } diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/+page.svelte index 6b8422006..55887f459 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/+page.svelte @@ -9,7 +9,7 @@ import { addNotification } from '$lib/stores/notifications'; import { onMount } from 'svelte'; import { page } from '$app/stores'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import Delete from './deleteCollection.svelte'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; @@ -37,10 +37,7 @@ if (collectionDocumentSecurity !== $collection.documentSecurity) { arePermsDisabled = false; } else if (collectionPermissions) { - if ( - difference(collectionPermissions, $collection.$permissions).length || - difference($collection.$permissions, collectionPermissions).length - ) { + if (symmetricDifference(collectionPermissions, $collection.$permissions).length) { arePermsDisabled = false; } else arePermsDisabled = true; } diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/+page.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/+page.svelte index 16848eb7f..f24126a44 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/+page.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/+page.svelte @@ -23,7 +23,7 @@ import Upload from './uploadVariables.svelte'; import { toLocaleDateTime } from '$lib/helpers/date'; import { Roles } from '$lib/components/permissions'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import TableList from '$lib/elements/table/tableList.svelte'; import { TableCell, TableCellText } from '$lib/elements/table'; import Heading from '$lib/components/heading.svelte'; @@ -244,19 +244,13 @@ } $: if (permissions) { - if ( - difference(permissions, $func.execute).length || - difference($func.execute, permissions).length - ) { + if (symmetricDifference(permissions, $func.execute).length) { arePermsDisabled = false; } else arePermsDisabled = true; } $: if ($eventSet) { - if ( - difference(Array.from($eventSet), $func.events).length || - difference($func.events, Array.from($eventSet)).length - ) { + if (symmetricDifference(Array.from($eventSet), $func.events).length) { areEventsDisabled = false; } else areEventsDisabled = true; } diff --git a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte index ad2e0cf3f..154c9f288 100644 --- a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte +++ b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte @@ -3,7 +3,7 @@ import { CardGrid, Heading, Secret } from '$lib/components'; import { Dependencies } from '$lib/constants'; import { Button, Form, FormList, InputText, InputDateTime } from '$lib/elements/forms'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { toLocaleDateTime } from '$lib/helpers/date'; import { Container } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; @@ -145,10 +145,7 @@ submit disabled={scopes && $key?.scopes && - !( - difference(scopes, $key.scopes).length !== 0 || - difference($key.scopes, scopes).length !== 0 - )}>Update + !symmetricDifference(scopes, $key.scopes).length}>Update diff --git a/src/routes/console/project-[project]/overview/keys/scopes.svelte b/src/routes/console/project-[project]/overview/keys/scopes.svelte index 80f22abdd..b72e8e2cf 100644 --- a/src/routes/console/project-[project]/overview/keys/scopes.svelte +++ b/src/routes/console/project-[project]/overview/keys/scopes.svelte @@ -3,7 +3,7 @@ import { Button, FormList, InputChoice } from '$lib/elements/forms'; import { scopes as allScopes } from '$lib/constants'; import { onMount } from 'svelte'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; export let scopes: string[]; @@ -70,10 +70,7 @@ const newScopes = allScopes .filter((scope) => activeScopes[scope.scope]) .map(({ scope }) => scope); - if ( - difference(scopes, newScopes).length !== 0 || - difference(newScopes, scopes).length !== 0 - ) { + if (symmetricDifference(scopes, newScopes).length) { scopes = newScopes; } } diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte index 1a9b1225c..5060140f4 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/+page.svelte @@ -18,7 +18,7 @@ import { toLocaleDateTime } from '$lib/helpers/date'; import Delete from './delete.svelte'; import Regenerate from './regenerate.svelte'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { writable, type Writable } from 'svelte/store'; @@ -144,10 +144,7 @@ } $: if ($eventSet) { - if ( - difference(Array.from($eventSet), $webhook.events).length || - difference($webhook.events, Array.from($eventSet)).length - ) { + if (symmetricDifference(Array.from($eventSet), $webhook.events).length) { areEventsDisabled = false; } else areEventsDisabled = true; } diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte index ab2bbc8cf..7b371d592 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte @@ -9,7 +9,7 @@ import { addNotification } from '$lib/stores/notifications'; import { calculateSize } from '$lib/helpers/sizeConvertion'; import { onMount } from 'svelte'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { Permissions } from '$lib/components/permissions'; import Delete from './deleteFile.svelte'; import { invalidate } from '$app/navigation'; @@ -30,10 +30,7 @@ sdkForProject.storage.getFileView($file.bucketId, fileId).toString() + '&mode=admin'; $: if (filePermissions) { - if ( - difference(filePermissions, $file.$permissions).length || - difference($file.$permissions, filePermissions).length - ) { + if (symmetricDifference(filePermissions, $file.$permissions).length) { arePermsDisabled = false; } else arePermsDisabled = true; } diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte index 2eb438dff..4eb7291ca 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte @@ -18,7 +18,7 @@ import { sdkForProject } from '$lib/stores/sdk'; import { addNotification } from '$lib/stores/notifications'; import { onMount } from 'svelte'; - import { difference } from '$lib/helpers/array'; + import { symmetricDifference } from '$lib/helpers/array'; import { Permissions } from '$lib/components/permissions'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; @@ -58,10 +58,7 @@ if (bucketFileSecurity !== $bucket.fileSecurity) { arePermsDisabled = false; } else if (bucketPermissions) { - if ( - difference(bucketPermissions, $bucket.$permissions).length || - difference($bucket.$permissions, bucketPermissions).length - ) { + if (symmetricDifference(bucketPermissions, $bucket.$permissions).length) { arePermsDisabled = false; } else arePermsDisabled = true; }