Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
spreadsheetRenderKey,
expandTabs,
databaseRelatedRowSheetOptions,
rowPermissionSheet
rowPermissionSheet,
type Columns
} from './store';
import { addSubPanel, registerCommands, updateCommandGroupRanks } from '$lib/commandCenter';
import CreateColumn from './createColumn.svelte';
Expand All @@ -56,7 +57,6 @@
import { Button, Seekbar } from '$lib/elements/forms';
import { generateFakeRecords, generateColumns } from '$lib/helpers/faker';
import { addNotification } from '$lib/stores/notifications';
import { sleep } from '$lib/helpers/promises';
import CreateIndex from './indexes/createIndex.svelte';
import { hash } from '$lib/helpers/string';
import { preferences } from '$lib/stores/preferences';
Expand All @@ -66,6 +66,7 @@

import IndexesSuggestions from '../(suggestions)/indexes.svelte';
import { showIndexesSuggestions, tableColumnSuggestions } from '../(suggestions)';
import type { RealtimeResponseEvent } from '@appwrite.io/console';

let editRow: EditRow;
let editRelatedRow: EditRelatedRow;
Expand All @@ -82,6 +83,8 @@
*/
let isWaterfallFromFaker = false;

let columnCreationHandler: ((response: RealtimeResponseEvent<unknown>) => void) | null = null;

onMount(() => {
expandTabs.set(preferences.getKey('tableHeaderExpanded', true));

Expand All @@ -92,6 +95,10 @@
response.events.includes('databases.*.tables.*.columns.*') ||
response.events.includes('databases.*.tables.*.indexes.*')
) {
if (isWaterfallFromFaker) {
columnCreationHandler?.(response);
}

// don't invalidate when -
// 1. from faker
// 2. ai columns creation
Expand Down Expand Up @@ -253,21 +260,76 @@
indexes: 700
});

function setupColumnObserver() {
let expectedCount = 0;
let resolvePromise: () => void;
let timeout: ReturnType<typeof setTimeout>;

const availableColumns = new Set<string>();
const waitPromise = new Promise<void>((resolve) => (resolvePromise = resolve));

columnCreationHandler = (response) => {
const { events, payload } = response;

if (
events.includes('databases.*.tables.*.columns.*.create') ||
events.includes('databases.*.tables.*.columns.*.update')
) {
const asColumn = payload as Columns;
const columnId = asColumn.key;
const status = asColumn.status;

if (status === 'available') {
availableColumns.add(columnId);

if (expectedCount > 0 && availableColumns.size >= expectedCount) {
clearTimeout(timeout);
columnCreationHandler = null;
resolvePromise();
}
}
}
};

// return function to start waiting!
const startWaiting = (count: number) => {
expectedCount = count;

timeout = setTimeout(() => {
columnCreationHandler = null;
resolvePromise();
}, 10000);

if (availableColumns.size >= expectedCount) {
clearTimeout(timeout);
columnCreationHandler = null;
resolvePromise();
}
};

return { startWaiting, waitPromise };
}

async function createFakeData() {
isWaterfallFromFaker = true;

$spreadsheetLoading = true;
$randomDataModalState.show = false;

let columns = $table.columns;
let columns = page.data.table.columns as Columns[];
const hasAnyRelationships = columns.some((column) => isRelationship(column));
const filteredColumns = columns.filter((col) => col.type !== 'relationship');

if (!filteredColumns.length) {
try {
const { startWaiting, waitPromise } = setupColumnObserver();
columns = await generateColumns($project, page.params.database, page.params.table);
startWaiting(columns.length);
await waitPromise;

await invalidate(Dependencies.TABLE);
columns = page.data.table.columns as Columns[];

trackEvent(Submit.ColumnCreate, { type: 'faker' });
} catch (e) {
addNotification({
Expand All @@ -279,9 +341,6 @@
}
}

/* let the columns be processed! */
await sleep(1250);

let rowIds = [];
try {
const { rows, ids } = generateFakeRecords(columns, $randomDataModalState.value);
Expand Down