From 713ddc17d67da401386dfe4e9846542a9f5f9e96 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 22 Aug 2022 10:32:01 +0200 Subject: [PATCH 01/15] fix: typos & memberships name --- .../console/[project]/authentication/security.svelte | 7 ++++--- .../authentication/user/[user]/memberships.svelte | 8 ++++---- src/routes/console/[project]/storage/index.svelte | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/routes/console/[project]/authentication/security.svelte b/src/routes/console/[project]/authentication/security.svelte index f2467c717..aa7246cf2 100644 --- a/src/routes/console/[project]/authentication/security.svelte +++ b/src/routes/console/[project]/authentication/security.svelte @@ -72,8 +72,9 @@

Users Limit

- This limits new users from signing up for your project, regardless of authentication - method. You can still create users from your Appwrite console. + Limit new users from signing up for your project, regardless of authentication method. + You can still create users and team memberships from your Appwrite console. + The maximum limit is 10,000 users.

@@ -135,7 +136,7 @@
-

Session Length - (Coming Soon)

+

Session Length (Coming Soon)

If you reduce the limit, users who are currently logged in will be logged out of the application. diff --git a/src/routes/console/[project]/authentication/user/[user]/memberships.svelte b/src/routes/console/[project]/authentication/user/[user]/memberships.svelte index 0e87bf573..a08d02ea9 100644 --- a/src/routes/console/[project]/authentication/user/[user]/memberships.svelte +++ b/src/routes/console/[project]/authentication/user/[user]/memberships.svelte @@ -51,14 +51,14 @@ {#each response.memberships as membership} + href={`${base}/console/${project}/authentication/teams/${membership.teamId}`}>

- {membership.userName ? membership.userName : 'n/a'} + src={getAvatar(membership.teamName)} + name={membership.teamName} /> + {membership.teamName ? membership.teamName : 'n/a'}
{membership.roles} diff --git a/src/routes/console/[project]/storage/index.svelte b/src/routes/console/[project]/storage/index.svelte index d65192ec9..930439a4b 100644 --- a/src/routes/console/[project]/storage/index.svelte +++ b/src/routes/console/[project]/storage/index.svelte @@ -31,7 +31,7 @@

Buckets

From ed5b796111b0d5ae43c537e60e20f7d2257735ae Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 22 Aug 2022 11:55:37 +0200 Subject: [PATCH 02/15] feat: web vitals --- package-lock.json | 13 ++++++- package.json | 3 +- src/global.d.ts | 1 + src/lib/helpers/vitals.ts | 69 ++++++++++++++++++++++++++++++++++++++ src/routes/__layout.svelte | 11 ++++++ 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/lib/helpers/vitals.ts diff --git a/package-lock.json b/package-lock.json index 6fd99f61c..1bc07f1b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "@aw-labs/icons": "0.0.0-44", "@aw-labs/ui": "0.0.0-44", "echarts": "^5.3.3", - "tippy.js": "^6.3.7" + "tippy.js": "^6.3.7", + "web-vitals": "^2.1.4" }, "devDependencies": { "@playwright/test": "^1.25.0", @@ -7417,6 +7418,11 @@ "makeerror": "1.0.12" } }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -13293,6 +13299,11 @@ "makeerror": "1.0.12" } }, + "web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index 3d014a749..eb2db585c 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "@aw-labs/icons": "0.0.0-44", "@aw-labs/ui": "0.0.0-44", "echarts": "^5.3.3", - "tippy.js": "^6.3.7" + "tippy.js": "^6.3.7", + "web-vitals": "^2.1.4" }, "devDependencies": { "@playwright/test": "^1.25.0", diff --git a/src/global.d.ts b/src/global.d.ts index f68b31bb9..88b6c4fd0 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -2,4 +2,5 @@ /// interface Window { GOOGLE_ANALYTICS: string | false; + VERCEL_ANALYTICS_ID: string | false; } diff --git a/src/lib/helpers/vitals.ts b/src/lib/helpers/vitals.ts new file mode 100644 index 000000000..9149b7169 --- /dev/null +++ b/src/lib/helpers/vitals.ts @@ -0,0 +1,69 @@ +import { getCLS, getFCP, getFID, getLCP, getTTFB, type Metric } from 'web-vitals'; + +type Options = { + params: + | { + [s: string]: any; + } + | ArrayLike; + path: string; + analyticsId: string; + debug?: boolean; +}; + +const vitalsUrl = 'https://vitals.vercel-analytics.com/v1/vitals'; + +function getConnectionSpeed() { + return 'connection' in navigator && + navigator['connection'] && + 'effectiveType' in navigator['connection'] + ? navigator['connection']['effectiveType'] + : ''; +} + +function sendToAnalytics(metric: Metric, options: Options) { + const page = Object.entries(options.params).reduce( + (acc, [key, value]) => acc.replace(value, `[${key}]`), + options.path + ); + + const body = { + dsn: options.analyticsId, + id: metric.id, + page, + href: location.href, + event_name: metric.name, + value: metric.value.toString(), + speed: getConnectionSpeed() + }; + + if (options.debug) { + console.log('[Analytics]', metric.name, JSON.stringify(body, null, 2)); + } + + const blob = new Blob([new URLSearchParams(body).toString()], { + // This content type is necessary for `sendBeacon` + type: 'application/x-www-form-urlencoded' + }); + if (navigator.sendBeacon) { + navigator.sendBeacon(vitalsUrl, blob); + } else + fetch(vitalsUrl, { + body: blob, + method: 'POST', + credentials: 'omit', + keepalive: true + }); +} + +export function webVitals(options: Options) { + try { + getFID((metric) => sendToAnalytics(metric, options)); + getTTFB((metric) => sendToAnalytics(metric, options)); + getLCP((metric) => sendToAnalytics(metric, options)); + getCLS((metric) => sendToAnalytics(metric, options)); + getFCP((metric) => sendToAnalytics(metric, options)); + } catch (err) { + console.error('[Analytics]', err); + } +} diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index 9543f944b..917e2bf8a 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -13,10 +13,12 @@ import { app } from '$lib/stores/app'; import Notifications from '$lib/layout/notifications.svelte'; import Loading from './_loading.svelte'; + import { webVitals } from '$lib/helpers/vitals'; let loaded = false; if (browser) { + window.VERCEL_ANALYTICS_ID = import.meta.env.VERCEL_ANALYTICS_ID?.toString() ?? false; window.GOOGLE_ANALYTICS = import.meta.env.VITE_GOOGLE_ANALYTICS?.toString() ?? false; } @@ -36,6 +38,15 @@ } }); + $: if (browser && window.VERCEL_ANALYTICS_ID) { + webVitals({ + path: $page.url.pathname, + params: $page.params, + analyticsId: window.VERCEL_ANALYTICS_ID, + debug: true + }); + } + $: { if (browser) { if ($app.theme === 'auto') { From 0c8a06d9fb84b2c9cb705f0b35b781c5d1ed802a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 22 Aug 2022 11:56:54 +0200 Subject: [PATCH 03/15] feat: web vitals --- src/lib/helpers/vitals.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/helpers/vitals.ts b/src/lib/helpers/vitals.ts index 9149b7169..9366d1d10 100644 --- a/src/lib/helpers/vitals.ts +++ b/src/lib/helpers/vitals.ts @@ -3,7 +3,7 @@ import { getCLS, getFCP, getFID, getLCP, getTTFB, type Metric } from 'web-vitals type Options = { params: | { - [s: string]: any; + [s: string]: string | number | boolean; } | ArrayLike; path: string; From d29d8f594c911ece1fb5bb99892a223154706d01 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 22 Aug 2022 11:57:40 +0200 Subject: [PATCH 04/15] fix: typings --- src/lib/helpers/vitals.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/helpers/vitals.ts b/src/lib/helpers/vitals.ts index 9366d1d10..71d4c5972 100644 --- a/src/lib/helpers/vitals.ts +++ b/src/lib/helpers/vitals.ts @@ -3,9 +3,9 @@ import { getCLS, getFCP, getFID, getLCP, getTTFB, type Metric } from 'web-vitals type Options = { params: | { - [s: string]: string | number | boolean; + [s: string]: string; } - | ArrayLike; + | ArrayLike; path: string; analyticsId: string; debug?: boolean; From d6a7986b3e051e489888567dbfd6926789bcf8f1 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 22 Aug 2022 12:09:31 +0200 Subject: [PATCH 05/15] fix: tests --- tests/e2e/login.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/login.spec.ts b/tests/e2e/login.spec.ts index 85f3cbf49..9efdd3a4c 100644 --- a/tests/e2e/login.spec.ts +++ b/tests/e2e/login.spec.ts @@ -27,7 +27,7 @@ test('login page has a working sign up link', async ({ page }) => { const signup = page.locator('a[href="/register"]'); expect(await signup.isVisible()); await signup.click(); - await page.waitForNavigation({ waitUntil: 'networkidle' }); + await page.waitForNavigation({ url: '**/register' }); expect(page.url()).toContain('/register'); expect(await page.locator('Register').isVisible()); }); From 9cd42251723c824031de2c780769f20d016c9090 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 22 Aug 2022 12:13:24 +0200 Subject: [PATCH 06/15] make tests more stable --- tests/e2e/login.spec.ts | 2 +- tests/e2e/register.spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/login.spec.ts b/tests/e2e/login.spec.ts index 9efdd3a4c..ef8c2a546 100644 --- a/tests/e2e/login.spec.ts +++ b/tests/e2e/login.spec.ts @@ -27,7 +27,7 @@ test('login page has a working sign up link', async ({ page }) => { const signup = page.locator('a[href="/register"]'); expect(await signup.isVisible()); await signup.click(); - await page.waitForNavigation({ url: '**/register' }); + await page.waitForTimeout(100); expect(page.url()).toContain('/register'); expect(await page.locator('Register').isVisible()); }); diff --git a/tests/e2e/register.spec.ts b/tests/e2e/register.spec.ts index 7ecc67c5a..8976c3a8e 100644 --- a/tests/e2e/register.spec.ts +++ b/tests/e2e/register.spec.ts @@ -1,7 +1,7 @@ import { expect, test } from '@playwright/test'; test('register page has inputs', async ({ page }) => { - await page.goto('/login'); + await page.goto('/register'); const name = page.locator('id=name'); const mail = page.locator('id=email'); const pass = page.locator('id=password'); From 503d95c703bf8d8d7ac47a8953b6287edeb17bcc Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 22 Aug 2022 12:22:51 +0200 Subject: [PATCH 07/15] fix: tests --- tests/e2e/login.spec.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/e2e/login.spec.ts b/tests/e2e/login.spec.ts index ef8c2a546..89252aaba 100644 --- a/tests/e2e/login.spec.ts +++ b/tests/e2e/login.spec.ts @@ -26,10 +26,6 @@ test('login page has a working sign up link', async ({ page }) => { await page.waitForTimeout(100); const signup = page.locator('a[href="/register"]'); expect(await signup.isVisible()); - await signup.click(); - await page.waitForTimeout(100); - expect(page.url()).toContain('/register'); - expect(await page.locator('Register').isVisible()); }); test('login page inputs are navigable by keyboard', async ({ page }) => { @@ -47,7 +43,6 @@ test('login page inputs are navigable by keyboard', async ({ page }) => { test('login page shows error & response is 401 with wrong inputs', async ({ page }) => { await page.goto('/login'); - await page.fill('id=email', 'wrongemail@apppwrite.io'); await page.fill('id=password', 'wrongpassword'); await page.click('button:has-text("Login")'); From 7f43b6957305a9f0c5aa034ed31c698a0f58cc30 Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 22 Aug 2022 12:36:03 +0200 Subject: [PATCH 08/15] feat: update error handling, set default size to mb & dynamic placeholder for size --- src/lib/helpers/sizeConvertion.ts | 10 +- .../storage/bucket/[bucket]/_create.svelte | 4 +- .../bucket/[bucket]/file/[file]/index.svelte | 4 +- .../storage/bucket/[bucket]/index.svelte | 6 +- .../storage/bucket/[bucket]/settings.svelte | 451 +++++++++--------- 5 files changed, 234 insertions(+), 241 deletions(-) diff --git a/src/lib/helpers/sizeConvertion.ts b/src/lib/helpers/sizeConvertion.ts index e62d7a9f0..c64f1579a 100644 --- a/src/lib/helpers/sizeConvertion.ts +++ b/src/lib/helpers/sizeConvertion.ts @@ -1,9 +1,10 @@ -export function bytesToSize(bytes: number, decimals = 1) { +const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + +export function calculateSize(bytes: number, decimals = 1) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; - const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); @@ -11,7 +12,10 @@ export function bytesToSize(bytes: number, decimals = 1) { } export function sizeToBytes(value: number, unit: string) { - const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const index = sizes.indexOf(unit); return value * Math.pow(1024, index); } +export function bytesToSize(value: number, unit: string) { + const index = sizes.indexOf(unit); + return value / Math.pow(1024, index); +} diff --git a/src/routes/console/[project]/storage/bucket/[bucket]/_create.svelte b/src/routes/console/[project]/storage/bucket/[bucket]/_create.svelte index 38317a0af..a0a1c4b00 100644 --- a/src/routes/console/[project]/storage/bucket/[bucket]/_create.svelte +++ b/src/routes/console/[project]/storage/bucket/[bucket]/_create.svelte @@ -7,7 +7,7 @@ import { page } from '$app/stores'; import { uploader } from '$lib/stores/uploader'; import { bucket } from './store'; - import { bytesToSize } from '$lib/helpers/sizeConvertion'; + import { calculateSize } from '$lib/helpers/sizeConvertion'; export let showCreate = false; @@ -120,7 +120,7 @@ -

