mirror of
https://github.com/appwrite/console.git
synced 2026-06-06 19:27:48 +00:00
@@ -6,8 +6,8 @@
|
||||
|
||||
export let show = false;
|
||||
let selectedService: typeof services[0] = null;
|
||||
let selectedRequest: typeof selectedService['requests'][0] = null;
|
||||
let selectedEvent: string = null;
|
||||
let selectedResource: typeof selectedService['resources'][0] = null;
|
||||
let selectedAction: string = null;
|
||||
let selectedAttribute: string = null;
|
||||
let helper: string = null;
|
||||
let inputData: string = null;
|
||||
@@ -20,55 +20,54 @@
|
||||
dispatch('created', copyValue);
|
||||
}
|
||||
|
||||
const events = ['create', 'update', 'delete'];
|
||||
const actions = ['create', 'update', 'delete'];
|
||||
|
||||
const services = [
|
||||
{
|
||||
name: 'buckets',
|
||||
requests: [{ name: 'files', events }],
|
||||
events
|
||||
resources: [{ name: 'files', actions }],
|
||||
actions
|
||||
},
|
||||
{
|
||||
name: 'databases',
|
||||
requests: [
|
||||
{ name: 'collections', events },
|
||||
{ name: 'documents', events }
|
||||
resources: [
|
||||
{ name: 'collections', actions },
|
||||
{ name: 'documents', actions }
|
||||
],
|
||||
events
|
||||
actions
|
||||
},
|
||||
{
|
||||
name: 'functions',
|
||||
requests: [
|
||||
{ name: 'deployments', events },
|
||||
{ name: 'executions', events }
|
||||
resources: [
|
||||
{ name: 'deployments', actions },
|
||||
{ name: 'executions', actions }
|
||||
],
|
||||
events
|
||||
actions
|
||||
},
|
||||
{
|
||||
name: 'teams',
|
||||
requests: [{ name: 'memberships', events }],
|
||||
events
|
||||
resources: [{ name: 'memberships', actions }],
|
||||
actions
|
||||
},
|
||||
{
|
||||
name: 'users',
|
||||
requests: [
|
||||
{ name: 'recovery', events: ['create', 'delete'] },
|
||||
{ name: 'sessions', events: ['create', 'delete'] },
|
||||
{ name: 'verifications', events: ['create', 'delete'] }
|
||||
resources: [
|
||||
{ name: 'recovery', actions: ['create', 'delete'] },
|
||||
{ name: 'sessions', actions: ['create', 'delete'] },
|
||||
{ name: 'verifications', actions: ['create', 'delete'] }
|
||||
],
|
||||
events,
|
||||
actions,
|
||||
attributes: ['email', 'name', 'password', 'status', 'prefs']
|
||||
}
|
||||
];
|
||||
|
||||
function createEventString(
|
||||
service: typeof selectedService,
|
||||
request: typeof selectedRequest,
|
||||
event: string,
|
||||
resource: typeof selectedResource,
|
||||
action: string,
|
||||
attribute: string
|
||||
) {
|
||||
const data = new Map();
|
||||
//SERVICE
|
||||
if (service) {
|
||||
data.set('service', { value: service.name, description: 'service' });
|
||||
data.set('serviceId', {
|
||||
@@ -77,46 +76,43 @@
|
||||
});
|
||||
}
|
||||
|
||||
//REQUEST
|
||||
if (request) {
|
||||
if (request.name === 'documents') {
|
||||
data.set('request', {
|
||||
if (resource) {
|
||||
if (resource.name === 'documents') {
|
||||
data.set('resource', {
|
||||
value: 'collections',
|
||||
description: 'request'
|
||||
description: 'resource'
|
||||
});
|
||||
data.set('requestId', {
|
||||
data.set('resourceId', {
|
||||
value: '*',
|
||||
description: `ID of collection`
|
||||
});
|
||||
data.set('secondaryRequest', {
|
||||
data.set('secondaryResource', {
|
||||
value: 'documents',
|
||||
description: 'secondary request'
|
||||
description: 'secondary resource'
|
||||
});
|
||||
data.set('secondaryRequestId', {
|
||||
data.set('secondaryResourceId', {
|
||||
value: '*',
|
||||
description: `ID of document`
|
||||
});
|
||||
} else {
|
||||
data.set('request', {
|
||||
value: request.name,
|
||||
description: `request`
|
||||
data.set('resource', {
|
||||
value: resource.name,
|
||||
description: `resource`
|
||||
});
|
||||
data.set('requestId', {
|
||||
data.set('resourceId', {
|
||||
value: '*',
|
||||
description: `ID of ${request?.name.slice(0, -1)}`
|
||||
description: `ID of ${resource?.name.slice(0, -1)}`
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//EVENT
|
||||
if ((event && request?.events?.includes(event)) ?? service?.events?.includes(event)) {
|
||||
data.set('event', { value: event, description: 'event' });
|
||||
if ((action && resource?.actions?.includes(action)) ?? service?.actions?.includes(action)) {
|
||||
data.set('action', { value: action, description: 'action' });
|
||||
}
|
||||
|
||||
//ATTRIBUTE
|
||||
if (attribute && !request) {
|
||||
if (attribute && !resource) {
|
||||
data.set('attribute', { value: attribute, description: 'attribute' });
|
||||
} else if (event && service.name === 'users' && !request) {
|
||||
} else if (action && service.name === 'users' && !resource) {
|
||||
data.set('attribute', { value: '*', description: `attribute` });
|
||||
}
|
||||
return data;
|
||||
@@ -124,8 +120,8 @@
|
||||
|
||||
$: eventString = createEventString(
|
||||
selectedService,
|
||||
selectedRequest,
|
||||
selectedEvent,
|
||||
selectedResource,
|
||||
selectedAction,
|
||||
selectedAttribute
|
||||
);
|
||||
$: copyValue =
|
||||
@@ -135,8 +131,8 @@
|
||||
.join('.');
|
||||
|
||||
$: if (selectedService) {
|
||||
selectedRequest = null;
|
||||
selectedEvent = null;
|
||||
selectedResource = null;
|
||||
selectedAction = null;
|
||||
selectedAttribute = null;
|
||||
helper = null;
|
||||
}
|
||||
@@ -146,8 +142,8 @@
|
||||
|
||||
$: if (!show) {
|
||||
selectedService = null;
|
||||
selectedRequest = null;
|
||||
selectedEvent = null;
|
||||
selectedResource = null;
|
||||
selectedAction = null;
|
||||
selectedAttribute = null;
|
||||
helper = null;
|
||||
inputData = null;
|
||||
@@ -177,40 +173,40 @@
|
||||
</div>
|
||||
{#if selectedService}
|
||||
<div>
|
||||
<p class="u-text">Choose a request (optional)</p>
|
||||
<p class="u-text">Choose a resource (optional)</p>
|
||||
<div class="u-flex u-gap-8 u-margin-block-start-8">
|
||||
{#each selectedService.requests as request}
|
||||
{#each selectedService.resources as resource}
|
||||
<Pill
|
||||
disabled={showInput}
|
||||
selected={request.name === selectedRequest?.name}
|
||||
selected={resource.name === selectedResource?.name}
|
||||
button
|
||||
on:click={() => {
|
||||
selectedRequest === request
|
||||
? (selectedRequest = null)
|
||||
: (selectedRequest = request);
|
||||
selectedResource === resource
|
||||
? (selectedResource = null)
|
||||
: (selectedResource = resource);
|
||||
inputData = null;
|
||||
}}>{request.name}</Pill>
|
||||
}}>{resource.name}</Pill>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p class="u-text">Choose an event (optional)</p>
|
||||
<p class="u-text">Choose an action (optional)</p>
|
||||
<div class="u-flex u-gap-8 u-margin-block-start-8">
|
||||
{#each selectedRequest?.events ?? selectedService?.events as event}
|
||||
{#each selectedResource?.actions ?? selectedService?.actions as action}
|
||||
<Pill
|
||||
disabled={showInput}
|
||||
selected={selectedEvent === event}
|
||||
selected={selectedAction === action}
|
||||
button
|
||||
on:click={() => {
|
||||
selectedEvent === event
|
||||
? (selectedEvent = null)
|
||||
: (selectedEvent = event);
|
||||
selectedAction === action
|
||||
? (selectedAction = null)
|
||||
: (selectedAction = action);
|
||||
inputData = null;
|
||||
}}>{event}</Pill>
|
||||
}}>{action}</Pill>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
{#if selectedService?.name === 'users' && !selectedRequest?.name}
|
||||
{#if selectedService?.name === 'users' && !selectedResource?.name}
|
||||
<div>
|
||||
<p class="u-text">Choose an attribute (optional)</p>
|
||||
<div class="u-flex u-gap-8 u-margin-block-start-8">
|
||||
|
||||
@@ -80,8 +80,6 @@
|
||||
</div>
|
||||
<div class="status u-margin-inline-start-auto">
|
||||
<Status status={$log.data.status}>{$log.data.status}</Status>
|
||||
|
||||
<time>TBI</time>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tabs u-margin-block-start-48 u-sep-block-end">
|
||||
@@ -147,7 +145,6 @@
|
||||
</div>
|
||||
<div>
|
||||
<p>Triggered by: {$log.data.trigger}</p>
|
||||
<p>Type: TBI</p>
|
||||
</div>
|
||||
<div class="status u-margin-inline-start-auto">
|
||||
<Status status={$log.data.status}>{$log.data.status}</Status>
|
||||
@@ -162,16 +159,16 @@
|
||||
on:click={() => (selectedTab = 'response')}>
|
||||
Response
|
||||
</Tab>
|
||||
<Tab
|
||||
selected={selectedTab === 'errors'}
|
||||
on:click={() => (selectedTab = 'errors')}>
|
||||
Errors
|
||||
</Tab>
|
||||
<Tab
|
||||
selected={selectedTab === 'logs'}
|
||||
on:click={() => (selectedTab = 'logs')}>
|
||||
Logs
|
||||
</Tab>
|
||||
<Tab
|
||||
selected={selectedTab === 'errors'}
|
||||
on:click={() => (selectedTab = 'errors')}>
|
||||
Errors
|
||||
</Tab>
|
||||
</Tabs>
|
||||
</div>
|
||||
<div class="theme-dark u-stretch u-margin-block-start-32 u-overflow-hidden">
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@
|
||||
</script>
|
||||
|
||||
<WizardStep>
|
||||
<svelte:fragment slot="title">Create document data</svelte:fragment>
|
||||
<svelte:fragment slot="title">Create data</svelte:fragment>
|
||||
<svelte:fragment slot="subtitle">
|
||||
Provide document data based on attributes you created earlier.
|
||||
</svelte:fragment>
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
</script>
|
||||
|
||||
<WizardStep>
|
||||
<svelte:fragment slot="title">Set Permissions</svelte:fragment>
|
||||
<svelte:fragment slot="title">Permissions</svelte:fragment>
|
||||
<svelte:fragment slot="subtitle">
|
||||
Choose who can access your collection and documents. For more information, check out the <a
|
||||
href="https://appwrite.io/docs/permissions"
|
||||
|
||||
+4
-4
@@ -133,7 +133,9 @@
|
||||
$log.show = true;
|
||||
$log.func = $func;
|
||||
$log.data = activeDeployment;
|
||||
}}>Logs</Button>
|
||||
}}>
|
||||
Build logs
|
||||
</Button>
|
||||
<Button secondary on:click={() => execute.set($func)}>Execute now</Button>
|
||||
</svelte:fragment>
|
||||
</CardGrid>
|
||||
@@ -154,7 +156,6 @@
|
||||
<TableCellHead width={100}>Deployment ID</TableCellHead>
|
||||
<TableCellHead width={140}>Created</TableCellHead>
|
||||
<TableCellHead width={100}>Status</TableCellHead>
|
||||
<TableCellHead width={90}>Build time</TableCellHead>
|
||||
<TableCellHead width={70}>Size</TableCellHead>
|
||||
<TableCellHead width={25} />
|
||||
</TableHeader>
|
||||
@@ -179,8 +180,7 @@
|
||||
{deployment.status}
|
||||
</Status>
|
||||
</TableCell>
|
||||
<!-- TODO: replace with build time, when implemented -->
|
||||
<TableCellText title="Build Time">TBI</TableCellText>
|
||||
|
||||
<TableCellText title="Size">
|
||||
{calculateSize(deployment.size)}
|
||||
</TableCellText>
|
||||
|
||||
-2
@@ -55,7 +55,6 @@
|
||||
<TableCellHead width={140}>Created</TableCellHead>
|
||||
<TableCellHead width={110}>Status</TableCellHead>
|
||||
<TableCellHead width={90}>Trigger</TableCellHead>
|
||||
<TableCellHead width={70}>Type</TableCellHead>
|
||||
<TableCellHead width={100}>Duration</TableCellHead>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
@@ -86,7 +85,6 @@
|
||||
<span class="text u-trim">{execution.trigger}</span>
|
||||
</Pill>
|
||||
</TableCellText>
|
||||
<TableCellText title="Type">TBI</TableCellText>
|
||||
<TableCellText title="Duration">
|
||||
{calculateTime(execution.duration)}</TableCellText>
|
||||
</TableRowButton>
|
||||
|
||||
Reference in New Issue
Block a user