diff --git a/src/routes/console/organization-[organization]/+page.svelte b/src/routes/console/organization-[organization]/+page.svelte index d039ac7d37..2b5d3759ba 100644 --- a/src/routes/console/organization-[organization]/+page.svelte +++ b/src/routes/console/organization-[organization]/+page.svelte @@ -8,6 +8,8 @@ import CreateOrganization from '../createOrganization.svelte'; import type { PageData } from './$types'; import { page } from '$app/stores'; + import { services } from '$lib/stores/project-services'; + import type { Models } from '@appwrite.io/console'; export let data: PageData; @@ -38,6 +40,17 @@ return { name, icon }; }; + function allServiceDisabled(project: Models.Project): boolean { + let disabled = true; + services.load(project); + $services.list.forEach((service) => { + if (service.value) { + disabled = false; + } + }); + return disabled; + } + function filterPlatforms(platforms: { name: string; icon: string }[]) { return platforms.filter( (value, index, self) => index === self.findIndex((t) => t.name === value.name) @@ -67,6 +80,11 @@ {project.name} + {#if allServiceDisabled(project)} +

+

+ {/if} {@const platforms = filterPlatforms( project.platforms.map((platform) => getPlatformInfo(platform.type)) )} diff --git a/src/routes/console/project-[project]/settings/+page.svelte b/src/routes/console/project-[project]/settings/+page.svelte index cbd241faed..699f12ddf8 100644 --- a/src/routes/console/project-[project]/settings/+page.svelte +++ b/src/routes/console/project-[project]/settings/+page.svelte @@ -22,6 +22,8 @@ import { base } from '$app/paths'; import { page } from '$app/stores'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; + import EnableAllServices from './enableAllServices.svelte'; + import DisableAllServices from './disableAllServices.svelte'; import Transfer from './transferProject.svelte'; let name: string = null; @@ -30,6 +32,8 @@ let showTransfer = false; const endpoint = sdk.forConsole.client.config.endpoint; const projectId = $page.params.project; + let showDisableAll = false; + let showEnableAll = false; onMount(async () => { name ??= $project.name; @@ -54,6 +58,50 @@ } } + async function toggleAllServices(status: boolean) { + if (status && !showEnableAll) { + showEnableAll = true; + return; + } + if (!status && !showDisableAll) { + showDisableAll = true; + return; + } + + try { + const path = '/projects/' + $project.$id + '/service/all'; + await sdk.forConsole.client.call( + 'PATCH', + new URL(sdk.forConsole.client.config.endpoint + path), + { + 'content-type': 'application/json' + }, + { + status: status + } + ); + invalidate(Dependencies.PROJECT); + addNotification({ + type: 'success', + message: + 'All services for ' + + $project.name + + ' has been ' + + (status ? 'enabled.' : 'disabled.') + }); + trackEvent(Submit.ProjectService); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + trackError(error, Submit.ProjectService); + } finally { + showDisableAll = false; + showEnableAll = false; + } + } + async function serviceUpdate(service: Service) { try { await sdk.forConsole.projects.updateServiceStatus( @@ -132,8 +180,18 @@ services are not accessible to client SDKs but remain accessible to server SDKs.

+ -
+
    {#each $services.list as service} + toggleAllServices(false)} bind:show={showDisableAll} /> + toggleAllServices(true)} bind:show={showEnableAll} /> {#if teamId} + import { Modal } from '$lib/components'; + import { Button } from '$lib/elements/forms'; + + export let show = false; + export let handleDisableAll; + + + + Disable all services +

    + Are you sure you want to disable all services? This will disable API requests to your + project. +

    + + + + +
    diff --git a/src/routes/console/project-[project]/settings/enableAllServices.svelte b/src/routes/console/project-[project]/settings/enableAllServices.svelte new file mode 100644 index 0000000000..e3189a7397 --- /dev/null +++ b/src/routes/console/project-[project]/settings/enableAllServices.svelte @@ -0,0 +1,16 @@ + + + + Enable all services +

    All project services will be enabled.

    + + + + +