diff --git a/package-lock.json b/package-lock.json index 61530ef93d..fe81d9ab3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@analytics/google-analytics": "^1.0.5", "@appwrite.io/pink": "^0.0.4", - "@aw-labs/appwrite-console": "^13.1.0", + "@aw-labs/appwrite-console": "npm:christy-appwrite-console@0.0.4", "@popperjs/core": "^2.11.6", "@sentry/svelte": "^7.36.0", "@sentry/tracing": "^7.36.0", @@ -162,9 +162,10 @@ "integrity": "sha512-GFOodekDck6xX7OAZuI1mo7F87ThEZ9Gt0xMsgTR79zkWcnBRq0+J89pFWRPAtFNEVMPQLVHuu6s8S4UleHwtQ==" }, "node_modules/@aw-labs/appwrite-console": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@aw-labs/appwrite-console/-/appwrite-console-13.1.0.tgz", - "integrity": "sha512-1FyKke5b3vx+D3VfNYd3YnFhzUOlsj9bD+KTRLWA4WRItb55thFVZJMWQQ4XnZtDiLPuJAn2XjbMSfMr+9XYwg==", + "name": "christy-appwrite-console", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/christy-appwrite-console/-/christy-appwrite-console-0.0.4.tgz", + "integrity": "sha512-5wfW7/n97RzjBZfvYRwQD1hFGCBG2xpQT0CcxyJk3yjoVUOYSg+Hu8o32kXXjMZw3wabozixbyAe30hkhKettw==", "dependencies": { "cross-fetch": "3.1.5", "isomorphic-form-data": "2.0.0" diff --git a/package.json b/package.json index 0d0865856e..06c4b49015 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "dependencies": { "@analytics/google-analytics": "^1.0.5", "@appwrite.io/pink": "^0.0.4", - "@aw-labs/appwrite-console": "^13.1.0", + "@aw-labs/appwrite-console": "npm:christy-appwrite-console@0.0.4", "@popperjs/core": "^2.11.6", "@sentry/svelte": "^7.36.0", "@sentry/tracing": "^7.36.0", diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index c4324b9704..e35af13bdc 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -194,6 +194,9 @@ export enum Submit { WebhookUpdateEvents = 'submit_webhook_update_events', WebhookUpdateName = 'submit_webhook_update_name', WebhookUpdateSecurity = 'submit_webhook_update_security', + BackupCreate = 'submit_backup_create', + BackupDelete = 'submit_backup_delete', + BackupRestore = 'submit_backup_restore', BucketCreate = 'submit_bucket_create', BucketDelete = 'submit_bucket_delete', BucketUpdateEnabled = 'submit_bucket_update_enabled', diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 0a19c92083..9cc1f13711 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -32,7 +32,8 @@ export enum Dependencies { KEYS = 'dependency:keys', DOMAINS = 'dependency:domains', WEBHOOK = 'dependency:webhook', - WEBHOOKS = 'dependency:webhooks' + WEBHOOKS = 'dependency:webhooks', + BACKUPS = 'dependency:backups' } export const scopes: { diff --git a/src/routes/console/project-[project]/settings/backups/+page.svelte b/src/routes/console/project-[project]/settings/backups/+page.svelte new file mode 100644 index 0000000000..d1828e3d62 --- /dev/null +++ b/src/routes/console/project-[project]/settings/backups/+page.svelte @@ -0,0 +1,129 @@ + + + + Backups - Appwrite + + + +
+ Backups + +
+ + {#if data.backups.total} + + + Name + Created + Status + Delete + Restore + + + {#each data.backups.backups as backup} + + +
+ {backup.name} +
+
+ {toLocaleDateTime(backup.$createdAt)} + + + {backup.status} + + + + + + + + +
+ {/each} +
+
+ {:else} + (showCreate = true)} /> + {/if} +
+ + + diff --git a/src/routes/console/project-[project]/settings/backups/+page.ts b/src/routes/console/project-[project]/settings/backups/+page.ts new file mode 100644 index 0000000000..0aef1f0f82 --- /dev/null +++ b/src/routes/console/project-[project]/settings/backups/+page.ts @@ -0,0 +1,10 @@ +import { Dependencies } from '$lib/constants'; +import { sdkForConsole } from '$lib/stores/sdk'; +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ params, depends }) => { + depends(Dependencies.BACKUPS); + return { + backups: await sdkForConsole.projects.listBackups(params.project) + }; +}; diff --git a/src/routes/console/project-[project]/settings/backups/create.svelte b/src/routes/console/project-[project]/settings/backups/create.svelte new file mode 100644 index 0000000000..5aacc3c855 --- /dev/null +++ b/src/routes/console/project-[project]/settings/backups/create.svelte @@ -0,0 +1,78 @@ + + + + Create Backup + + + + + + + + + + + + + diff --git a/src/routes/console/project-[project]/settings/backups/delete.svelte b/src/routes/console/project-[project]/settings/backups/delete.svelte new file mode 100644 index 0000000000..821dffde09 --- /dev/null +++ b/src/routes/console/project-[project]/settings/backups/delete.svelte @@ -0,0 +1,48 @@ + + + + Delete Backup + {#if selectedBackup} +

+ Are you sure you want to delete backup {selectedBackup.name} from '{$project.name}'? +

+ {/if} + + + + +
diff --git a/src/routes/console/project-[project]/settings/backups/scopes.svelte b/src/routes/console/project-[project]/settings/backups/scopes.svelte new file mode 100644 index 0000000000..03ab8215e2 --- /dev/null +++ b/src/routes/console/project-[project]/settings/backups/scopes.svelte @@ -0,0 +1,124 @@ + + + + + + {#each [Category.Auth, Category.Database, Category.Functions, Category.Storage, Category.Other] as category} + {@const checked = categoryState(category, scopes)} + + + onCategoryChange(e, category)} /> + + + {category} + + + {@const scopesLength = allScopes.filter( + (n) => n.category === category && scopes.includes(n.scope) + ).length} + ({scopesLength} + {scopesLength === 1 ? 'Scope' : 'Scopes'}) + +
+ + {#each allScopes.filter((s) => s.category === category) as scope} + + {scope.description} + + {/each} + +
+
+ {/each} +
diff --git a/src/routes/console/project-[project]/settings/header.svelte b/src/routes/console/project-[project]/settings/header.svelte index b6c51f014b..20b4668a6d 100644 --- a/src/routes/console/project-[project]/settings/header.svelte +++ b/src/routes/console/project-[project]/settings/header.svelte @@ -21,6 +21,11 @@ href: `${path}/webhooks`, title: 'Webhooks', event: 'webhooks' + }, + { + href: `${path}/backups`, + title: 'Backups', + event: 'backups' } ];