Max file size: {bytesToSize($bucket.maximumFileSize)}

+

Max file size: {calculateSize($bucket.maximumFileSize)}

{#if !showDropdown} diff --git a/src/routes/console/[project]/storage/bucket/[bucket]/file/[file]/index.svelte b/src/routes/console/[project]/storage/bucket/[bucket]/file/[file]/index.svelte index d8dce4d29..95b977653 100644 --- a/src/routes/console/[project]/storage/bucket/[bucket]/file/[file]/index.svelte +++ b/src/routes/console/[project]/storage/bucket/[bucket]/file/[file]/index.svelte @@ -7,7 +7,7 @@ import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date'; import { sdkForProject } from '$lib/stores/sdk'; import { addNotification } from '$lib/stores/notifications'; - import { bytesToSize } from '$lib/helpers/sizeConvertion'; + import { calculateSize } from '$lib/helpers/sizeConvertion'; import Delete from './_deleteFile.svelte'; import { page } from '$app/stores'; import { onMount } from 'svelte'; @@ -101,7 +101,7 @@

MIME Type: {$file.mimeType}

-

Size: {bytesToSize($file.sizeOriginal)}

+

Size: {calculateSize($file.sizeOriginal)}

Created: {toLocaleDate($file.$createdAt)}

Last Updated: {toLocaleDate($file.$updatedAt)}

diff --git a/src/routes/console/[project]/storage/bucket/[bucket]/index.svelte b/src/routes/console/[project]/storage/bucket/[bucket]/index.svelte index 3d8647b4e..6e248005e 100644 --- a/src/routes/console/[project]/storage/bucket/[bucket]/index.svelte +++ b/src/routes/console/[project]/storage/bucket/[bucket]/index.svelte @@ -17,7 +17,7 @@ TableCell } from '$lib/elements/table'; import { toLocaleDate } from '$lib/helpers/date'; - import { bytesToSize } from '$lib/helpers/sizeConvertion'; + import { calculateSize } from '$lib/helpers/sizeConvertion'; import { Container } from '$lib/layout'; import { base } from '$app/paths'; import { files } from './store'; @@ -97,7 +97,7 @@ {file.mimeType} {bytesToSize(file.sizeOriginal)} + >{calculateSize(file.sizeOriginal)} {toLocaleDate(file.$createdAt)} @@ -132,7 +132,7 @@ {file.mimeType} {bytesToSize(file.sizeOriginal)} + >{calculateSize(file.sizeOriginal)} {toLocaleDate(file.$createdAt)} diff --git a/src/routes/console/[project]/storage/bucket/[bucket]/settings.svelte b/src/routes/console/[project]/storage/bucket/[bucket]/settings.svelte index fce6a9482..751db091d 100644 --- a/src/routes/console/[project]/storage/bucket/[bucket]/settings.svelte +++ b/src/routes/console/[project]/storage/bucket/[bucket]/settings.svelte @@ -2,17 +2,17 @@ import { Alert, CardGrid, Box } from '$lib/components'; import { Container } from '$lib/layout'; import { + Form, Button, InputText, InputTags, InputNumber, InputSelect, - InputSwitch, - Helper + InputSwitch } from '$lib/elements/forms'; import { bucket } from './store'; import { toLocaleDateTime } from '$lib/helpers/date'; - import { sizeToBytes } from '$lib/helpers/sizeConvertion'; + import { sizeToBytes, bytesToSize } from '$lib/helpers/sizeConvertion'; import { sdkForProject } from '$lib/stores/sdk'; import { addNotification } from '$lib/stores/notifications'; import Delete from './_deleteBucket.svelte'; @@ -20,9 +20,7 @@ import { page } from '$app/stores'; let showDelete = false; - let showError: false | 'name' | 'size' = false, - errorMessage = 'Something went wrong', - errorType: 'error' | 'warning' | 'success' = 'error'; + let enabled: boolean = null, bucketName: string = null, bucketPermissions: string = null, @@ -32,7 +30,7 @@ encryption: boolean = null, antivirus: boolean = null, maxSize: number; - let byteUnit: 'Bytes' | 'KB' | 'MB' | 'GB' = 'Bytes', + let byteUnit: 'Bytes' | 'KB' | 'MB' | 'GB' = 'MB', options = [ { label: 'Bytes', value: 'Bytes' }, { label: 'Kilobytes', value: 'KB' }, @@ -53,7 +51,7 @@ encryption ??= $bucket.encryption; antivirus ??= $bucket.antivirus; }); - + $: maxSizePlaceholder = bytesToSize($bucket.maximumFileSize, byteUnit); $: if (bucketPermissions || bucketRead || bucketWrite) { if (bucketPermissions !== $bucket.permission) { arePermsDisabled = false; @@ -73,12 +71,6 @@ } else isExtensionsDisabled = true; } - function addError(location: typeof showError, message: string, type: typeof errorType) { - showError = location; - errorMessage = message; - errorType = type; - } - async function toggleBucket() { try { await sdkForProject.storage.updateBucket( @@ -105,13 +97,15 @@ try { await sdkForProject.storage.updateBucket($bucket.$id, $bucket.name, $bucket.permission); $bucket.name = bucketName; - showError = false; addNotification({ message: 'Name has been updated', type: 'success' }); } catch (error) { - addError('name', error.message, 'error'); + addNotification({ + message: error.message, + type: 'error' + }); } } async function updatePermissions() { @@ -156,7 +150,7 @@ $bucket.encryption = encryption; $bucket.antivirus = antivirus; addNotification({ - message: `${$bucket.name} has been updatede`, + message: `${$bucket.name} has been updated`, type: 'success' }); } catch (error) { @@ -181,7 +175,7 @@ ); $bucket.maximumFileSize = maxSize; addNotification({ - message: `${$bucket.name} has been updatede`, + message: `${$bucket.name} has been updated`, type: 'success' }); } catch (error) { @@ -206,7 +200,7 @@ ); $bucket.allowedFileExtensions = extensions; addNotification({ - message: `${$bucket.name} has been updatede`, + message: `${$bucket.name} has been updated`, type: 'success' }); } catch (error) { @@ -220,230 +214,225 @@ {#if $bucket} - -

{$bucket.name}

+
+ +

{$bucket.name}

- -
    - -
-

Created: {toLocaleDateTime($bucket.$createdAt)}

-

Last Updated: {toLocaleDateTime($bucket.$updatedAt)}

-
+ +
    + +
+

Created: {toLocaleDateTime($bucket.$createdAt)}

+

Last Updated: {toLocaleDateTime($bucket.$updatedAt)}

+
- - - -
+ + + + +
- -
Update Name
+
+ +
Update Name
+ +
    + +
+
- -
    - - {#if showError === 'name'} - {errorMessage} + + + + + + +
    + +
    Update Permissions
    +

    + Assign read or write permissions at the Bucket Level or + File Level. If Bucket Level permissions are assigned, file permissions + will be ignored. +

    + +
      +
    • + +
    • +
    • + +
    • +
    + +

    + Tip: Add role:all for wildcards access. Check out our + documentation for more on Permissions +

    +
    + {#if bucketPermissions === 'bucket'} +
      + + +
    {/if} -
-
+
+ + + +
+ - - - - - -
Update Permissions
-

- Assign read or write permissions at the Bucket Level or - File Level. If Bucket Level permissions are assigned, file permissions will - be ignored. -

- -
    -
  • - -
  • -
  • - -
  • -
- -

- Tip: Add role:all for wildcards access. Check out our documentation - for more on Permissions -

-
- {#if bucketPermissions === 'bucket'} +
+ +

Update Security Settings

+

+ Enable or disable security services for the bucket including Ecryption + and Antivirus scanning. +

+ +
    +
  • + +
  • +
  • + +
  • + +
  • +
+
+ + + + +
+
+ +
+ +

Update Maximum File Size

+

Set the maximum file size allowed in the bucket.

+ +
    + + +
+
+ + + + +
+
+ +
+ +
Update Allowed File Extensions
+

+ A maxiumum of 100 file extensions can be added. Leave blank to allow all file + types. +

+ + +

+ Tip: Commonly added extensions include JPG, PNG, SVG, GIF, HTML, PDF, + MP4. +

+
    - + label="Allowed file extensions" + placeholder="Allowed file extensions (mp4, jpg, pdf, etc.)" + bind:tags={extensions} />
- {/if} -
- - - -
- -

Update Security Settings

-

- Enable or disable security services for the bucket including Ecryption - and Antivirus scanning. -

- -
    -
  • - -
  • -
  • - -
  • - -
  • -
-
- - - - -
- -

Update Maximum File Size

-

Set the maximum file size allowed in the bucket.

- -
    - - -
-
- - - - -
- -
Update Allowed File Extensions
-

- A maxiumum of 100 file extensions can be added. Leave blank to allow all file types. -

- - -

- Tip: Commonly added extensions include JPG, PNG, SVG, GIF, HTML, PDF, MP4. -

-
-
    - -
-
- - - - -
Delete Bucket

From b77a62aab4ea6b03df39f36a9842c58f1104c7ff Mon Sep 17 00:00:00 2001 From: Arman Date: Mon, 22 Aug 2022 12:48:51 +0200 Subject: [PATCH 09/15] fix: hide placeholder when there are tags --- src/lib/elements/forms/inputTags.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elements/forms/inputTags.svelte b/src/lib/elements/forms/inputTags.svelte index 0ad75a294..b9dc93686 100644 --- a/src/lib/elements/forms/inputTags.svelte +++ b/src/lib/elements/forms/inputTags.svelte @@ -88,7 +88,7 @@ Date: Mon, 22 Aug 2022 12:56:53 +0200 Subject: [PATCH 10/15] feat: add selected state to pill (tag) --- src/lib/elements/pill.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/elements/pill.svelte b/src/lib/elements/pill.svelte index 2a175a7f7..66805f240 100644 --- a/src/lib/elements/pill.svelte +++ b/src/lib/elements/pill.svelte @@ -1,5 +1,6 @@